日志文件中对具有不同域名/URL 的网站发出的请求是黑客攻击吗?

日志文件中对具有不同域名/URL 的网站发出的请求是黑客攻击吗?

在我的一个网站中,我记录了对服务器的所有 URL 请求。我记录这些数据是为了统计目的,以改进网站。

日志看起来像

http://example.com/search       2016-01-12 23:03:09
http://example.com/post/1234    2016-01-12 23:03:12
..........

所以,这看起来很正常。我现在在日志中发现了一些对我来说不合理的东西,我有几百个带有不同域名的条目

http://dhg.example.org/httptest.php   2016-01-10 20:12:15

过去我也遇到过类似的问题,与我的域名或服务器 IP 地址有关

http://example.com/httptest.php
http://192.0.123.12/httptest.php

我想知道为什么对我的服务器发出的请求有该 URL 而不是我的网站 URL 或服务器 IP。

我应该担心吗?这是对我的服务器的某种攻击吗?

编辑

具体来说,服务器上运行的应用程序会记录这些 URL,而不是服务器本身。因此,在每个页面请求中,我的脚本都会将 URL 记录在数组$_SERVER

答案1

$_SERVER当您说正在使用来自的值时,大概您的意思是$_SERVER['HTTP_HOST']

将此值设置为任意值非常容易——它来自向您的服务器发送的请求中的 HTTP“Host:”标头。例如,您的服务器的 IP 为 1.2.3.4:

curl -H 'Host: otherserver.com' http://1.2.3.4/httptest.php

你的日志系统可能会将其重新组装成一个请求http://otherserver.com/httptest.php

在您的网络服务器上尝试这样的请求,看看您的日志中发生了什么!

我只能猜测为什么有人会这样做。人们可能想测试在 IP 地址上运行的 HTTP 服务,但不知道那里的任何有效主机名。一些 Web 服务器可能会拒绝没有“Host:”标头的请求,因此发送/some/“Host:”标头可能比没有要好。

此外,有时恶意 URL 似乎会被发送到服务器,以便它们最终出现在日志中,服务器管理员可能会看到这些 URL 并可能点击它们。

一个好的安全做法是删除与server{}Nginx 中的默认块建立的连接。这是缺少或无效Host:标头的连接所在的位置。以下是示例:

server {
    listen       80  default_server;
    server_name  _; # some invalid name that won't match anything
    return       444;
}

444 响应代码是 Nginx 特有的。它只是关闭连接并且不返回任何内容,从而最大限度地减少您在这些连接上花费的带宽和资源使用。

答案2

成功攻击的第一步是收集信息。我做了一些研究,发现 httptest.php 在Github 账户寻找 Kohana,搜索 Kohana 让我找到了快速实施。但是,有人可能会使用相同的文件名称来试图混淆日志读取器。虽然单个条目在由合适的人制作时同样危险,但当您看到多个条目,尤其是大量 404 错误时,您需要非常谨慎,因为这可能表明针对您的网络的明显意图,单个条目可能只是代表有人尝试了新的漏洞,但失败了,然后他们继续前进。

相关内容