我在我的(小型、个人且绝对不重要的)Web 服务器上尝试过很多次,apache 和 fail2ban 通常都能正常工作。但有一个日志条目让我担心:
xx.yy.www.zzz - - [9/Jul/2011:12:42:15 +0100] "GET http://allrequestsallowed.com/?PHPSESSID=5gh6ncjh00043YVMWTW_B%5CFAP HTTP/1.1" 200 432 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12"
问题是答案不是 404 代码,而是 200。这样可以吗?我觉得这很奇怪,但我对这个领域(以及许多其他领域)的了解,说得委婉一点,是有限的。
答案1
首先,我不清楚假定攻击者想要实现什么目的。也许有某个 PHP 脚本或 PHP 版本容易受到某些奇怪的会话 ID 攻击,我不知道。不过,您可能无需担心。
您的服务器的行为完全符合预期。200 是该特定情况下的预期代码,这是由于 Apache 解释传递给它的 URL 的方式决定的。
首先,http://allrequestsallowed.com
被视为更常见的“Host:”标头(请注意,我认为这在 RFC 中没有指定,其他服务器可能不会以这种方式解释它,我错了,这是在 RFC 2616 的第 5.1.2 节中指定的,即使客户端似乎很少使用这种形式。对不起,我需要去修复我之前编写的 HTTP 服务器实现...)。
现在,假设您没有名为“allrequestsallowed.com”的站点。那么当 Apache 收到Host:
它无法识别的主机名的标头(或等效内容)时会发生什么?它会选择第一个虚拟主机作为默认主机。这是 Apache 明确定义和记录的行为。因此,无论您的第一个虚拟主机是什么(或者,如果没有任何虚拟主机,则只是主服务器配置),无论它叫什么,都会接管。
现在,给出的 URL 的其余部分由两部分组成——路径/
和 GET 参数(?PHPSESSID...
位)。
现在,该路径/
应该存在于几乎所有的 Web 服务器上。在大多数情况下,它会映射到类似index.html
或index.php
脚本之类的东西,当然,您可以覆盖其中任何一个。
如果它映射到静态 HTML 文件,则绝对不会发生任何异常情况 - 文件的内容被返回,仅此而已,参数被忽略。(假设您没有设置某些高级配置指令,而且您几乎肯定没有。)
另一方面,如果它是某种脚本,该PHPSESSID
变量将被传递给脚本。如果脚本实际上用途该变量(在这种特殊情况下,只有使用 PHP 内置会话处理的 PHP 脚本才有可能),其行为将取决于内容。
然而,很有可能,即使您/
碰巧使用会话映射到 PHP 脚本,也不会发生任何异常。会话 ID 可能根本不存在,要么会被忽略,要么脚本会显示错误。
在会话 ID 确实存在的不太可能的情况下,攻击者可以劫持其他人的会话。这很糟糕,但它本身并不是一个真正的安全漏洞——漏洞可能存在于攻击者获取会话 ID 信息的地方(如果您不使用 HTTPS,嗅探无线网络是一个不错的选择)。他们实际上无法做任何该会话的原始用户无法做的事情。
编辑:此外,SESSIONID 中的“%5C”映射到反斜杠字符。这似乎是针对 Windows 主机的目录遍历攻击的测试。
答案2
我已经将这个 allrequestsallowed 登录到一个 IP 上,该 IP 被用作我们所有停放域的 A 记录。
我的想法是,将此主机名与指向目标主机的“攻击者”本地主机文件结合使用。
31.44.184.250 处的实际网络服务器只是用于处理外部请求。
我的看法是:完全无害。除了可以使用主机文件中的任何其他假域名执行的操作外,看不到它的任何增值用途。