远程命令执行RCE
远程命令执行RCE
一、代码注入
控制PHP代码
直接执行代码函数:
1 | eval(mixed $arg); #当作php代码执行(需要有分号) |
间接:
1、call_user_func()——调用回调函数
mixed call_user_func(callable $callback [, mixed $paramter…]) #回调函数,第一个参数函数,第二个参数函数的参数is_callable(‘’)测试是否可以作为回调函数,system、assert允许
2、array_map()
array_map ( callable $callback
, array $array1
[, array $...
] ) : array
和1、差不多,但是传入的参数是数组方式,数组里的每一个元素都要传入的回调函数里执行。回调函数有几个参数,就要传几个数组,每个数组对应每个函数的参数进行传参。
3、create_function() ——创建匿名函数
create_function(string $args, string $code) #创建一个匿名函数
4、preg_replace()
代码执行 ——字符串匹配,如/e且匹配成功则执行参数
preg_replace("/test/e"
,$_GET
["h"
],"jutst test"
); 如果参数1的正则表达匹配到参数3的内容且参数1有/e修饰符,则执行参数2的代码。
5、preg_match
代码执行
二、命令注入
执行服务器命令
其它命令执行函数官方文档:https://www.php.net/manual/zh/ref.exec.php
1、system()
system ( string $command
[, int &$return_var
] ) : string
显示所有结果
2、exec()
exec ( string $command
[, array &$output
[, int &$return_var
]] ) : string
默认返回执行结果的最后一行
3、shell_exec()
shell_exec ( string $cmd
) : string
只返回所有结果,不自动打印返回结果
4、passthru()
passthru ( string $command
[, int &$return_var
] ) : void
5、``运算符
反引号直接执行命令
6、popen
popen(command,mode)
7、
三、绕过命令注入长度的限制
1 | #假设命令限制最长10字节,我们需要想办法在目标服务器中写入一句话木马 |