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

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

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

    发布日期:2022/03/09

    引言

     

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

     

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

     

    ① 中國(guó)菜刀(chopper)

     

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


    2011和2014版本:


    1.png

    2.png

     

    特征:

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

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

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

    識(shí)別:

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

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

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

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

     

    2016版本:


    3.png

    較于早版本做了一些混淆

    識(shí)別"ass"."ert" "ev"."Al  "Ba"."SE6"."4_dEc"."OdE

     

    ② 蟻劍4.0.3

     

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

     

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

     

     

    4.png



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

     

    5.png

     

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

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

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

     

    2.1 自帶的編碼器和解碼器

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

    6.png

    7.png



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

     

    8.png

    9.png

     

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

     

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

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

     

    10.png

     

    (3)蟻劍自帶的header

     

    針對(duì)以上明顯特征,蟻劍有自定義編碼器,自定義header,自定義分隔符……修改明顯特征以繞過(guò)檢測(cè)

     

    2.2 自定義header

     

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

     

    11.png

     

    2.3 自定義編碼

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

     

    (1)自定義的base64編碼:

     

     

    12.png


    13.png

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

     

    14.png

     

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

     

    (2)自定義hex:

     

    15.png

     

    檢測(cè)識(shí)別

    xxx= 40696e695f7365742822646973706c61795f6572726f7273222c2022302229或者更短。

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

     

    16.png

    17.png

    188.png

     

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

     

    18.png

     

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

     

    19.png

    20.png

     

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

     

    21.png

     

    處理方法:

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

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

     

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

     

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

     

    22.png
    23.png

     

    24.png

     

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

     

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

     

    25.png

     

    2.4 蟻劍市場(chǎng)自帶的插件

     

    蟻劍的市場(chǎng)中也有很多一鍵繞過(guò)的插件,這里就不再進(jìn)行研究。

     

    ③ 冰蝎3.0 Beta 9

     

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

     

    26.png

     

    明文:

     

    27.png

    28.png

    明文:

     

    29.png

     

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

     

    30.png

     

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

     

    31.png

    32.png

     

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

     

    33.png

    34.png

     

    初始化的Accept,Accept-Language,Content-type這三個(gè)的值也是一個(gè)固定值,且Content-type為小寫(xiě)t,這也可以作為一個(gè)監(jiān)測(cè)點(diǎ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:連接的兩個(gè)包referer中的文件名都是隨機(jī)生成的,但文件名是純大寫(xiě)或者是純小寫(xiě),可作為一個(gè)弱特征檢測(cè)。

     

    36.png

    37.png

    38.png

     

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

     

    39.png

     

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

     

    40.png

     

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

     

    41.png

     

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

     

    42.png

     

    ④ 哥斯拉v4.0.1

     

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

     

    哥斯拉生成phpshell文件,存在默認(rèn)密碼和密鑰:

     

    43.png

     

    phpshell有三種編碼方式:

    44.png

     

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

     

    45.png

     

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

     

    46.png

     

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

    11cd6a8758984163fL1tMGI4YTljO/79NDQm7r9PZzBiOA==6c37ac826a2a04bc

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

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

     

    47.png


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

     

    48.png

     

    項(xiàng)目咨詢

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