什么是RCE漏洞
全称:remote command/code execute
分为远程命令执行和远程代码执行
1.命令执行漏洞: 直接调用操作系统命令
2.代码执行漏洞: 靠执行脚本代码调用操作系统命令
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口,比如我们常见的路由器、防火墙、入侵检测等设备的web
管理界面上一般会给用户提供一个
ping
操作的
web
界面,用户从web
界面输入目标
IP
,提交后,后台会对该
IP
地址进行一次
ping
测试,并返回测试结果。 而如果设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“
意想不到
”
的命令,从而让后台进行执行,从而控制整个后台服务器。
原理
在利用调用系统命令的执行函数,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行漏洞。
php为例
eval();assert();preg_replace();create_function();
array_map();call_user_func();call_user_func_array();
array_filter();uasort();proc_popen();passthru();
system();exec();shell_exec();pcntl_exec();popen();
JAVA中
java.lang.Runtime#exec()、java.lang.ProcessBuilder#start()、java.lang.ProcessImpl#start()以及通过JNI的方式调用动态链接库
实战
对Pikachu进行实战
1.
对
pikachu
网站的命令执行的地方抓包看效果

看代码
直接开搞
可以看到Pikachu没有做什么防御,就直接突破啦。
对dvwa进行实战
低安全级别的时候,
和
pikachu
差不多的,这里就不演示了,我们直接看安全中级的效果
加上了过滤条件,将两个
&
和分号给替换了,但是我们想绕过的话,一个
&
符号就可以了,这就属于程序员没有考虑好。

再来看高安全级别的,添加的符号就多了,有细心的人可能发现,这里有一个
&
,那么我们使用两个&&是不是可以绕过啊,答案是不可以的,这个取决于它使用的替换方法:
看两个&&,也是不能绕过的。
那么高安全级别的如何绕过呢? | ,注意看,高级别的防范中,有一个||和一个| ,而一个管道符号的仔细看的话,其实后面还有一个空格,那么我们就可以使用一个|并且不带空格来进行绕过。看示例:果然成功了。所以做代码审计,就是要细致!
再看它没有漏洞的级别,没有使用符号黑名单的形式,而是对你给我的数据进行
.
分割,然后看你每个部分是不是数字,这就比较狠了。

RCE的防御
1
、开源框架,升级到最新版本
2
、尽量不要使用命令执行的函数
3
、如果必须使用,需要做白名单处理
4
、用正则表达式对用户输入的内容进行处理
5
、使用
WAF