蚁剑工具进阶学习
(1)

蚁剑学习笔记

工具介绍

中国蚁剑(AntSword)是一款开源的跨平台网站管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。想了解详情的可以看下蚁剑官方文档(https://doc.u0u.us/zh-hans/index.html) ,这个文档需要代理访问。
yj.png

通俗的讲:中国蚁剑是 一 款比菜刀还牛的shell控制端软件。

中国蚁剑推崇模块化的开发思想,遵循开源,就要开得漂亮的原则,致力于为不同层次的人群提供最简单易懂、方便直接的代码展示及其修改说明,努力让大家可以一起为这个项目贡献出力所能及的点点滴滴,让这款工具真正能让大家用得顺心、舒适,让它能为大家施展出最人性化最适合你的能力!

安装使用

下载

首先了解下蚁剑分为两部分,加载器和源代码,源代码是nodejs,使用加载器就可以让你不用安装nodejs的环境即可运行和调试蚁剑,后续关于蚁剑的使用基本使用加载器antsword.exe来完成。

所以我们在下载的时候需要下载两个部分,一个是项目核心源码”antSword“,另一个是加载器;根据运行环境来选择本机加载器即可。

唯一官方github下载地址:https://github.com/AntSwordProject/

安装

我们解压“AntSword-Loader-*.zip”加载器后,运行“AntSword”;

第一次安装项目需要先初始化,如果你已经下载了核心源码,就选择项目源码的文件夹。(如果只下载了加载器,选择一个空文件夹,加载器会自动帮你下载核心项目源码)。

注意:这个项目文件夹就是你以后需要备份的,存储着你的shell和shell内的资料。

使用

使用其实跟菜刀几乎差不多,只是蚁剑功能更强大一些,相关使用教程有很多就不介绍。

User-Agent修改

软件默认的user-agent是:User-Agent: antSword/v2.0;而且大部分人都不会去自定义useragent,这就给waf和蜜罐白白送了一个特征,所以我们要修改一下源代码:

修改项目路径:

antSwordmodulesrequest.js (修改const USER_AGENT = 'antSword/v2.1'; 这一行代码!)


let logger;
// 请求UA
const USER_AGENT = 'antSword/v2.0';

antSwordmodulesupdate.js (有两处要修改;可搜索“antSword/v2.0”来找到这两行代码!)

    superagent
      .head(url)
      .set('User-Agent', "antSword/v2.0")
      .redirects(5)
      .timeout(30000)
      .end((err, res) => {
        if (err) {
          event
            .sender
            .send(`update-error-${hash}`, err);

可以将UA替换成一些爬虫UA 用来迷惑网站管理员

可替换UA

# chrome
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2309.372 Safari/537.36
Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36
Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36

# Firefox
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130330 Firefox/21.0
Mozilla/5.0 (Windows x86; rv:19.0) Gecko/20100101 Firefox/19.0

# ie
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/4.0; GTB7.4; InfoPath.3; SV1; .NET CLR 3.1.76908; WOW64; en-US)
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)
Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)

# Opera
Opera/9.80 (X11; Linux x86_64; U; bg) Presto/2.8.131 Version/11.10
Opera/9.80 (Windows NT 5.1; U; cs) Presto/2.7.62 Version/11.01
Opera/9.80 (Windows NT 5.1; U; en) Presto/2.9.168 Version/11.51
Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.6.37 Version/11.00
Opera/9.80 (Windows NT 6.1; Opera Tablet/15165; U; en) Presto/2.8.149 Version/11.1

# Safari
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; zh-cn) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4
Mozilla/5.0 (Windows; U; Windows NT 6.1; fr-FR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27
Mozilla/5.0 (Windows; U; Windows NT 6.1; sv-SE) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4

编码器与解码器

为什么要有编码器和解码器

总所周知,蚁剑所有脚本的源代码(php/asp/aspx等)均来自菜刀,所以流量特征也和菜刀差不多,过WAF基本不用想了。

  所以有了编码器和解码器,进行流量混淆可绕过WAF,并且编码器和解码器可以自定义,使用nodejs编写即可,类似于插件很容易上手,先简单说明下编码器和解码器的作用。

  编码器:对发送流量进行编码,服务端进行解码。

  解码器:服务端对返回流量编码,需要客户端通过解码器解码还原流量接收。

  可以看到一个对发送加密,一个对返回加密,这样才能达到完美过WAF的目的,但原版蚁剑会有一个问题,只支持php的编码解码,所以需要改造蚁剑支持asp、aspx。

  而jsp这个比较麻烦,他不是脚本语言,没有eval/execute等函数可以用来直接执行代码,使用过菜刀的都知道,jsp的"一句话"非常大,如果要达到冰蝎那样短小的webshell,并且实现加密,得使用冰蝎的方式来实现,类加载,将命令执行、文件管理等操作编译成class,硬编码到蚁剑里,然后传给服务端解析,工作量比较大,当然有人已经实现了蚁剑版的jsp一句话,但只做到了base64和hex编码发送,有人特意分析还是有比较明显特征的,而且返回包也没有做加密处理。

如何使用

  1. 打开 AntSword, 进入「系统设置 」-> 「编码管理」
  2. 点击「新建」, 然后输入你的编码器名称
  3. 鼠标左键点击新建好的编码器,再点击工具栏中的「编辑」按钮。
  4. 在弹出的编辑框里粘贴第1步中的代码,并点「保存」
  5. 在添加 Shell 或者 编辑Shell 配置时,就可以选择你的编码器/解码器啦

如何编写

这些代码主要就是javascript node.js基础语法,主要就是3行代码:

let randomID = `${Math.random().toString(16).substr(2)}`; //生成13位随机字符串
let encry= new Buffer(data['_']).toString('base64'); //传输数据base64
data[pwd] = `${randomID}`+encry+`${randomID}`; //随机字符串+传输数据base64+随机字符串

学习教程

菜鸟教程js编码:https://www.runoob.com/nodejs/nodejs-buffer.html

Node.js 目前支持的字符编码包括:

ascii - 仅支持 7 位 ASCII 数据。如果设置去掉高位的话,这种编码是非常快的。

utf8 - 多字节编码的 Unicode 字符。许多网页和其他文档格式都使用 UTF-8 。

utf16le - 2 或 4 个字节,小字节序编码的 Unicode 字符。支持代理对(U+10000 至 U+10FFFF)。

ucs2 - utf16le 的别名。

base64 - Base64 编码。

latin1 - 一种把 Buffer 编码成一字节编码的字符串的方式。

binary - latin1 的别名。

hex - 将每个字节编码为两个十六进制字符。

进阶学习

加上这个mulipart 发包之后。数据包会像如下这样
multipart/form-data

POST [url]http://www.example.com[/url] HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA

------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"

title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png

PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

这种方式可以干扰waf的判断。有时候可以达到一种绕过waf 的效果

POST的4种传参方式

POST是用来向服务器提交参数:无论怎样都是服务器响应HTTP请求头,请求头分为三部分:状态行、请求头、消息主体

POST中又有四种传参方式

一:application/x-www-form-urlencoded

POST http://www.example.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8  
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3   

二: multipart/form-data

请求实例:用于文件传输。用于表单提交时,表单的enctyped必须设置位置这个值

三:application/json

POST http://www.example.com HTTP/1.1
Content-Type: application/json;charset=utf-8
{"title":"test","sub":[1,2,3]}

四: text/xml

POST http://www.example.com HTTP/1.1
    Content-Type: text/xml
 
    <!--?xml version="1.0"?-->
    <methodcall>
        <methodname>examples.getStateName</methodname>
        <params>
            <param>
                <value><i4>41</i4></value>             
        </params>
    </methodcall>

参考文章

https://www.fujieace.com/hacker/tools/antsword.html

http://t.zoukankan.com/0daybug-p-12914693.html

https://www.t00ls.cc/articles-50892.html

https://xz.aliyun.com/t/4000

本文为作者admin发布,未经允许禁止转载!
上一篇 下一篇
评论
暂无评论 >_<
加入评论