远程命令执行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字节,我们需要想办法在目标服务器中写入一句话木马 |

