1. 威客安全首页
  2. 安全资讯

从网络侧分析蚁剑交互流量

中国蚁剑是一款跨平台且十分优秀的开源网站管理工具,面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。它集文件管理、虚拟终端、数据管理功能于一身,可在windows、linux和Mac上正常运行。本文从网络侧出发,从http流量层面对蚁剑功能和逃逸方式等进行分析,旨在帮助大家在网络流量层面进一步了解蚁剑。

image.png

一、AntSword基本操作

蚁剑操作界面比较简单,易于操作。我们右键向蚁剑工作区域添加数据,进行基础配置,填入shell地址、连接密码等等,就可以进行连接。另外,它还可以对请求包的编码方式进行选择,并且进行分块传输、自定义分割字符等自定义配置。

image.png

蚁剑支持php、asp、aspx、custom和php4的站点管理,连接后,可以进行虚拟终端、文件管理等多种操作。在几种语言环境下,蚁剑对PHP的支持是最好的,本文也以PHP环境作为主要分析对象。

image.png

二、AntSword的网络连接

为了能让蚁剑顺利连接并工作,需要先在linux服务器上搭建了php站点环境,并上经典小马作为web端的shell脚本。

image.png

2.1 AntSword的HTTP请求

在配置测试连接的时候,或是使用蚁剑的管理功能,蚁剑都会发送一个http包获取服务端相关信息,这个包通常来说是蚁剑发起的第一个http包,通过wireshark抓包分析。可以看出命令成功执行并得到了服务器的正确响应。

image.png

http请求包的body部分携带了大量的数据,但是由于进行编码的原因,结构不是很清晰。为了让请求代码更加清晰,先对其进行URL decode,并整理代码结构:

image.png

从请求流量携带代码的功能来看,客户端请求了服务端当前目录、根目录、系统和当前用户名等信息,输入到缓冲区再由$output变量接收。为了能在响应包中精确的定位$output输出位置,代码通过一些随机字符作为开始和结束分隔符,与使用固定分隔符相比,这种方式在一定程度上能够抵抗网络侧安全设备的检测。

image.png

当然,蚁剑中也支持自定义的数据分割符:

image.png

在蚁剑的文件管理功能当中,支持的功能相当多,包括上传、下载、编辑、新建、修改文件权限等。

image.png

在进行文件管理操作时抓到的的数据包来看,返回包的结构仍然没有变化:仍然是开始定位符+返回内容+结束定位符的三段式结构。

image.png

继续解码分析请求包,其中执行的代码整体结构不变,只是try代码块中的代码,因为功能变化而发生了改变。从多条http数据流可以判断,主要功能新代码都存在于try代码块中,其余代码基本不会发生改变:

image.png

继续分析虚拟终端执行命令时的流量,在执行whoami命令的同时开启抓包,可以看到虚拟终端正确的执行了这条系统命令并获取当前用户为apache。

image.png

请求包结构依然只有try代码块中的代码发生了变化,在另一变量中存储了被base64编码并且需要执行的系统命令,解码后可以发现,执行的系统的命令不只是whoami这一条。在该命令前有一条cd指令,之后又一条pwd指令。因为是虚拟终端,难以像真实的终端一样实时交互。命令的最后存在一个由[S]和[E]字符包裹的当前执行目录,S和E应该是start和end的缩写,为执行下一条命令时所需要进入的目录提供指导,也就是下一条指令需要提前cd进入的目录:

image.png

在返回包中直接返回了命令执行结果,同时在返回结果后跟着被[S]和[E]字串包裹的pwd命令执行结果:

在数据管理上,蚁剑支持MYSQL、MSSQL、ORACLE等主流数据库的连接管路,但http流量和其他管理功能的流量基本一致,就不再继续分析了。

从请求方向来看,蚁剑HTTP请求携带包含antSword/x.x的UA,但是该UA可以在配置中进行修改,伪装成正常的浏览器UA。但是,在body中携带的的PHP代码结构固定、特征明显,如果在进行渗透任务,易被安全设备检测从而导致流量被阻断或者IP被封禁。从响应方向看,部分代码执行次数较多,如获取指定目录下文件文件;另外,在命令执行时有目录标记[S][E]等。如果进行关联分析,易得出当前站点已经被get shell。为了对抗安全设备的检测,蚁剑又提供了一些逃逸的手段。

2.2 编码逃逸

在蚁剑php选项下,请求包默认支持base64、chr、chr16、rot13四种编码方式,响应包支持base64、rot13编码,还支持在几种编码方式下随机选择。以请求包rot13编码、响应包base64编码进行举例,继续抓取http流量。从http负载来看,请求包body内容已被rot13编码,且有rot13解码函数:

image.png

对编码内容进行urldecode、rot13和整理,php代码与未编码时一致,并且$output变量被base64_encode函数进行了编码,对应着需要解码的base64解码器。

image.png

在返回包中的输出也确实被base64编码了,蚁剑解码器会提取到输出内容并使用指定的解码器进行解码:

image.png

从实际效果上来看,编码后的数据看起来是被混淆了,但是实际上,只要原始数据不变,数据编码都是一个完全固定的映射。以第一条流开头的几个字符@ini_s来说,只要这个输入不变,编码结果也不会变。对人读来说,编码后的结果增加了日志审计等工作的难度,但是对于机器来说,被编码的特征是一个检测恶意流量更加强有力的支撑证据。

编码方式 编码结果
default @ini_s
base64 QGluaV9z
chr cHr(64).ChR(105).ChR(110).ChR(105).ChR(95).ChR(115)
chr16 cHr(0×40).ChR(0×69).ChR(0x6e).ChR(0×69).ChR(0x5f).ChR(0×73)
rot13 @vav_f

为了进一步对抗检测,蚁剑自带了RSA加密编码器并支持自定义编码解码器,并且开源了一些十分优秀的自定义加密编码解码器项目。

2.3加密编、解码器

从AntSword v2.1.0版本开始,新增了PHP RSA编码器,只需要一些简单的手动配置,就可以使用,在主界面的AntSword下拉菜单中找到编码设置,新建一个PHP RSA编码器,并在RSA配置中生成公私钥,AntSword同时会提供一个可以使用的RSA shell文件,将该shell上传到目标站点中进行连接即可,不过,这个shell被发现的概率很高,如果是在进行渗透任务时可以做一些免杀处理:

image.png

从提供的RSA shell功能来看,是将携带的数据进行了整体RSA加密并进行base64编码。在服务器端,RSA解密需要站点开启openssl扩展。脚本将接收到的进行解密后再运行,从抓到的http请求来看,ant携带数据已经被完全加密,无法发现明显的特征了。

image.png

但是蚁剑没有提供默认的解密解码器,可以在蚁剑项目中引入优秀的自定义开源加密、解密编、解码器,如AES、DES和Deflat等。我们向蚁剑项目中添加一个AES解码器:

image.png

配置好新的解码器后,抓取到的输出进行base64解码后,看到的只是一些难以读取的二进制流,很难在流量中发现任何特征了。

image.png

这些加密解密编、解码器给网络侧设备的检测带来了很大的挑战,检测的难度和成本也极大提高,但是很多编码解码器依赖openssl扩展,使用起来也有很多限制。

三、总结

蚁剑的更新和发展依稀可以看出攻防双方对抗的痕迹,攻击方不断完善逃避检测手段,增加检测所需的成本,防守方也针对不断而来的挑战进行更加深入的分析和研究,像冰蝎等等优秀的工具也层出不穷,需要大家继续分析研究下去。

*本文作者:新华三攻防团队,转载请注明来自FreeBuf.COM

本文转为转载文章,本文观点不代表威客安全立场。