php函数
我会在这里写下我在写ctf题时遇到的不会和不熟悉的的php函数
preg_match
这个函数是个正则表达式,代码如下1
2
3
4
5
6if (preg_match("/php/i", "PHP is the web scripting language of choice.")) {
echo "查找到匹配的字符串 php。";
} else {
echo "未发现匹配的字符串 php。";
}
输出:查找到匹配的字符串 php
上面的代码的意思为:在后式的”PHP”中查找前式列出的字符串php,有则返回1无返回0
/php/两边的/是用于对字符串的分隔//后的i代表这是一个对大小写不敏感的查询所有这个会返回1就是真
1 | <?php |
输出1
2查找到匹配的字符串。
未发现匹配的字符串。
在前式的字符串用/分隔字符串时可以添加\b来标记单词边界,只有独立的单词会被查询匹配
substr 函数返回字符串的一部分。
1 |
|
输出1
2
3
4
5
6
7
8d
ello world
lo world
orld
d
ello world
lo world
orld
这个函数的实质就是返回从第n个字符开始后的除第n个字符的所有字符
负数就是倒着数第n个开始1
2
3
4
5
6
7
8
9
10
11
echo substr("Hello world",0,10)."<br>";
echo substr("Hello world",1,8)."<br>";
echo substr("Hello world",0,5)."<br>";
echo substr("Hello world",6,6)."<br>";
echo substr("Hello world",0,-1)."<br>";
echo substr("Hello world",-10,-2)."<br>";
echo substr("Hello world",0,-6)."<br>";
echo substr("Hello world",-2-3)."<br>";
返回1
2
3
4
5
6
7
8Hello worl
ello wor
Hello
world
Hello worl
ello wor
Hello
world
eval(),assert():将函数内的字符串当成代码执行
由于该函数会将函数内的字符串当成代码执行,这也就导致我们可以在这个函数里输入一些危险函数来对服务器进行操作
危险函数
1.system() exec() shell_exec() passthru()
system()
该函数会执行外部程序(也就是命令)并将结果返回显示输出
exec()
该函数与system非常相似,不同的是该函数不会显示输出,只是返回值为命令的结果,所有如果要查看结果需要输出该函数的值,可以使用echo()或var_dump()
shell_exec()
该函数需要在shell环境下才可以执行命令(意味着只能在linux,mac,shell环境下才可以运行)
passthru()
执行外部程序并且显示原始输出