20201124-web方向-命令执行-RCE

参考链接:https://www.cnblogs.com/wangtanzhi/p/12311239.html

 

RCE:

英文全称:remote command / code execcute

分别为远程命令执行(ping)和远程代码执行(evel)

我们常见的路由器、防火墙、入侵检测等设备的web管理界面上一般会给用户提供一个ping操作的web界面,攻击者直接从web界面向后台服务器远程注入操作系统命令或者代码,从而控制后台系统,这就是RCE漏洞。

windows:

|” 管道符,前面命令标准输出,后面命令的标准输入。例如:help |more

“&” commandA & commandB 先运行命令A,然后运行命令B

||” commandA || commandB 运行命令A,如果失败则运行命令B

“&&” commandA && commandB 运行命令A,如果成功则运行命令B

linux:

; 前面的执行完执行后面的 ping 127.0.0.1;whoami

| 管道符,显示后面的执行结果 ping 127.0.0.1|whoami

|| 当前面的执行出错时执行后面的 ping 1||whoami

& 前面的语句为假则直接执行后面的,前面可真可假 ping 127.0.0.1&whoami

&&前面的语句为假则直接出错,后面的也不执行,前面只能为真 ping 127.0.0.1&&whoami

无参RCE:

形式:

if(‘;‘ === preg_replace(‘/[^\W]+\((?R)?\)/‘, ‘‘, $_GET[‘code‘])) { eval($_GET[‘code‘]);}

preg_replace(‘/[a-z]+\((?R)?\)/‘, NULL, $code)

pre_match(‘/et|na|nt|strlen|info|path||rand|dec|bin|hex|oct|pi|exp|log/i‘, $code))

代码分析:

preg_replace (做限制)的主要功能就是限制我们传输进来的必须是纯小写字母的函数,而且不能携带参数。

再来看一下:(?R)?,这个意思为递归整个匹配模式。所以正则的含义就是匹配无参数的函数,内部可以无限嵌套相同的模式(无参数函数)

preg_match (做过滤)的主要功能就是过滤函数,把一些常用不带参数的函数关键部分都给过滤了,需要去构造别的方法去执行命令。

绕过preg_match的RCE:

 

相关文章