一、關於冰蠍
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解碼一下
成功獲得響應報文