Shellshock-CVE-2014-6271
漏洞范围
该漏洞在Red Hat、CentOS、Ubuntu 、Fedora 、Amazon Linux 、OS X 10.10中均拥有存在CVE-2014-6271(即“破壳”漏洞)漏洞的Bash版本,同时由于Bash在各主流操作系统的广泛应用,此漏洞的影响范围包括但不限于大多数应用Bash的Unix、Linux、Mac OS X,而针对这些操作系统管理下的数据均存在高危威胁。
漏洞具体成因
1)Linux Web Server 一般可以提供CGI接口,允许远程执行Bash命令
2)对于 http 头部,CGI 脚本解析器会将其当作环境变量,调用Bash的env相关函数设置到临时环境变量中
3)Http 允许发送任意客户端自定义的 HTTP头部
大家此时有没有想法?
小白 : 包的呀!
大神 :access getshell
是的,我们可以构造好带攻击命令的HTTP头部到服务器,服务器调用设置环境变量的函数,直接执行了客户端指定头部里面的命令
复现过程
我们使用两个版本进行对比
一个是Bash4.3 生成的页面,一个是修复版的Bash生成的页面
victim.cgi
1 |
|
safe.cgi
1 |
|
payload
1 |
|
解释一下
() { foo; };
:这定义了一个匿名函数,函数体仅包含对foo
命令的调用。不过,代码里并未对foo
命令进行定义,所以在执行时会报错。echo Content-Type: text/plain;
:此命令会向标准输出打印Content-Type: text/plain
。在 HTTP 响应里,Content-Type
一般用于表明响应内容的类型。echo;
:该命令会输出一个空行,在 HTTP 响应里,空行用于分隔响应头和响应体。/usr/bin/whoami
:这个命令会输出当前用户的用户名
实践
victim.cgi
你没看错执行了!
safe.cgi
没有把攻击命令当作变量执行了
Shellshock-CVE-2014-6271
https://ydnd.github.io/2025/04/02/Shellshock-CVE-2014-6271/