文章來源與合天智匯
概述:
首先了解一下什么是webshell客戶端,先問個問題,什么是客戶端,什么是服務端? 很簡單,提供服務的就是服務端,要求被服務的就是客戶端。那么回到我們的場景中,如果已經種了后門,用於連接后門的程序是要求被服務的,比如執行個ps,目的是為了得到后門所在主機的進程列表,是“被服務“的,所以稱之為客戶端。本文將在后續介紹一系列有關webshell客戶端的流量監測手法。
分析:
WebShell客戶端是一種用於服務器上WebShell后門與攻擊客戶端之間進行通信的程序,我們通常可以根據WebShell客戶端的流量來判斷服務器上是否存在WebShell后門。
如今國內外常用的WebShell客戶端有如下幾種:
-
中國菜刀(使用量最大,適用范圍最廣的WebShell客戶端);
-
蟻劍(一種常用的WebShell客戶端);
-
冰蠍(流量加密客戶端);
-
Cknife(C刀,使用Java語言編寫)
-
Weevely(kali中的中國菜刀).
接下來分別介紹其流量特征。
一、中國菜刀
中國菜刀自誕生以來已經歷了多個版本的更新,其功能、隱秘性也隨着更新得到很大提升.菜刀現在主流有三個版本在使用,分別為2011版、2014版、2016版,這三個版本中從2011版本到2014版本是功能性上進行了增強,從2014版本到2016版本是在隱秘性上進行了增強,2016版本的菜刀流量加入了混淆,使其鏈接流量更具有混淆性.
中國菜刀基本支持PHP、JSP、ASP這三種WebShell的連接,這三種語言所對應的流量各有差異,各個版本也有不用.下面將按照不同版本不同語言組合進行分析.其中2011版和2014版菜刀流量特征基本一致,所以放在一起分析.
中國菜刀2011版本及2014版本各語言WebShell鏈接流量特征
(1)PHP類webshell鏈接流量
body解碼如下:
其中特征點有如下三部分,
第一:“eval”,eval函數用於執行傳遞的攻擊payload,這是必不可少的;
第二:(base64_decode($_POST[z0])),(base64_decode($_POST[z0]))將攻擊payload進行Base64解碼,因為菜刀默認是將攻擊載荷使用Base64編碼,以避免被檢測;
第三:&z0=QGluaV9zZXQ...,該部分是傳遞攻擊payload,此參數z0對應$_POST[z0]接收到的數據,該參數值是使用Base64編碼的,所以可以利用base64解碼可以看到攻擊明文.
注:
1.有少數時候eval方法會被assert方法替代.
2.$_POST也會被$_GET、$_REQUEST替代.
3.z0是菜刀默認的參數,這個地方也有可能被修改為其他參數名.
(2)JSP類webshell鏈接流量
該流量是WebShell鏈接流量的第一段鏈接流量,其中特征主要在i=A&z0=GB2312,菜刀鏈接JSP木馬時,第一個參數定義操作,其中參數值為A-Q,如i=A,第二個參數指定編碼,其參數值為編碼,如z0=GB2312,有時候z0后面還會接着又z1=參數用來加入攻擊載荷.
注:其中參數名i、z0、z1這種參數名是會變的,但是其參數值以及這種形式是不會變得,最主要就是第一個參數值在A-Q,這種是不變的.
(3)ASP類webshell鏈接流量
body解碼
其中特征點有如下三部分,
第一:“Execute”,Execute函數用於執行傳遞的攻擊payload,這是必不可少的,這個等同於php類中eval函數;
第二:OnError ResumeNext,這部分是大部分ASP客戶端中必有的流量,能保證不管前面出任何錯,繼續執行以下代碼.
第三:Response.Write和Response.End是必有的,是來完善整個操作的.
這種流量主要識別這幾部分特征,在正常流量中基本沒有.
注:OnError Resume Next這個特征在大部分流量中存在,極少數情況沒有.
中國菜刀2016版本各語言WebShell鏈接流量特征
二、中國蟻劍(AntSword)
蟻劍的很多代碼源於中國菜刀,所以他的鏈接流量與中國菜刀很相似,但是蟻劍可以擴充性很好,可以對進行加密、混淆等繞過處理.蟻劍默認支持ASP以及PHP的webshell鏈接.
(1)PHP類webshell鏈接流量
bodyURL解碼后:
其中流量最中明顯的特征為@ini_set("display_errors","0");這段代碼基本是所有WebShell客戶端鏈接PHP類WebShell都有的一種代碼,但是有的客戶端會將這段編碼或者加密,而蟻劍是明文,所以 較好發現.
(2)ASP類webshell鏈接流量
bodyURL解碼
我們可以看出蟻劍針對ASP類的WebShell流量與菜刀的流量很像,其中特征也是相同,如OnError ResumeNext、Response.End、Response.Write,其中execute在蟻劍中被打斷混淆了,變成了拼接 形式Ex"&cHr(101)&"cute,同時該流量中也使用了eval參數,可以被認為明顯特征.
蟻劍繞過特征流量
由於蟻劍中包含了很多加密、繞過插件,所以導致很多流量被加密后無法識別,但是蟻劍混淆加密后還有一個比較明顯的特征,即為參數名大多以“_0x......=”這種形式(下划線可替換為其他)
所以默認以_0x開頭的參數名,后面為加密數據的數據包也可識別為蟻劍的流量特征。
三、Weekly
Weevely是kail中自帶的一款功能強大的WebShell客戶端,該鏈接器首先自己生成webshell,在將該webshell上傳至目的服務器后,通過Weevely進行鏈接,該鏈接流量屬於加密流量,但是在該流量中 還可以發現特征,進行區分.
該流量中的攻擊載荷存在於Referer中,其中Referer中的路徑中php的查詢參數有以下參數名或值,即sa=、source=web、cd=數字、url=、ei=,即可確定該流量為客戶端流量。