网页抓取 加密html(参考文章快速定位前端加密方法渗透测试-前端测试)

优采云 发布时间: 2022-01-31 22:25

  网页抓取 加密html(参考文章快速定位前端加密方法渗透测试-前端测试)

  参考文章

  快速定位前端加密方式

  渗透测试 - 前端加密测试

  前言

  由于最近学会了挖坑,遇到数据加密基本放弃了。但是我发*敏*感*词*融行业还是其他行业。所以借此机会摆弄它。

  

  从上图可以看出,网站在前端加密了我的账号密码。前端加密的好处是防止数据被劫持后直接泄露用户信息,增加了攻击者的成本。虽然有https,但也有被破解的风险。另外,国内很多网站没有https,所以前端加密会进一步提高用户数据的安全性

  但对于我这样的菜鸟,就算把洞摆在我面前,也未必能找到,更别说加密了。太难了。

  工具

  phantomJS:, 如何使用:phantomJS.exe decrypt.js

  js加密器:

  简单的方法:

  1)下载打包的jar文件:链接:提取码:go8h

  2)添加到 BURP 扩展

  3)在jsEncrypter下载地址下载模板文件,即phantomjs_server.js中

  一般流程:

  1)寻找加密函数

  2) 编写phantomJS运行脚本,只需将实现加密算法的js文件导入到模板脚本中,在模板脚本的js_encrypt函数体中完成对加密函数的调用即可。当然也可以不引入实现加密算法的js文件,直接在js_encrypt函数体中实现加密算法,调用

  以下是phantomjs_server.js中的部分内容:

  /* 1.在这引入实现加密所有 js 文件,注意引入顺序和网页一致 */

loadScript("script-1.js");

loadScript("script-2.js");

loadScript("script-n.js");

/**********************************************/

...

function jsEncrypt(burp_payload){

var new_payload;

/* 2.在这里编写调用加密函数进行加密的代码,并把结果赋值给new_payload */

/*********************************************************/

return new_payload;

}

  3)在终端输入phantomJS.exe phantomjs_server.js,然后在burp中操作

  步骤演示1.在phantomjs_server.js文件中导入网页中实现加密算法的js文件(几乎是一个依赖文件),方便直接调用加密函数

  /* 1.在这引入实现加密所有 js 文件,注意引入顺序和网页一致 */

loadScript("script-1.js");

loadScript("script-2.js");

loadScript("script-n.js");

/**********************************************/

  一般来说,如果一个网站的js文件没有经过混淆处理,很容易找到加密函数,而且加密算法也比较简单,不需要导入js文件。

  可以直接复制加密函数,也可以自己写,但是加密算法的实现往往比较复杂,需要引入很多依赖,所以最好先导入,然后编写加密算法,然后调用依赖。

  这时可能有人会问,如果我知道实现加密算法的js文件,我会看一个JB文章!

  确实,说的好。下面提供两种解决方案

  2.在浏览器控制台中寻找实现相应数据加密的加密函数

  提示:在这一步可能会遇到找不到加密功能的问题。下面有几种解决方案。

  提示字符:

  

  然后找到加密函数

  

  进一步跟进看实现算法

  

  可以看到aes和rsa加密都通过了,所以后面还需要找到aes key,iv和rsa public_key

  aes密钥生成功能:

  

  四:

  

  rsa的public_key:

  

  3.调用phantomjs_server.js中jsEncrypt函数内找到的或者自己写的加密函数

  一般来说,这个函数需要自己重写

  最后结果:

  /**

* author: c0ny1

* date: 2017-12-16

* last update: 2020-03-03

*/

var fs = require('fs');

var webserver = require('webserver');

server = webserver.create();

var logfile = 'jsEncrypter.log';

var host = '127.0.0.1';

var port = '1664';

/* 1.在这引入实现加密所有js文件,注意引入顺序和网页一致 */

loadScript("aes.js");

loadScript("zero.js");

loadScript("rsa.js");

// loadScript("script-n.js");

/**********************************************/

function loadScript(scriptName) {

var isSuccess = phantom.injectJs(scriptName);

if(isSuccess){

console.log("[*] load " + scriptName + " successful")

}else{

console.log("[!] load " + scriptName + " fail")

console.log("[*] phantomjs server exit");

phantom.exit();

}

}

// 定义 des 加密函数

function encryptByDES(message, key){

var keyHex = CryptoJS.enc.Utf8.parse(key);

var encrypted = CryptoJS.DES.encrypt(message, keyHex, {

mode: CryptoJS.mode.ECB,

padding: CryptoJS.pad.Pkcs7

});

return encrypted.ciphertext.toString();

}

//定义 aes 加密函数

function encryptByAES(data, key, iv){

var key = CryptoJS.enc.Latin1.parse(key);

var iv = CryptoJS.enc.Latin1.parse(iv);

var encrypted = CryptoJS.AES.encrypt(data,key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding});

return encrypted.ciphertext.toString();

}

// 定义 rsa 加密函数

function encryptByRSA(data, pub_key){

var encrypt = new JSEncrypt();

encrypt.setPublicKey('-----BEGIN PUBLIC KEY-----' + pub_key + '-----END PUBLIC KEY-----');

var encrypted = encrypt.encrypt(data);

return encrypted;

}

// 定义 aeskey 生成函数

function createAesKey() {

var expect = 16;

var key = Math.random().toString(36).substr(2);

while (key.length < expect) {

key += Math.random().toString(36).substr(2);

}

key = key.substr(0, 16);

this.aesKey = key;

return key;

};

var PUBLIC_KEY = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIivtXleN3uU5AnqidOAsD/96s\nADl1RU8g8eeRfBvovhpFvTxqdjP4/aicrSLE/tP4+nctocHclxK2tCqS6758g2bk\nDrlyxcfVdFV8l9wLxciNf2eBrraKoNf85RBh8bcOT96TTpYF0dSgmJVPwMR5u8am\n+trZ5y3jtTGQ/Ht4lQIDAQAB\n-----END PUBLIC KEY-----";

function jsEncrypt(burp_payload){

/* 2.在这里编写调用加密函数进行加密的代码,并把结果赋值给new_payload */

var aeskey = createAesKey();

var key = CryptoJS.enc.Utf8.parse(aesKey)

//console.log(this.aesKey);

/*********************************************************/

result = {

source: encryptByAES(burp_payload,aeskey,key),

key: encryptByRSA(aeskey,PUBLIC_KEY)

};

return [result.source,aeskey,key];

// return burp_payload;

}

console.log("[*] Phantomjs server for jsEncrypter started successfully!");

console.log("[*] address: http://"+host+":"+port);

console.log("[!] ^_^");

var service = server.listen(host+':'+port,function(request, response){

try{

if(request.method == 'POST'){

var payload = request.post['payload'];

var encrypt_payload = jsEncrypt(payload);

var log = payload + ':' + encrypt_payload;

console.log('[+] ' + log);

fs.write(logfile,log + '\n', 'w+');

response.statusCode = 200;

response.setEncoding('UTF-8');

response.write(encrypt_payload.toString());

response.close();

}else{

response.statusCode = 200;

response.setEncoding('UTF-8');

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('---------------------------------------------');

response.statusCode = 200;

response.setEncoding('UTF-8');

response.write(fullMessage);

response.close();

console.log('[*] phantomJS exit!');

phantom.exit();

}

});

  

  一般网站采用aes des ras等方式进行加密。依赖文件都是开源的,可以直接导入。所以可以省略第一步,直接写函数。所需的依赖项如下:

  不明白加密功能的实现可以看我之前的文章文章

  因为加密方式类似,所以导入的文件可以统一写成:

  /* 1.在这引入实现加密所有 js 文件,注意引入顺序和网页一致 */

loadScript("des.js");

loadScript("aes.js");

loadScript("aes填充方式.js");

loadScript("rsa.js");

/**********************************************/

  然后定义各种加密函数的实现,然后调用。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线