一、關於冰蠍
1.1 簡單介紹
冰蠍是一款基於Java開發的動態加密通訊流量的新型Webshell客戶端。老牌 Webshell 管理神器——中國菜刀的攻擊流量特徵明顯,容易被各類安全裝置檢測,實際場景中越來越少使用,加密 Webshell 正變得日趨流行。
由於通訊流量被加密,傳統的 WAF、IDS 裝置難以檢測,給威脅狩獵帶來較大挑戰。冰蠍其最大特點就是對互動流量進行對稱加密,且加密祕鑰是由隨機數函式動態生成,因此該客戶端的流量幾乎無法檢測。
1.2 關於冰蠍通訊
冰蠍通訊大致分為兩個階段
第一階段:
Attacker通過GET方法或者POST方法形如下圖這樣請求伺服器金鑰
伺服器使用隨機數MD5的高16位作為金鑰,儲存到會話的SESSIONID中,並返回金鑰給attacker。金鑰可通過wireshark抓包看到,見下圖。
第二階段:
1.客戶端把待執行命令作為輸入,利用AES演算法或XOR運算進行加密,併傳送至服務端;
2.服務端接受密文後進行AES解密或者XOR運算解密,執行解密後的命令
3.執行結果通過AES加密後返回給attacker
關於上述內容和抓包詳情和可繞過欄位的具體詳情可看下面連結大佬寫的文章,本人在此就不CV了
https://cloud.tencent.com/developer/article/1621021
1.3 解密思路
在伺服器開啟 PHP OpenSSL 擴充套件指令碼的情況下,冰蠍密文采用對稱加密演算法AES加密,加密後還會進行 base64 編碼。在客戶端發起金鑰協商後,會返回16位明文隨機金鑰。在安全監控裝置採集流量較全的情況下,可截獲密文流量和金鑰,通過解密解碼平臺即可獲取冰蠍密文詳情。
大體也是根據shell.php程式碼審計得出來的,關於冰蠍簡單的協商加密部分程式碼審計可以看下面的連結
https://www.freesion.com/article/2118538292/
二、冰蠍解密詳細步驟
這次主要還是奔著解密資料包內容去的,之前有一次搞了好久沒搞出來就擱置了,這次正好又看到了兩個大佬的文章就抓回來重新搞一次,詳細的解密還原報文步驟如下
2.1 環境
物理機 作為attacker使用冰蠍連線shell.php
Win2003 server 作為 attacked 在DVWA-master目錄下提前放置了shell.php
2.2 總體步驟
開啟wireshark 監聽虛擬網路卡(我用的NAT模式也就是VM8)
首先attacker連線了http://192.168.124.139:81/DVWA-master/shell.php
並隨意執行兩個命令
開啟wireshark頁面停止監聽 在頭部就可以看到4個http的包 追蹤流檢視
因為冰蠍是動態二進位制協商加密 資料包可看作被進行了2次加密
第一層加密為AES128加密
AES解密時需要一個16位的key,而冰蠍的指令碼會進行與attacked協商一個key儲存在SESSIONID中,如下圖這個16位的資料就是解密所需的key
接下來需要一個線上解密AES的網站。(一開始我用的是CaptfEncoder這個工具,但是在AES解密時總是報錯不知道為什麼,通過查閱網上大佬的資料get了這個站)
http://tools.bugscaner.com/cryptoaes/
PS:本人之前也找過很多的站包括CaptfEncoder這個工具,只有用上面這個站解密成功了。(不知道是本人操作問題還是臉黑 Orz)
請求密文就是類似於下圖的紅字部分
進行解密:
將解密之後base64_decode()中的內容丟去base64解密就好了,可以網上找個線上的站。我用的是CaptfEncoder
這時就可以看到冰蠍加密前的內容是什麼了
同樣響應內容也可以進行解密:
將響應密文丟到剛才AES解密的站,還是原先的16位key
{"status":"c3VjY2Vzcw==","msg":"DQ0KV2luZG93cyBJUCBDb25maWd1cmF0aW9uDQ0KDQ0KDQ0KRXRoZXJuZXQgYWRhcHRlciDmnKzlnLDov57mjqUgMjoNDQoNDQogICBDb25uZWN0aW9uLXNwZWNpZmljIEROUyBTdWZmaXggIC4gOiBsb2NhbGRvbWFpbg0NCiAgIElQIEFkZHJlc3MuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiA6IDE5Mi4xNjguMTI0LjEzOQ0NCiAgIFN1Ym5ldCBNYXNrIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiA6IDI1NS4yNTUuMjU1LjANDQogICBEZWZhdWx0IEdhdGV3YXkgLiAuIC4gLiAuIC4gLiAuIC4gOiAxOTIuMTY4LjEyNC4yDQ0KDQ0KRXRoZXJuZXQgYWRhcHRlciDmnKzlnLDov57mjqU6DQ0KDQ0KICAgQ29ubmVjdGlvbi1zcGVjaWZpYyBETlMgU3VmZml4ICAuIDogREhDUCBIT1NUDQ0KICAgSVAgQWRkcmVzcy4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDogMTkyLjE2OC4wLjEwNQ0NCiAgIFN1Ym5ldCBNYXNrIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiA6IDI1NS4yNTUuMjU1LjANDQogICBEZWZhdWx0IEdhdGV3YXkgLiAuIC4gLiAuIC4gLiAuIC4gOiAxOTIuMTY4LjAuMQ0NCg=="}
上面經過AES解密後的紅體字還需要丟到base64解密一下
成功獲得響應報文