远程代码执行漏洞的利用与防御

什么是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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值