作為老牌 Webshell 管理神器,中國菜刀的攻擊流量特徵明顯,容易被各類安全裝置檢測,實際場景中越來越少使用,加密 Webshell 正變得日趨流行。
最開始使用明文傳輸,後來採用base64加密
通常為百度,火狐
請求體中存在eavl,base64等特徵字元
請求體中傳遞的payload為base64編碼,並且存在固定的數值,z0=
QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7J
中國蟻劍是一款開源的跨平臺網站管理工具,它主要面向於合法授權的滲透測試安全人員以及進行常規操作的網站管理員。
將蟻劍的正文內容進行URL解碼後,流量最中明顯的特徵為@ini_set("display_errors","0");這段程式碼基本是所有WebShell使用者端連結PHP類WebShell都有的一種程式碼,同時蟻劍也有eval這種明顯的特徵。
蟻劍中包含了很多加密、繞過外掛,所以導致很多流量被加密後無法識別,但是蟻劍混淆加密後還有一個比較明顯的特徵,引數名大多以「_0x.....=」這種形式(下劃線可替換為其他)所以,以_0x開頭的引數名,後面為加密資料的封包也可識別為蟻劍的流量特徵。
解碼後的封包ini_set
冰蠍是一款基於Java開發的動態加密通訊流量的新型Webshell使用者端
冰蠍的通訊過程可以分為兩個階段:
一、金鑰協商
1)通過 GET 或者 POST 方法請求伺服器金鑰;
2)伺服器使用亂數 MD5 的高16位元作為金鑰,儲存到對談的 $_SESSION 變數中,並返回金鑰
二、加密傳輸
1)使用者端把待執行命令作為輸入,利用AES或 XOR 運算進行加密,並行送至伺服器端;
2)伺服器端接受密文後進行 AES 或 XOR 運算解密,執行相應的命令;
3)執行結果通過AES加密後返回給攻擊者。
冰蠍2預設Accept欄位的值很特殊,而且每個階段都一樣
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
冰蠍內建了十餘種 UserAgent ,每次連線 shell 會隨機選擇一個進行使用。但都是比較老的,容易被檢測到,但是可以在burp中修改ua頭。
Content-Length: 16, 16就是冰蠍2連線的特徵
相比較冰蠍2,冰蠍3取消動態金鑰獲取,目前很多waf等裝置都做了冰蠍2的流量特徵分析,所以3取消了動態金鑰獲取;只有在無動態金鑰互動失敗後,才會進入常規的金鑰互動階段。
<?php@error_reporting(0);session_start();$key="e45e329feb5d925b"; //該金鑰為連線密碼32位元md5值的前16位元,預設連線密碼rebeyond$_SESSION['k']=$key;
從金鑰的生成可以看出,使用密碼的md5結果的前16位元。
在冰蠍3.0 的伺服器端,是通過如下程式碼讀取post請求
request.getReader().readLine()
程式碼的意思是,直接讀取post請求中body的內容。所以請求的http中,content-type一定為application/octet-stream
冰蠍3.0 每次請求都會在16個預設的UA頭中隨機選擇一個作為user-Agent,當然,普通使用者很容易就可以修改
在冰蠍中,任何請求,最終都會呼叫Utils.getData
函數,對請求的引數加密。對於上傳檔案,命令執行來講,加密的引數不定長。但是對於金鑰互動,獲取基本資訊來講,payload都為定長,且無隨機padding。
通訊過程中會攜帶以下Accept欄位,在進行資料通訊中會攜帶Accept欄位
Accept: application/json, text/javascript, /; q=0.01
PHP站點:Application/x-www-form-urlencoded
ASP站點:Application/octet-stream
冰蠍4.0設定了10種User-Agent,每次連線shell時會隨機選擇一個進行使用
通訊預設使用長連線,避免了頻繁的握手造成的資源開銷。預設情況下,請求頭和響應頭裡會帶有 Connection。
Connection: Keep-Alive
預設時,所有冰蠍4.* webshell都有「e45e329feb5d925b」 一串金鑰。該金鑰為連線密碼32位元md5值的前16位元,預設連線密碼rebeyond
哥斯拉是一款繼冰蠍之後又一款於Java開發的加密通訊流量的新型Webshell使用者端,內建了3種有效載荷以及6種加密器,6種支援指令碼字尾,20個內建外掛,也是目前在HVV中使用較多的一款工具。
最後一個Cookie的值出現;(結尾處通常會出現分號)
哥斯拉使用者端使用JAVA語言編寫,在預設的情況下,如果不修改User-Agent,User-Agent會類似於Java/1.8.0_121(具體什麼版本取決於JDK環境版本)。但是哥斯拉支援自定義HTTP頭部,這個預設特徵是可以很容易去除的。
Accept為text/html, image/gif, image/jpeg, *; q=.2, /; q=.2
冰蠍也出現過同樣的Accept,這個是JDK引入的一個特徵,並不是作者自定義的Accept,同樣的這個預設特徵也可以通過自定義頭部去除
如果請求體採用base64編碼,響應體返回的也是base64編碼的資料。在使用base64編碼時,響應體會出現一個很明顯的固定特徵。這個特徵是使用者端和伺服器端編寫的時候引入的。他會把一個32位元的md5字串按照一半拆分,分別放在base64編碼的資料的前後兩部分。整個響應包的結構體徵為:md5前十六位+base64+md5後十六位。從響應封包可以明顯看到這個特徵
需要注意的是md5需要同時匹配字母大小寫兩種情況,因為在JAVA版webshell響應中為大寫字母,在PHP版中為小寫字母。