RCE(remote command/code execute,远程系统命令/代码执行)
RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
原因:应用系统从设计上需要给用户提供指定的远程命令或远程代码执行操作的接口,如果设计者再设计该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器。
1.exec “ping”
-
提交正常的ip地址,如127.0.0.1
-
提交ip查询命令
127.0.0.1 & ipconfig
发现执行了ping的同时也执行了ipconfig命令,获取到了目标ip地址。
2.exec “eval”
-
随便输入一个字符串。
-
尝试输入一个php代码。
比如:phpinfo();
总结
一些比较危险的函数,引自:远程命令/代码执行漏洞(RCE)总结
-
system() :
string system ( string $command [, int &$return_var ] )
-
shell_exec():
shell_exec — 通过 shell 环境执行命令 ( 这就意味着这个方法只能在 linux 或 mac os的shell环境中运行 ),并且将完整的输出以字符串的方式返回。如果执行过程中发生错误或者进程不产生输出,则返回 NULL。
-
exec():
string exec ( string $command [, array &$output [, int &$return_var ]] )
exec执行command命令,但是不会输出全部结果,而是返回结果的最后一行,如果你想得到全部的结果,可以使用第二个参数,让其输出到一个数组,数组的每一个记录代表了输出的每一行,如果输出结果有10行,则数组就有10条记录。所以如果你需要反复输出调用不同系统外部命令的结果,你最好在输出每一条系统外部命令结果时清空这个数组,以防混乱。第三个参数用来取得命令执行的状态码,通常执行成功都是返回0
-
passthru():
void passthru ( string $command [, int &$return_var ] )
与exec的区别:passthru直接将结果输出,不返回结果,不用使用echo查看结果。