實戰 | 記一次小程序cms安全事件應急響應
1、安全事件發生
2021年11月16日,上級發來不良檢測記錄,內容包含為某站點存在涉DuBo違規內容,該站點為基于ThinkPHP 5.0.10框架的小程序管理系統,下面以xcx.test.cn作為代替

經過對比原始版本的源碼,以及命令ls -alh確認,index.php于11月15日23:16分出現文件修改,確認該web服務器遭到非法攻擊。

后果:修改內容為在head內添加了meta標簽和修改了title標簽,標簽內容為非法內容,搜索引擎的爬蟲在爬取該站點時會爬取meta標簽的內容,那么用戶在百度搜索關鍵詞時,會檢索出不良內容。

2、安全事件溯源
2.1 暫停服務
首先進入寶塔關閉Apache與MySQL服務,其他途徑告知用戶系統正在維護

2.2 保存現場環境
進入到寶塔的網站管理界面,點擊被入侵站點,點擊備份站點(數據庫同理備份)。
因為備份文件過大,則把全部備份通過寶塔的“騰訊云COSFS 2.0”插件,轉儲到cos里,在通過訪問cos下載備份文件。


2.3 提取WEB日志
ssh連接進入服務器,提取寶塔的web日志,路徑/www/wwwlogs/xcx.test.cn/ ,提取xcx.test.cn-access_log與xcx.test.cn-error_log到本地

2.4 find命令檢索被文件修改
使用find . -mtime -300 -name “*.php”檢索/www/wwwroot/xcx.test.cn/網站目錄下被修改過的PHP文件,以快速確認webshell落地路徑

從圖中可以發現,在十一月份分別不同天數,有三個文件被添加或修改過,對比原始源碼發現,除了index.php原本不存在圖中另外兩個文件。
2.5 分析webshell文件1
路徑:/public/plugin/PHPExcel/PHPExcel/CalcEngine/index.php

分析該文件,總共分為兩個部分
s函數:對$dapeng的字符串進行rot13解碼
m函數與get1_str函數:該函數作用是eval執行PHP代碼,通過組合變量$dp和$dapeng1成新的系統函數,把rot13解碼的字符串,從十六進制轉換為字符串文本(既為PHP代碼)。
PS:該圖為十六進制轉碼后的PHP代碼

從圖中可以得知,這里的變量file_path是上一層的index.php的$file_path,此處先備份網站首頁index.php另存為index.bk.html,并把index.php的權限修改為0666,既所有用戶可讀可寫權限,猜測此處目的防止因為權限原因無法修改首頁。
2.6 分析webshell文件2
路徑./public/webuploader/server/preview/dd887179e09b2326595305d8dd475763.php

分析該文件,可以得知是一個PHP遠程文件包含+eval執行
Ps:該文件在后面日志分析得出,該文件為黑客第一個上傳的木馬。
從該路徑/public/webuploader/server/preview/可猜測,黑客應該是使用webuploader下的fileupload.php或fileupload2.php或presiew.php里其中的一個php文件的上傳漏洞,把webshell上傳到服務器

2.7 分析access日志之攻擊手法
從access日志來看,該web站點一直由來自不同地區,不同國家的IP地址用web漏洞掃描器一直進行掃描


由于剛剛提到webshell文件2的路徑在webuploader/server下,而該文件夾下恰好有三個相關的上傳文件,我們分別在access_log中搜尋fileupload.php或fileupload2.php或presiew.php
結果均為無結果:



我們猜測,黑客在使用presiew.php的原文件名應該為preview.php,通過對比1月份的備份包與本月的備份包,其中得出1月份的preview.php與presiew.php的文件內容完全一致,可以確認是被黑客修改了名稱,preview.php內是有關文件上傳的PHP代碼。

那么回到vscode繼續檢索preview.php得到結果

結果還是比較多,在精確搜索一下,只顯示有200回響的

成功篩選出4條記錄,分別是




其中第1與第2條IP地址均為浙江省金華市婺城區 電信

第3條與第4條IP地址均為深圳市騰訊云

然后對比user-agent,第1、2條為

第3、4條為

請注意上述兩條USER-AGENT都是非常舊的系統和瀏覽器版本,理應不符合該系統的對象用戶,可初步判別均為異常流量。
通過相同UA頭檢索,發現UA為”Mac OS X 10_15_7”的主機,正在不斷的從2021年6月21號到2021年11月16日,一直使用爬蟲/web掃描工具進行掃描測試。

可以看出圖中的相關日志,該UA都在同一天訪問有關sql數據庫的管理頁,通過檢索可知,有關“Mac OS X 10”的UA有6838條,可以判斷是爬蟲工具。
繼續檢索UA頭為”Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/2X.0”的相關行日志共兩條,請注意下面兩條日志的時間與webshell木馬的dd887179e09b2326595305d8dd475763.php時間。



從上圖中可以看出,第二條日志的時間與webshell的修改時間完全重合,且同時說明在11月1日該站點已經被滲透,
跟隨這個UA繼續檢索日志,又發現訪問了另外一個木馬CalcEngine/index.php

故判斷UA為“Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/2X.0”就是黑客攻擊我企站點的UA。
在這一些不同行的日志里,除了IP歸屬地為浙江省金華市婺城區 電信外,其他的IP歸屬地均為國外,所以金華市的這個IP很有可能是黑客的真實IP地址。
總結:黑客使用preview.php分時段上傳了木馬dd475763.php與CalcEngine/index.php,然后在11月15日23點16分通過dd475763.php修改了public/index.php
2.8 分析access日志之留種后門分析
根據來源地址為dd88719e.php,查找
referer:https://xcx.test.cn/webuploader/server/preview/dd887179e09b2326595305d8dd475763.php
查找出以下幾個后門

(1)111.php

(2)banner3.php(經典大馬)


(3)picture3_6.php(此處與preview.php文件內容一致)


(4)config.php(WebShell)


通過$_REQUEST[admin]傳參到eval函數,實現命令執行。

使用D_SAFE補充驗證

2.9 分析preview.php

1)首先該文件的首行應該是if判斷session是否為管理員,但在該文件內并沒有寫校驗,故存在越權漏洞。只要知道路徑,任何人都可使用該php來上傳文件。
2)存在上傳文件后綴無限制

從圖中可以看出,通過正則表達式,變量$base64是文件內容,變量$type是文件后綴,從紅色框住的if語句里,完全沒有任何的過濾,
故payload為data:image/php;base64,PD9waHAgcGhwaW5mbygpOz8+
3)不校驗上傳文件內容

從截圖得知,上傳后的文件名是文件內容的md5值,而代碼中也不做文件內容檢查,即可直接寫<?php phpinfo();?>
2.10 preview.php攻擊手法復現



復現完成
三、修復建議
1.過濾presiew.php文件內上傳的文件后綴名傳參,并加入session校驗。2.對webuploader/下所有文件進行審計后發現,fileupload.php和fileupload2.php都有文件上傳漏洞,故建議對上傳文件進行過濾3.對上傳目錄./preview/和./upload/禁止執行php。4.禁止非大陸地區的IP地址訪問。