1、蟻劍
1.1、蟻劍webshell靜態特征
- 蟻劍中php使用assert、eval執行;
- asp只有eval執行;
- 在jsp使用的是Java類加載(ClassLoader),同時會帶有base64編碼解碼等字符特征。
1.2、蟻劍webshell動態特征
查看流量分析會發現請求體存在以@ini_set("display_errors","0");@set_time_limit(0)開頭。
并且響應體的返回結果是base64編碼發混淆字符,格式為:隨機數 結果 隨機數
2、冰蝎
2.1、冰蝎2.0
使用AES加密+base64編碼,AES使用動態密鑰對通信進行加密,進行請求時內置了十幾個U-A頭,每次請求時會隨機選擇其中一個。因此當發現一個IP的請求頭中的u-a頭在不斷的發生變化,就有可能是冰蝎。
2.2、冰蝎3.0
使用AES加密+base64編碼,取消了2.0的動態獲取密鑰,使用固定的連接密鑰,AES加密的密鑰為webshell連接密碼的MD5的前16位,默認連接密碼是“rebeyond”。
進行請求時內置了十幾個User-Agent頭,每次請求時會隨機選擇其中的一個。因此當發現一個ip的請求頭中的u-a在頻繁變換,就可能是冰蝎。
3.0連接jsp的webshell的請求數據包中的content-type字段常見為application/octet-stream。
2.3、冰蝎4.0
- 提供了傳輸協議自定義的功能,讓用戶對流量的加密和解密進行自定義,實現流量加解密協議的去中心化。v4.0版本不再有連接密碼的概念,自定義傳輸協議算法就是連接密碼。
- accept字段(弱特征),通常是Accept:application/json,text/javascript,/;q=0.01 意思是瀏覽器可接受任何文件,但是傾向application/json和text/javascript。
- Content-Type字段(弱特征),通常是Content-Type:Application/x-www-form-urlencoded
- 與冰蝎的前述版本相似,進行請求時內置了十幾個User-Agent頭,每次請求時會隨機選擇其中的一個。
- 連接的端口有一定的特征,冰蝎與webshell建立連接的同時,java也與目的主機建立tcp連接,每次連接使用本地端口再49700左右(比較大的端口),每連接一次/每建立一次新的連接,端口就增加一次。
- 使用長連接,避免了頻繁的握手鏈接造成的資源開銷。默認情況下,請求頭和響應頭里都會包含Connection:Keep-Alive
- 有固定的請求頭和響應頭,請求字節頭:dFAXQV1LORcHRQtLRlwMAhwFTAg/M,響應字節頭:TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd
- 默認時,冰蝎 webshell都有“e45e329feb5d925b” 一串密鑰,與冰蝎3.0相同。
payload分析:
php在代碼中會存在eval或assert等字符特征
在asp中會在for循環進行一段異或處理
jsp利用java的反射,所以會存在getMethod(),getClass().getClassLoader()等字符特征
所有請求中Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
所有響應中Cache-Control: no-store, no-cache, must-revalidate,
3、哥斯拉
哥斯拉支持多種加密方式,采用了和冰蝎 2.0 類似的密鑰交換方式。它的webshell需要動態生成,可以根據需求選擇不同的加密方式。
3.1、靜態特征
- jsp會出現xc,pass字符和Java反射(ClassLoader,getClass().getClassLoader()),base64加解碼等特征 ;
- php,asp則為普通的一句話木馬
3.2、動態特征
- U-A字段(弱特征),如果采用默認的情況,會暴露使用的jdk信息。哥斯拉支持自定義HTTP頭部,這個默認特征是很容易去除的。
- Accept字段(弱特征),默認是
Accept:text/html, image/gif, image/jpeg, *; q=.2, /; q=.2。
同上,這個也可修改,只能作為輔助檢測的特征。 Cookie中有一個非常關鍵的特征,最后會有個分號
。估計后續的版本會修復。- 響應體的數據有一定特征,哥斯拉會把一個32位的md5字符串按照一半拆分,分別放在base64編碼的數據的前后兩部分。整個響應包的結構體征為:md5前十六位+base64+md5后十六位。
4. 菜刀流量特征
4.1 菜刀靜態特征
菜刀使用一句話木馬,特征十分明顯,在PHP、ASP、ASP.NET的網站都可以:
PHP: <?php @eval([$_post['cmd']]); ?>
ASP: <% eval request("cmd")%>
ASP.NET: <%@ Page Language="Javascript"%><% eval(Request.Item["cmd"],"unsafe");%>
4.2 菜刀動態特征
payload在請求體中,采用url編碼+base64編碼,payload部分是明文傳輸。
payload中有eval或assert、base64_decode這樣的字符。
payload中有默認固定的&z0=QGluaV9zZXQ...這樣base64加密的攻擊載荷,參數z0對應$_POST[z0]接收到的數據,且固定為QGluaV9zZXQ開頭。進行base64解碼后可看到代碼:@ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0);這段意思是首先關閉報錯和magic_quotes,接下來去獲取主機的信息。
參考鏈接:
https://blog.csdn.net/qq_53577336/article/details/125048353
https://www.cnblogs.com/-andrea/p/17473499.html