菜刀冰蝎蟻劍哥斯拉等webshell工具及特征分析
前言
在工作中經常會遇到各種websehll,黑客通常要通過各種方式獲取 webshell,從而獲得企業網站的控制權,識別出webshell文件或通信流量可以有效地阻止黑客進一步的攻擊行為,下面以常見的四款webshell進行分析,對工具連接流量有個基本認識。
Webshell簡介
webshell就是以asp、php、jsp或者cgi等網頁文件形式存在的一種代碼執行環境,主要用于網站管理、服務器管理、權限管理等操作。使用方法簡單,只需上傳一個代碼文件,通過網址訪問,便可進行很多日常操作,極大地方便了使用者對網站和服務器的管理。正因如此,也有小部分人將代碼修改后當作后門程序使用,以達到控制網站服務器的目的,也可以將其稱做為一種網頁后門
最普通的一句話木馬:
@eval($_POST['shell']);?> system($_REQUEST['cmd']);>

中國菜刀
中國菜刀(Chopper)是一款經典的網站管理工具,具有文件管理、數據庫管理、虛擬終端等功能。
它的流量特征十分明顯,現如今的安全設備基本上都可以識別到菜刀的流量。現在的菜刀基本都是在安全教學中使用。
github項目地址:https://github.com/raddyfiy/caidao-official-version
由于菜刀官方網站已關閉,現存的可能存在后門最好在虛擬機運行,上面項目已經進行了md5對比沒有問題。

菜刀webshell的靜態特征
菜刀使用的webshell為一句話木馬,特征十分明顯
常見一句話(Eval):
PHP, ASP, ASP.NET 的網站都可以:
PHP:
ASP: <%eval request("caidao")%>
ASP.NET: <%@ Page Language="Jscript"%><%eval(Request.Item["caidao"],"unsafe");%>
菜刀webshell的動態特征
請求包中:
ua頭為百度爬蟲
請求體中存在eavl,base64等特征字符
請求體中傳遞的payload為base64編碼,并且存在固定的QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7J
請求體中執行結果響應為明文,格式為X@Y 結果 X@Y之中


蟻劍
AntSword(蟻劍)是一個開放源代碼,跨平臺的網站管理工具,旨在滿足滲透測試人員以及具有權限和/或授權的安全研究人員以及網站管理員的需求。
github項目地址:https://github.com/AntSwordProject/antSword

蟻劍webshell靜態特征
https://github.com/AntSwordProject/AwesomeScript蟻劍官方為我們提供了制作好的后門,官方的腳本均做了不同程度“變異”,蟻劍的核心代碼是由菜刀修改而來的,所有普通的一句話木馬也可以使用。
Php中使用assert,eval執行, asp 使用eval ,在jsp使用的是Java類加載(ClassLoader),同時會帶有base64編碼解碼等字符特征

蟻劍webshell動態特征
默認編碼連接時
這里我們直接使用菜刀的一句話webshell
每個請求體都存在@ini_set(“display_errors”, “0”);@set_time_limit(0)開頭。并且存在base64等字符
響應包的結果返回格式為 隨機數 結果 隨機數

使用base64編碼器和解碼器時

蟻劍會隨機生成一個參數傳入base64編碼后的代碼,密碼參數的值是通過POST獲取隨機參數的值然后進行base64解碼后使用eval執行
響應包的結果返回格式為 隨機數 編碼后的結果 隨機數


冰蝎
冰蝎是一款動態二進制加密網站管理客戶端。
github地址:https://github.com/rebeyond/Behinder

冰蝎文件夾中,server 文件中存放了各種類型的木馬文件

冰蝎webshell木馬靜態特征
這里主要分析3.0版本的
采用采用預共享密鑰,密鑰格式為md5(“admin”)[0:16], 所以在各種語言的webshell中都會存在16位數的連接密碼,默認變量為k。
在PHP中會判斷是否開啟openssl采用不同的加密算法,在代碼中同樣會存在eval或assert等字符特征

在aps中會在for循環進行一段異或處理

在jsp中則利用java的反射,所以會存在ClassLoader,getClass().getClassLoader()等字符特征

冰蝎2.0 webshell木馬動態特征
在了解冰蝎3.0之前,先看看2.0是怎么交互等
2.0中采用協商密鑰機制。第一階段請求中返回包狀態碼為200,返回內容必定是16位的密鑰
Accept: text/html, image/gif, image/jpeg, ; q=.2, /*; q=.2

建立連接后 所有請求 Cookie的格式都為: Cookie: PHPSESSID=; path=/;

冰蝎3.0 webshell木馬動態特征
在3.0中改了,去除了動態密鑰協商機制,采用預共享密鑰,全程無明文交互,密鑰格式為md5(“admin”)[0:16],但還是會存在一些特征
在使用命令執行功能時,請求包中content-length 為5740或5720(可能會根據Java版本而改變)
每一個請求頭中存在Pragma: no-cache,Cache-Control: no-cache
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

哥斯拉
哥斯拉繼菜刀、蟻劍、冰蝎之后具有更多優點的Webshell管理工具
github地址:https://github.com/BeichenDream/Godzilla

哥斯拉的webshell需要動態生成,可以根據需求選擇各種不同的加密方式

哥斯拉webshell木馬靜態特征
選擇默認腳本編碼生成的情況下,jsp會出現xc,pass字符和Java反射(ClassLoader,getClass().getClassLoader()),base64加解碼等特征

php,asp則為普通的一句話木馬

哥斯拉webshell動態特征
所有請求中Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
所有響應中Cache-Control: no-store, no-cache, must-revalidate,
以上兩個只能作為弱特征參考
同時在所有請求中Cookie中后面都存在;特征

不足
本文中只是分析了在php環境中的,并沒有搭建其他語言環境進行分析,在之后會對各個語言的動態特征進行分析,同時嘗試更多的混淆方式。