冰蠍是一款基於Java開發的動態加密通信流量的新型Webshell客戶端。老牌Webshell管理神器——中國菜刀的攻擊流量特徵明顯,容易被各類安全設備檢測,實際場景中越來越少使用,加密 Webshell 正變得日趨流行。
由於通信流量被加密,傳統的 WAF、IDS 設備難以檢測,給威脅狩獵帶來較大挑戰。冰蠍其最大特點就是對交互流量進行對稱加密,且加密密鑰是由隨機數函數動態生成,因此該客戶端的流量幾乎無法檢測。
1、新版本新增功能:
冰蠍的通信過程可以分為兩個階段:密鑰協商和加密傳輸
第一階段-密鑰協商
1.攻擊者通過 GET 或者 POST 方法,形如 http://127.0.0.1/shell.aspx?pass=645的請求服務器密鑰;
2.服務器使用隨機數 MD5 的高16位作為密鑰,存儲到會話的 $_SESSION 變量中,並返回密鑰給攻擊者。
第二階段-加密傳輸
1)客戶端把待執行命令作為輸入,利用 AES 算法或 XOR 運算進行加密,並發送至服務端;
2)服務端接受密文後進行 AES 或 XOR 運算解密,執行相應的命令;
3)執行結果通過AES加密後返回給攻擊者。
流量特徵
Accept: application/json, text/javascript, */*; q=0.01

檢測思路
瀏覽器可接受任何文件,但最傾向application/json和 text/javascript
規則
file_data的作用和http_server_body差不多,都是使content匹配response body中的內容,唯一不同的是使用了file_data關鍵字的規則,其在file_data之後的content都會受到它的影響。file_data之後的content都必須在response body里匹配。。
2、Content-Type流量特徵
Content-type: Application/x-www-form-urlencoded
檢測思路
可以把這個字段作為一個弱特徵,輔助其他特徵來檢測
3、User-agent 字段流量特徵
冰蠍設置了10種User-Agent,每次連接shell時會隨機選擇一個進行使用。

檢測思路
在較短較簡單的content字段後加上fast_pattern關鍵字則會優先匹配這個content。避免浪費太長時間在匹配user-agent上。
snort編寫可以用content:「User-Agent」;content:「瀏覽器版本」。來匹配相應的十個瀏覽器。
4、端口流量特徵
冰蠍與webshell建立連接的同時,javaw也與目的主機建立tcp連接,每次連接使用本地端口在49700左右,每連接一次,每建立一次新的連接,端口就依次增加。
檢測思路
可以對符合該範圍內的端口告警。
5、PHP webshell 中存在固定代碼流量特徵
$post=Decrypt(file_get_contents("php://input"));
eval($post);
檢測思路
content字段中,將eval($post)作為流量特徵納入。
6、長連接流量特徵
冰蠍通訊默認使用長連接,避免了頻繁的握手造成的資源開銷。默認情況下,請求頭和響應頭裡會帶有 Connection。
Connection: Keep-Alive

可以作為輔助的流量特徵。
7、固定的請求頭和響應頭流量特徵
請求字節頭:
dFAXQV1LORcHRQtLRlwMAhwFTAg/M
響應字節頭:
TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd
解密報文:
得到報文內容:
將報文base64解密得到:
可以獲取到目錄信息
8、連接密碼流量特徵:
默認時,所有冰蠍4.0 webshell都有「e45e329feb5d925b」 一串密鑰。該密鑰為連接密碼32位md5值的前16位,默認連接密碼rebeyond
9、webshell特徵冰蠍連接時不用輸入密碼,根據對冰蠍的使用分析,冰蠍4.0可以在初始時自定義連接密碼。
要設置自定義密碼,需要在本地和遠程加解密函數中都保存$key。
這樣的話,如果對方更換密碼,初始字符串經過密鑰加密,那麼它的請求頭和響應頭都會發生變化,這就需要針對webshell中的$key動態改變解密函數才能得到解密後固定的請求頭和響應頭
另外,每次發起連接時都會發出兩次http請求,默認連接密鑰下,所有響應頭都相同,第二次請求頭比較特殊,初次之外,所有的請求頭都相同。
第一次請求解密
dFAXQV1LORcHRQtLRlwMAhwFTAg/M
@error_reporting(0);\r
第二次請求解密
OT8AQUBWFDoQUBRWQEELC1MdVRoJNGwDF1sHTVtaDEVZVAxdGh0RDQNBAU9X
error_reporting(0);\r
—【 THE END 】—
加個好友進技術交流群


歡迎在看丨留言丨分享至朋友圈三連
好文推薦
實戰殺豬盤滲透測試
