经过@尼克的信息搜集,获取到一位人员的工号并且成功重置其密码,登陆其统一认证系统,以及VPN,发现此VPN不是彼VPN,访问资源都是以他代理去访问的,而不是直接拨入内网。
访问任何资源都如此形式:
https://webvpn.xxxxx.cn/http-8009/77726476706e697776646265737421a1ae13d27666301e2f5bdce2ca
很明显URL路径中有HTTP协议,以及要访问资源的端口,而URL则被进行编码加密操作,此时想要批量探测内网变得有些困难,并且也通过href看到了几个内网IP段。
所以需要分析一下他做的加密操作:
查看JS发现点击“立即跳转”会调用go()
接着可以发现encrypUrl()函数为处理url函数,所以下断点查看调用方法
进入encrypUrl()函数发现又会调用encrypt函数,使用AES加密处理URL
至此已经确定是使用JS并且AES加密等编码来处理URL的,所以我们想使用这个“鸡肋”的VPN探测内网,并且批量可控的话,就要还原这个加密方式,可以考虑自己参照实现AES加密或者扒出来相关功能JS直接使用他的代码来进行处理自己的数据,事半功倍。
使用@c0ny1所写的jsEncrypter
Burp插件,是用来爆破前端存在JS加密的登陆口使用的,原理一样,所以使用其中的phantomjs_server.js
,使用phantomjs开启webserver并提供一个接口,并将自己的数据传入到要调用的代码中做处理。
/**
* author: c0ny1
* date: 2017-12-16
* last update: 2019-5-30 11:16
*/
var fs = require('fs');
var logfile = 'jsEncrypter.log';
var webserver = require('webserver');
server = webserver.create();
var host = '127.0.0.1';
var port = '1664';
// 加载实现加密算法的js脚本
var wasSuccessful = phantom.injectJs('xxxx.js');/*引入实现加密的js文件*/
// 处理函数
function js_encrypt(payload){
var newpayload;
/**********在这里编写调用加密函数进行加密的代码************/
newpayload = encrypUrl("http",payload);
/**********************************************************/
return newpayload;
}
if(wasSuccessful){
console.log("[*] load js successful");
console.log("[!] ^_^");
console.log("[*] jsEncrypterJS start!");
console.log("[+] address: http://"+host+":"+port);
}else{
console.log('[*] load js fail!');
}
var service = server.listen(1664, function(request, response){
try{
if(request.method == 'POST'){
var payload = request.post['payload'];
var encrypt_payload = js_encrypt(payload);
var log = payload + ':' + encrypt_payload;
console.log('[+] ' + log);
fs.write(logfile,log + '\n', 'w+');
response.statusCode = 200;
response.write(encrypt_payload.toString());
response.close();
}else{
response.statusCode = 200;
response.write("^_^\n\rhello jsEncrypter!");
response.close();
}
}catch(e){
//console.log('[Error]'+e.message+' happen '+e.line+'line');
console.log('\n-----------------Error Info--------------------')
var fullMessage = "Message: "+e.toString() + ':'+ e.line;
for (var p in e) {
fullMessage += "\n" + p.toUpperCase() + ": " + e[p];
}
console.log(fullMessage);
console.log('---------------------------------------------')
console.log('[*] phantomJS exit!')
phantom.exit();
}
});
我们使用这个脚本加载刚刚调试JS所用到的代码,把过程中所用到的go()
、encrypUrl()
等函数全部放进去,再用上面的JS代码去调用返回到WEB。
配置完成后,访问web传入数据:
已经按照原网站的规则进行加密,之后我们就可以利用这个接口去探测内网了
最后使用python的requests库,编写一个扫描c段和常见端口的脚本进行内网探测:
可以成功探测内网,识别title:
最后就解决了尴尬的问题,比较有意思。