一、RCE简述
1、什么是RCE?
RCE,名为远程代码/命令执行,而RCE漏洞可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
2、原理?
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口。比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上。一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。下面来看一下pikachu靶场中ping的漏洞页面:
在讲到这个漏洞之前,需要提及一下Windows系统中常见的几种命令拼接方式。
二、Windows系统命令拼接方式
1)“|”-----管道符,前面命令标准输出,后面命令的标准输入。例如:A | B,不管命令A是否为正确命令,都只会执行命令B(只执行后面的),如
2)“&” -----A & B 无论真假,先运行命令A,然后运行命令B(强调执行顺序的先后),如
3)“||” -----A || B 只有A为假时才执行B,否则只执行A(A和B只执行一个)
4)“&&” -----A && B 运行命令A,如果成功则运行命令B(简言之,就是A的状态决定了B是否执行,A为真,则A与B都执行;A为假,B为真为假都无意义,总体为假)
三、正式进入exec “ping”
-------这里我以管道符 | 举例,不同的拼接方式需具体问题具体分析--------
1)尝试 ping 一下本地127.0.0.1或者8.8.8.8,这里ping能成功,并且页面有反应提示:
2)结合使用Windows拼接方式,查看是否反应正常,这里我使用的whoami命令,使用whoami命令可以查看当前系统的一些信息,如下:
3)或者使用type命令,可以查看当前路径和路径下的文件,type命令后接需要查看文件的路径,这里我查看的文件是我本地下的C:\Windows\win.ini,如下:
四、源码文件分析
(意在节省资源消耗)!!!
在本关代码中,首先将$ _POST[‘ipaddress’]赋值给$ip,然后直接未经任何处理就将其传入shell_exec()函数执行,造成命令可拼接执行。
五、RCE漏洞防护
1)尽量不要使用命令执行函数。
2)不要让用户控制参数。
3)执行前做好检测和过滤。