Shellshock绕过的一点疑问

这两天Shellshock(CVE-2014-6271)漏洞闹的沸沸扬扬,相关链接:

http://blog.knownsec.com/2014/09/bash_3-0-4-3-command-exec-analysis/   知道创宇的源码级分析

http://coolshell.cn/articles/11973.html  酷壳陈皓的分析


具体细节上面两篇文章应该说的很清楚了,就不多说了。

在陈皓的分析里面,提到了官方补丁的绕过,即CVE-2014-7169。绕过代码如下:

env X='() { (a)=>\' sh -c "echo date";cat echo

关于这个绕过,说一下我自己的观点:

这是一个炫技式的绕过,意义不大。


先说一下Shellshock(CVE-2014-6271)是怎么产生的,PoC如下:

env VAR='() { :;}; echo Bash is vulnerable!' bash -c "echo Bash Test"

首先前面的env VAR='() { :;}; echo Bash is vulnerable!'的作用是向环境变量中加入了一个值,名称是VAR,值为

() { :;}; echo Bash is vulnerable!

随后bash进程启动初始化的时候,会解析当前的环境变量。但是对于函数没有解析好,造成了命令注入,导致了echo Bash is vulnerable!被执行。

这个洞的核心在于bash解析环境变量的时候没有解析好,只要污染环境变量,都会造成有漏洞的bash执行预先设置好的指令。

也就是说,攻击者只需要污染环境变量就可以了,后面的bash所执行的内容(echo Bash Test)是不用管的,无论执行什么内容,都会导致echo Bash is vulnerable!被执行。

来看一下攻击远程web服务器的PoC:

curl -H 'User-Agent: () { :;}; YOUR COMMAND' http://xxx/cgi-bin/xxx.sh

攻击者发送了User-Agent头为() { :;}; YOUR COMMAND的HTTP报文,其中的YOUR COMMAND是攻击者注入的命令。

前半段的注入的User-Agent就相当于env VAR='() { :;}; YOUR COMMAND',后面服务器执行xxx.sh相当于bash -c"echo Bash Test"

因此攻击者才可以执行任意指令。


现在来看这个所谓的绕过:

env X='() { (a)=>\' sh -c "echo date";cat echo

其实这个可以写成

env X='() { (a)=>\' bash -c "dumped command";cat dumped

具体为什么这么写,可以看陈皓的分析。

cat dumped仅仅是读取文件,与这个洞无关,可以去掉,于是成为

env X='() { (a)=>\' bash -c "dumped command"

对比第一个PoC:

env VAR='() { :;}; YOUR COMMAND' bash -c "WHATEVER"

可以看到,攻击者根本就没有注入任何的攻击指令(没有YOUR COMMAND)。

攻击者所注入的,仅仅是一个>\,而服务器要执行什么指令,是攻击者所不能控制的。

所以我才说这个所谓的绕过,是炫技式的。


当然这只是我的一家之言,或许某些部分是我没有想明白,欢迎大家跟我讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值