冰蠍是一款基於Java開發的動態加密通訊流量的新型Webshell客戶端。老牌 Webshell 管理神器——中國菜刀的攻擊流量特徵明顯,容易被各種安全設備檢測,實際場景中愈來愈少使用,加密 Webshell 正變得日趨流行。php
因爲通訊流量被加密,傳統的 WAF、IDS 設備難以檢測,給威脅狩獵帶來較大挑戰。冰蠍其最大特色就是對交互流量進行對稱加密,且加密祕鑰是由隨機數函數動態生成,所以該客戶端的流量幾乎沒法檢測。 算法
冰蠍通訊大體分爲兩個階段shell
第一階段:安全
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
在服務器開啓 PHP OpenSSL 擴展腳本的狀況下,冰蠍密文采用對稱加密算法AES加密,加密後還會進行 base64 編碼。在客戶端發起密鑰協商後,會返回16位明文隨機密鑰。在安全監控設備採集流量較全的狀況下,可截獲密文流量和密鑰,經過解密解碼平臺便可獲取冰蠍密文詳情。
大致也是根據shell.php代碼審計得出來的,關於冰蠍簡單的協商加密部分代碼審計能夠看下面的連接
https://www.freesion.com/article/2118538292/
此次主要仍是奔着解密數據包內容去的,以前有一次搞了很久沒搞出來就擱置了,此次正好又看到了兩個大佬的文章就抓回來從新搞一次,詳細的解密還原報文步驟以下
物理機 做爲attacker使用冰蠍鏈接shell.php
Win2003 server 做爲 attacked 在DVWA-master目錄下提早放置了shell.php
打開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解密一下
成功得到響應報文