编码器
编码器核心参数
编码器的三个参数:pwd, data, ext
data与pwd
蚁剑的编码器中,data
是一个Object
对象,此处可以简易理解为一种Key->Value
形式。
data['_']
是存放原始Payload
的地方,正常使用需要将其取出赋给data[pwd]
。
ext
ext
参数是编码器扩展信息。目前ext
参数中有2个值,opts
(WebShell配置) 和 rsa
(蚁剑客户端rsa配置)。
opts
中包括了WebShell的基础信息(比如:连接地址、密码、编码器、解码器、文字编码)、HTTP配置信息(Header和Body),还有其它配置(例如:数据分割符、分片大小等)。
可以通过ext
参数动态修改 HTTP 请求,实现每次请求都不一样,也可以将payload放入header中。
示例
下面是一个示例编码器:
对于编码器来说,重要3个参数
pwd,data,ext
理解了三个参数的作用,学会使用方法后,我们就可以完全自定义http请求包,这也是编码器的核心作用。
对应shell配置
之后在Burp中可以查看具体流量
解码器
解码器的原理就是在执行的Payload后,加入调用对应解码器的代码,从而修改返回结果编码。
此处需要注意,解码器需要使用对应的WebShell语言去编写。
实际解码器的流程:
编写解码器(asoutput
)->蚁剑发送Payload
时追加使用对应解码器(asoutput
)进行输出->蚁剑收到WebShell输出后再对结果进行解码(decode_buff
)从而正常回显。
如果不编写对应的decode_buff
,会出现类似下面的样子:
总结
实际上编码器其实就是用JavaScript
先对Payload
进行一次编码再发送,相应的服务端WebShell也要进行对应的解码操作。
因此理论上可以利用脚本语言内置的字符串操作函数(大小写变换、反转、移位、异或、替换、截取、进制转换等)随意排列组合, 对Payload进行变形、加密、编码、混淆,在不依赖任何扩展的情况下,真正意义上做到自定义流量过WAF,不拘泥于AES加密。
而更进一步,AntSword是模块化的,不同模块没有绑定关系,可以灵活变更。
整个蚁剑客户端、编码器、WebShell、解码器的流程大致如下: