Shellshock远程命令注入
验证
$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
在终端中运行上面的命令,如果返回有vulnerable,就说明这台服务器中枪了。
把命令中的bash替换成其他类型的shell,可以检查机器上其他shell是否中枪。
1、准备
准备靶机 一台CentOS 7(192.168.96.222)
启动靶场 docker-compose up -d
用 docker ps 来查看运行的默认端口号,
BurpSuit 抓包、改包
2、介绍 shellshock
- shellshock是 unix 系统下的bash shell的一个漏洞,Bash 4.3以及之前的版本在处理某些构造的环境变量时存在安全漏洞,向环境变量值内的函数定义后添加多余的字符串会触发此漏洞,攻击者可利用此漏洞改变或绕过环境限制,以执行任意的shell命令,甚至完全控制目标系统。
- 目前的Bash使用的环境变量是通过函数名称来调用的,导致漏洞出问题是以“(){”开头定义的环境变量在命令ENV中解析成函数后,Bash执行并未退出,而是继续解析并执行shell命令。而其核心的原因在于在输入的过滤中没有严格限制边界,也没有做出合法化的参数判断。
- 执行CGI 时会调用Bash将Referer、host、UserAgent、header等作为环境变量进行处理
3、Vulhub复现
启动靶场后,访问192.168.96.222:80,可以看到访问两个文件,sofe.cgi和victim.cgi,其中 safe.cgi 是最新版 bash 生成的页面,victim.cgi 是 bash4.3 生成的页面。
将 payload 附在 User-Agent 中访问 victim.cgi:
User-Agent: () { foo; }; echo Content-Type: text/plain; echo; /usr/bin/id
改包,发送,是有该漏洞的。
另一个soft.cgi是没有的。
4、漏洞验证
https://www.antiy.com/response/bash.html 参考该文章。
本地验证:
env x='() { :;}; echo Vulnerable CVE-2014-6271 ' bash -c "echo test"
5、漏洞可能会带来的影响
- 此漏洞可以绕过ForceCommand在sshd中的配置,从而执行任意命令;
- 如果CGI脚本用Bash编写,则使用mod_cgi或mod_cgid的Apache服务器会受到影响;
- DHCP客户端调用shell脚本来配置系统,可能存在允许任意命令执行;
- 各种daemon和SUID/privileged的程序都可能执行shell脚本,通过用户设置或影响环境变量值,允许任意命令运行。