2

我一直在尝试利用系统中的 Shellshock 漏洞并遇到了一个有趣的问题。我一直在使用“wget”来利用该漏洞。我正在使用的命令如下:

wget -U "() { test;};echo \"Content-type: text/plain\"; echo; echo; /bin/cat /etc/passwd" http://somesite.com/some-script.cgi

使用上述命令,漏洞按预期显示。但是,当我尝试 wget 一个不是 .cgi 文件的文件时,漏洞不会出现,并且只下载文件。

据我了解,wget 应该将 User-Agent 字符串设置为应该运行代码的命令中传递的值/bin/cat /etc/passwd,我看不出这与正在下载的文件的性质有什么关系。

提前致谢。

4

1 回答 1

2

为了利用shellshock 漏洞,需要执行以下步骤:

  1. 您必须让目标服务器将特定字符串注入环境变量,并且

  2. 设置环境变量后,目标必须(直接或间接)启动(易受攻击的版本)bash shell。

发生这种情况的一种方式是,当 Web 服务器通过通用网关接口 (CGI)执行外部程序时,外部程序要么是 bash shell 脚本,要么调用 bash。发生这种情况是因为 CGI 协议指定来自原始 HTTP 请求的标头在带有前缀的环境变量中传递给外部程序HTTP_(例如HTTP_USER_AGENT,对于 User-Agent 标头)。由于攻击者可以控制这些标头,因此他们也可以直接控制这些环境变量的值。

但是,只有在通过 CGI 调用外部程序时,Web 服务器才需要设置这些环境变量。下发静态文件时,服务器只需要从磁盘中读取该文件并发回给客户端即可;它不需要设置任何环境变量或调用任何外部工具,如 bash。

于 2015-11-16T00:19:40.677 回答