php中的危险函数
命令执行函数
system()
能够将字符串作为OS 命令执行
并且使用system() 可以将结果输出到前端
1 |
|
exec()
将字符串当作os 命令执行,但是不会自动返回到前端
- 需要手动的输出命令的执行结果
- 不支持命令中存在空格
1 |
|
注意这个相比上面一个添加了print
shell_exec()
把函数中的参数当作os 命令执行
- 需要手动的输出命令的执行结果
1 |
|
passthru()
将字符串当做系统命令执行
- 自带输出功能
1 |
|
popen()
此函数没有回显,但是可以执行命令
- 需要将输出结果导入文件
1 |
|
反引号
反引号``内的字符,也会被解析成os 命令
代码执行函数
eval()
会将符合PHP 语法规范字符串当作php 代码执行
虽然可以以函数的方式调用
eval()
,但是eval()
不是PHP 的函数,而是一种语法结构。在
eval()
执行的的字符串要以分号结束。其他命令执行的方式
?code=phpinfo();
?code=${phpinfo()};
?code=1;phpinfo();
1 |
|
assert()
同样会将字符串当做PHP 代码来执行。
- 字符串结尾可以不添加分号。
1 |
|
preg_replace()
preg_replace()
函数的作用是对字符串进行正则匹配后替换。
- 搜索
$subject
中匹配$pattern 的部分,以$replacement
进行替换。 - 当
$pattern
处,存在e
修饰符时,$replacement
的值会被当成PHP 代码来执行。
1 |
|
执行的代码中的参数会被转义
call_user_func()
call_user_func()
等函数都有调用其他函数的功能,回调函数。
1 |
|
$funName
被调用的函数名$para
作为被调用函数的参数,参数中的单引号没有被转义
1 |
|
动态函数$a($b)
这种写法跟使用
call_user_func()
的初衷一样,用来更加方便地调用函数,但是一旦过了不严格就会造成代码执行漏洞。
1 |
|
php中的危险函数
https://tsy244.github.io/2024/05/20/渗透/php中的危险函数/