您的位置:首页 > 运维架构 > Shell

Shellshock绕过的一点疑问

2014-09-28 16:39 337 查看
这两天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)。

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

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

当然这只是我的一家之言,或许某些部分是我没有想明白,欢迎大家跟我讨论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: