From 74c4bf0cf161d50d223a0195525f128049420a17 Mon Sep 17 00:00:00 2001 From: Medicean Date: Sun, 17 Jul 2022 11:17:27 +0800 Subject: [PATCH] =?UTF-8?q?Enhance(Core/JSPJS):=20=E6=A0=87=E8=AE=B0JSPJS?= =?UTF-8?q?=E6=94=AF=E6=8C=81RAW?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 9 ++++----- source/core/jspjs/index.js | 23 +++++++++++++---------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19845cb7..7c7e1166 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,8 +47,7 @@ * JSPJS 兼容各种表达式注入 -> 具体请看 spelbase64、el、ognl 这三个内置编码器样例 - +> 具体请看 spelbase64、el、ognl 这三个内置编码器样例, 详细请参考[Java表达式注入的武器化利用](https://mp.weixin.qq.com/s/nCvAICapO8NX--VfToLcwQ) ### 数据管理 @@ -58,6 +57,7 @@ * 新增配置选项「Body 设置为 RAW 模式」 > 勾选该选项后,只会发送 `pwd` 键下的内容,不会发送键值 +> 目前生效的类型有: 「PHPRAW」、「CMDLinux」、「PSWindows」、「JSPJS」 主要场景如下: @@ -70,7 +70,7 @@ * 新增 FileHash 计算目标文件 hash 功能 -> 该功能目前正在逐步适配所有类型中 (PHP/PHP4/PSWindows/CMDLinux/JSP) +> 该功能目前正在逐步适配所有类型中 , 目前已经适配 PHP/PHP4/PSWindows/CMDLinux/JSP ### 后端模块 @@ -78,10 +78,9 @@ * Fix #307 * 重新规整 `modules/request.js` 代码结构 * 调整 superagent ignoreHTTPS 注入,避免 npm upgrade之后引发问题 -* * 支持 WebSocket 连接 -> 由于 ASP/ASPX/PHP/JSP/JSPJS 类型每次请求时为多个参数,WebSocket连接之后Server端解析会较为困难,所以当前仅支持「RAW」类型: 「PHPRAW」、「CMDLinux」、「PSWindows」,未来会支持基于 defineClass 的 JSPRAW 类型 +> 由于 ASP/ASPX/PHP/JSP/CUSTOM 类型每次请求时为多个参数,WebSocket连接之后Server端解析会较为困难,所以当前仅支持「RAW」类型: 「PHPRAW」、「CMDLinux」、「PSWindows」、「JSPJS」,未来会支持基于 defineClass 的 JSPRAW 类型 以 [wsMemShell](https://github.com/veo/wsMemShell) 项目中的 `wscmd` 为例: diff --git a/source/core/jspjs/index.js b/source/core/jspjs/index.js index 325a2e1e..54db07b0 100644 --- a/source/core/jspjs/index.js +++ b/source/core/jspjs/index.js @@ -9,6 +9,9 @@ const Base = require('../base'); class JSPJS extends Base { + static get supportRawBody() { + return true; + } constructor(opts) { super(opts); // 解析模板 @@ -41,18 +44,18 @@ class JSPJS extends Base { * @return {array} 编码器列表 */ get encoders() { - return ["spelbase64","el","ognl"]; + return ["spelbase64", "el", "ognl"]; } get decoders() { - return ["default", "base64", "hex", "b64reverse", "b64rot13"]; - } - /** - * HTTP请求数据组合函数 - * @param {Object} data 通过模板解析后的代码对象 - * @param {bool} force_default 强制使用 default 解码 - * @return {Promise} 返回一个Promise操作对象 - */ + return ["default", "base64", "hex", "b64reverse", "b64rot13"]; + } + /** + * HTTP请求数据组合函数 + * @param {Object} data 通过模板解析后的代码对象 + * @param {bool} force_default 强制使用 default 解码 + * @return {Promise} 返回一个Promise操作对象 + */ complete(data, force_default = false) { // 分隔符号 let tag_s, tag_e; @@ -86,7 +89,7 @@ class JSPJS extends Base { } // 组合完整的代码 let tmpCode = data['_']; - + data['_'] = ` try { load("nashorn:mozilla_compat.js");