我会在这里写下我在写ctf题时遇到的不会和不熟悉的的php函数

preg_match

这个函数是个正则表达式,代码如下

1
2
3
4
5
6
if (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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
/* 模式中的 \b 标记一个单词边界,所以只有独立的单词"web"会被匹配,而不会匹配
* 单词的部分内容比如"webbing" 或 "cobweb" */
if (preg_match("/\bweb\b/i", "PHP is the web scripting language of choice.")) {
echo "查找到匹配的字符串。\n";
} else {
echo "未发现匹配的字符串。\n";
}

if (preg_match("/\bweb\b/i", "PHP is the website scripting language of choice.")) {
echo "查找到匹配的字符串。\n";
} else {
echo "未发现匹配的字符串。\n";
}
?>

输出

1
2
查找到匹配的字符串。
未发现匹配的字符串。

在前式的字符串用/分隔字符串时可以添加\b来标记单词边界,只有独立的单词会被查询匹配

substr 函数返回字符串的一部分。

1
2
3
4
5
6
7
8
9
10
11
12
<?php
echo substr("Hello world",10)."<br>";
echo substr("Hello world",1)."<br>";
echo substr("Hello world",3)."<br>";
echo substr("Hello world",7)."<br>";

echo substr("Hello world",-1)."<br>";
echo substr("Hello world",-10)."<br>";
echo substr("Hello world",-8)."<br>";
echo substr("Hello world",-4)."<br>";
?>

输出

1
2
3
4
5
6
7
8
d
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
<?php
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
8
Hello 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()

执行外部程序并且显示原始输出