“allrequestsallowed.com”...黑客尝试?

lur*_*uri 11 server security webserver

我在我的(小型的、个人的且绝对不重要的)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"
Run Code Online (Sandbox Code Playgroud)

问题是答案不是 404 代码,而是 200。可以吗?对我来说似乎很奇怪,但我在这个领域(以及许多其他领域)的知识,委婉地说,是有限的。

Nic*_*ght 12

首先,我不知道假定的攻击者想要完成什么。也许有一个 PHP 脚本或 PHP 版本容易受到一些奇怪的会话 ID 攻击,我不知道。不过,您可能没有什么可担心的。

您的服务器的行为完全符合预期。200 是这种特定情况下的预期代码,因为 Apache 如何解释传递给它的 URL。

首先,http://allrequestsallowed.com被视为更常见的“主机:”标头(请注意,我不认为这是在 RFC 中指定的,其他服务器可能不会以这种方式解释它,我错了,这是在 RFC 2616 的第 5.1 节中指定的。 2,即使客户端似乎很少使用这种形式。对不起,我需要去修复我不久前写的一个 HTTP 服务器实现......)。

现在,大概您没有名为“allrequestsallowed.com”的站点。那么当 Apache 获取一个Host:它无法识别的主机名的标头(或等效标头)时会发生什么?它选择第一个虚拟主机作为默认值。这是 Apache 定义明确且记录在案的行为。因此,无论您的第一个虚拟主机是什么(或者如果没有任何虚拟主机,则只是主服务器配置)接管,无论它的名称如何。

现在,给定的 URL 的其余部分由两部分组成——路径/、 和 GET 参数(?PHPSESSID...位)。

现在,该路径/应该存在于几乎所有的 Web 服务器上。在大多数情况下,它映射到类似index.htmlindex.php脚本的东西,当然你可以覆盖其中的任何一个。

如果它映射到一个静态 HTML 文件,绝对不会发生任何异常——文件的内容被返回,就是这样,参数被简单地忽略。(假设您没有设置某些高级配置指令,而且您几乎可以肯定没有。)

另一方面,如果它是某种脚本,该PHPSESSID变量将被传递给脚本。如果脚本实际使用该变量(在这种特殊情况下,只有使用 PHP 内置会话处理的 PHP 脚本可能会使用),其行为将取决于内容。

然而,很有可能,即使您/碰巧使用会话映射到 PHP 脚本,也不会发生任何显着的情况。无论如何,会话 ID 可能不存在,并且将被忽略,或者脚本将显示错误。

在会话 ID 确实存在的不太可能的情况下,攻击者可能会劫持其他人的会话。那会很糟糕,但它本身并不是一个真正的安全漏洞——该漏洞将出现在攻击者从哪里获取会话 ID 信息的地方(如果您不使用 HTTPS,则嗅探无线网络是一个不错的选择)。他们实际上无法执行最初会话的用户无法执行的任何操作。

编辑:此外,SESSIONID 中的 '%5C' 映射到反斜杠字符。这似乎是对 Windows 主机上的目录遍历攻击的测试。