• 盛邦安全
    技術(shù)博客

    讓網(wǎng)絡(luò)空間更有序

    當(dāng)前位置: 首頁 > 關(guān)于我們 > 公司動態(tài) > 技術(shù)博客
    兵臨城下丨Webshell管理工具流量檢測研究

    发布日期:2022/03/09

    引言

     

    俗話說得好,80后用菜刀,90后用蟻劍,95后用冰蝎和哥斯拉。本文主要是對這四個主流的并具有跨時代意義的Webshell管理工具進行流量分析和檢測。

     

    注:本文均以phpshell連接為例進行研究分析,畢竟“php是世界上最好的語言”

     

    ① 中國菜刀(chopper)

     

    中國菜刀是一款專業(yè)的網(wǎng)站管理軟件,用途廣泛,使用方便,小巧實用。只要支持動態(tài)腳本的網(wǎng)站,都可以用中國菜刀來進行管理。主流有2011版本,2014版本和2016版本。


    2011和2014版本:


    1.png

    2.png

     

    特征:

    a(密碼)參數(shù):值為執(zhí)行的函數(shù)加上對pyload的base64解

    Z0參數(shù):base64加密的payload,

    Z1參數(shù):shell存在的位置

    識別:

    (1)執(zhí)行函數(shù):@eval,@assert 等;

    (2)base64_decode($_POST[Z0]),$_GET,$_REQUEST

    (3)截取參數(shù)z0,進行base64_decode后 ,

    @ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0)等

     

    2016版本:


    3.png

    較于早版本做了一些混淆

    識別"ass"."ert" "ev"."Al  "Ba"."SE6"."4_dEc"."OdE

     

    ② 蟻劍4.0.3

     

    中國蟻劍是一款開源的跨平臺網(wǎng)站管理工具,它主要面向于合法授權(quán)的滲透測試安全人員以及進行常規(guī)操作的網(wǎng)站管理員。是一款非常優(yōu)秀的webshell管理工具。開發(fā)版本針對有一定編程基礎(chǔ)的開發(fā)者,你可以根據(jù)閱讀文檔或者分析源碼了解熟悉整個應(yīng)用的執(zhí)行流程,然后便可隨意對代碼進行修改增強個性化自定義,真正打造出屬于自己的一把寶劍!

     

    PHP WEBSHELL基本操作連接所發(fā)的包如下:

     

     

    4.png



    傳輸?shù)膬?nèi)容為:

     

    5.png

     

    主要獲取了服務(wù)端當(dāng)前目錄、根目錄、系統(tǒng)和當(dāng)前用戶名等信息,輸入到緩沖區(qū)再由$output變量接收,通過隨機字符作為開始結(jié)束符定位變量輸出位置。

    默認使用的情況下data僅進行url編碼,特征很明顯,data中含有@ini_set("display_errors", "0");@set_time_limit(0);  header中含有antSword字眼,由于蟻劍的源碼是和菜刀的一樣,所以在默認情況下特征十分明顯。但是蟻劍的個性化十分的明顯,可以對其進行改造。

    PHP WEBSHELL基本操作連接所發(fā)的包如下:

     

    2.1 自帶的編碼器和解碼器

    自帶的編碼器和解碼器,編碼器的作用是傳輸?shù)臅r候加密,解碼器的作用是使返回的包帶的值也是加密的

    6.png

    7.png



    自帶編碼器發(fā)出的包:格式為:pwd=編碼方式['xxx']&xxx=內(nèi)容

     

    8.png

    9.png

     

    至此我們可以分析常規(guī)攔截:

     

    (1)檢測流量包中的編碼方式

    (2)檢測必須傳輸?shù)膬?nèi)容,比如:@ini_set等字眼,不僅是明文,這些字眼的各種編碼形式也可以攔。編碼識別:只要原始數(shù)據(jù)不變,編碼都是固定的映射,例如只檢查ini_set("display_errors", "0") ,aW5pX3NldCgiZGlzcGxheV9lcnJvcnMiLCAiMCIp(base64) ,vav_frg("qvfcynl_reebef", "0") (rot13) …

     

    10.png

     

    (3)蟻劍自帶的header

     

    針對以上明顯特征,蟻劍有自定義編碼器,自定義header,自定義分隔符……修改明顯特征以繞過檢測

     

    2.2 自定義header

     

    建議直接在文件modules/request.js中修改相應(yīng)的參數(shù)值,將其修改成常用的useragent,項目路徑下的.modules/update.js也需要修改。也可以在每次連接時添加自定義header頭。

     

    11.png

     

    2.3 自定義編碼

    在自定義編碼器中可以將加密的函數(shù)名隱去,分區(qū)傳遞,加入干擾字符等。

     

    (1)自定義的base64編碼:

     

     

    12.png


    13.png

    在編碼的同時也可以改變包的格式,使用multipart發(fā)包進行混淆,很多waf出于對業(yè)務(wù)性能影響,一般會把 multipart/form-data 這種多用來上傳文件的傳輸方式檢測關(guān)閉掉。不然攻擊者一直給你發(fā)大文件,一直損耗WAF的性能,拖垮業(yè)務(wù)。也可以使用分塊傳輸。

     

    14.png

     

    可以注意到,很多簡單的編碼器他的參數(shù)都是_0x.....=加密字符串,可以作為一個弱特征檢測。

     

    (2)自定義hex:

     

    15.png

     

    檢測識別

    xxx= 40696e695f7365742822646973706c61795f6572726f7273222c2022302229或者更短。

    (3)rsa靜態(tài)密鑰(僅支持php):

     

    16.png

    17.png

    188.png

     

    分區(qū)塊加密,并且會有分隔符,每個區(qū)塊的長度一致,RSA是分組加密算法,分組大小可以根據(jù)密鑰的大小而改變,然而密鑰是蟻劍自動生成的,所以每區(qū)塊長度一定是172字節(jié),也就是之前的80字符base64加密的長度。且生成的密鑰是有很大的相似性的,也可以加強對shell的檢測。

     

    18.png

     

    但這也是弱特征,這樣的加密數(shù)據(jù)包已經(jīng)是沒法解密了,那我們來看一下執(zhí)行命令:

     

    19.png

    20.png

     

    執(zhí)行命令的時候會多幾個參數(shù),且這幾個參數(shù)的值僅僅是通過base加密的,一個是執(zhí)行方式:cmd,一個是執(zhí)行的命令:whoami,在\source\core\base.js中有對這串字符的加密,這個是蟻劍把命令獨立于php語句傳輸。

     

    21.png

     

    處理方法:

    ①可在編碼器中通過遍歷將每個參數(shù)進行加密,也可在每個參數(shù)中加入混淆的字符串,在接收處理的時候刪除即可,參考方法:http://www.feidao.site/wordpress/?p=4495#1webshell。

    ②在該處編寫自己的加密方法,然后將\source\core\php\template文件夾內(nèi)的js文件做對應(yīng)修改

     

    (4)AES動態(tài)密鑰:

     

    要求站點支持openssl,默認是不開啟的。密鑰可以訪問網(wǎng)站時截取session或者截取其他的進行加密,做到動態(tài)key。當(dāng)然,攔截的waf也可以學(xué)習(xí)這個方法,最后密鑰都是自己添加成硬編碼也不是不可。

     

    22.png
    23.png

     

    24.png

     

    AES加密后流量包基本就不能夠檢測出來了,執(zhí)行其他命令時也需同上述操作一樣,遍歷將其他參數(shù)進行加密,但多次請求同一個包且參數(shù)相同參數(shù)值開頭相同也能夠算是一個弱特征。

     

    (5)請求包成功加密,很多waf會選擇連接返回包,返回包是明文的,包含了很多關(guān)鍵字,例如[s][E]或者是其他敏感的詞匯,所以解碼器也隨之出現(xiàn),解碼器和之前的加密方式以及防范方式多很相似,就不一一贅述了。

     

    25.png

     

    2.4 蟻劍市場自帶的插件

     

    蟻劍的市場中也有很多一鍵繞過的插件,這里就不再進行研究。

     

    ③ 冰蝎3.0 Beta 9

     

    冰蝎3.0 和v2.1相比,最重要的變化就是“去除動態(tài)密鑰協(xié)商機制,采用預(yù)共享密鑰,全程無明文交互,密鑰格式為md5("admin")[0:16];冰蝎的默認密鑰為“e45e329feb5d925b”,正常連接發(fā)包如下(連接為兩個流量包,全文加密):

     

    26.png

     

    明文:

     

    27.png

    28.png

    明文:

     

    29.png

     

    密文的加密方式為先將傳遞數(shù)據(jù)base64加密,再將其進行AES加密,由于新版本中取消了動態(tài)密鑰交互過程,加密的密鑰被寫死在shell中,如果是不改密碼直接使用默認的shell,檢測是可以進行解密檢測敏感字符的,比如:error_reporting(0) ,phpinfo()等。

     

    30.png

     

    如果密碼交互失敗,冰蝎會進行常規(guī)密鑰交互階段,而且由于密碼錯誤,shell中獲取內(nèi)容失敗,會爆出目錄文件錯誤提示。

     

    31.png

    32.png

     

    如果攻擊者改了密碼,密文便無法監(jiān)測,可以從header頭入手,首先是user-agent,內(nèi)置的25個ua請求頭,不自定義的話太老,可以在其源碼constants.class中自行更改。

     

    33.png

    34.png

     

    初始化的Accept,Accept-Language,Content-type這三個的值也是一個固定值,且Content-type為小寫t,這也可以作為一個監(jiān)測點。

    具體值如下:

     

    "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"
    "Accept-Language", "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
    "Content-type", "application/x-www-form-urlencoded"
    或者
    "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
    "Accept-Language", "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2"
    "Content-type", "application/x-www-form-urlencoded"

    35.png

     

    其次為referer:連接的兩個包referer中的文件名都是隨機生成的,但文件名是純大寫或者是純小寫,可作為一個弱特征檢測。

     

    36.png

    37.png

    38.png

     

    Cookie:冰蝎的機制是需要從set-cookie中去取值,所以在發(fā)包中即使是有了cookie,他的接收包中都會有setcookie,除去第一個包沒有。

     

    39.png

     

    經(jīng)測試可以發(fā)現(xiàn)在點擊虛擬終端時會連續(xù)發(fā)17個包,發(fā)包長度不一樣但是這17個包的接收長度一模一樣。攔截大量發(fā)包。

     

    40.png

     

    連接成功后不操作,冰蝎會每5-8分鐘(大概率是5分鐘)發(fā)一個測試包是否存活。

     

    41.png

     

    在連接時冰蝎發(fā)的兩個包,盡管現(xiàn)在較于2.0修改了length,但是在接收包中可以看到,第一個連接包是比較小的,控制在5000以下,后一個包大概是在17W或者18W左右,原因是因為后一個包會加載phpinfo()等界面內(nèi)容作為主頁,導(dǎo)致返回的長度很長。

     

    42.png

     

    ④ 哥斯拉v4.0.1

     

    哥斯拉號稱全部類型的shell均可繞過市面所有靜態(tài)查殺、流量加密可繞過市面全部WAF,且自帶眾多插件。支持對載荷進行AES等各種加密,支持自定義Http頭,支持內(nèi)存shell,提供豐富的Webshell功能。 哥斯拉客戶端運行在Java平臺上,通過調(diào)用Java庫產(chǎn)生TLS流量。

     

    哥斯拉生成phpshell文件,存在默認密碼和密鑰:

     

    43.png

     

    phpshell有三種編碼方式:

    44.png

     

    EVAL_XOR_BASE64編碼連接特征很明顯,經(jīng)過url解碼后,pass=eval(base64_decode... 攔截明顯的木馬特征即可。

     

    45.png

     

    XOR_BASE64編碼方式第一個包形式為pass=加密數(shù)據(jù),無法檢測:(XOR_RAW與其類似,不再單獨分析)

     

    46.png

     

    經(jīng)分析,哥斯拉連接時會有一個握手機制。其內(nèi)容是固定的(加密前),響應(yīng)也是固定的(加密前)。且加密中未填充隨機長度字符。故在默認密碼和密鑰的情況下,內(nèi)容固定,可以檢測該握手機制包中的請求體和響應(yīng)體:DlMRWA1cL1gOVDc2MjRhRwZFEQ%3D%3D

    11cd6a8758984163fL1tMGI4YTljO/79NDQm7r9PZzBiOA==6c37ac826a2a04bc

    注:密鑰改變,base加密字符串改變,密碼改變,md5加密字符串改變。

    如果密碼和密鑰不是默認,可以檢測響應(yīng)體的長度以及構(gòu)成要素:前后為16位md5值,中間為32位加密字符串。

     

    47.png


    哥斯拉頁面配置中header中有三個固定值,user-agent,accept,accept-language。該弱特征也可作為檢測。

     

    48.png

     

    項目咨詢

    *姓名
    *單位
    *電話
    *驗證碼
    發(fā)送驗證碼
    *您感興趣的產(chǎn)品
    項目規(guī)格
    *需求概述
    *所在地
    *意向行業(yè)
    +