aboood
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
免责声明本文章中演示的漏洞带有一定攻击性,仅供安全研究与学习之用,风险自负!
传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢
0x01 背景
近期在公司内部对某品牌的路由器进行安全性测试,前端登录的过程中抓包发现密码已经加密过,采用了前端的加密方式,要进行登录密码安全测试的话,无法直接使用 burpsuite 等工具进行包重放测试,自学过一些python编程,使用python模拟登录过程进行安全测试。
0x01 前端加密过程溯源
在登录页面中填入密码进行抓包,可以看到请求中“password”参数已经变为密文。
打开浏览器的调试功能,在xhr发包处设置断点,数据包发送时可以停顿调试。
在OnPOST方法中参数已经被加密,依次向上查看调用栈。
在OnLogin方法中password参数的加密方式为 GibberishAES.enc(passwordEl.value, k).replace(/\s+/g, '')
AES加密是一种对称加密算法,特点是加密和解密的秘钥为同一个。
秘钥在页面源码内,为固定值,可以直接解密得到。
0x02 调试JS代码
本文章中使用的是python中execjs库来执行JS代码,execjs库的作用是在Python中执行JavaScript代码。它允许开发者在Python环境下调用JavaScript逻辑和功能,从而实现Python与JavaScript之间的交互。通过execjs,Python开发者可以利用JavaScript的强大功能和现有库,拓展Python应用的能力,实现跨语言的灵活互动,以及进行前后端开发的联动与测试。
安装execjs库
pip install PyExecJSj
基本使用
import execjs # 创建一个JavaScript执行环境 ctx = execjs.compile(""" function add(a, b) { return a + b; } """) # 调用JavaScript函数并获取结果 result = ctx.call("add", 5, 10) print(result) # 输出:15
前端页面中实际执行加密功能的是AES.js。
/** * Gibberish-AES v1.0.0 - 2013-04-15 * A lightweight Javascript Libray for OpenSSL compatible AES CBC encryption. * * Author: Mark Percival <mark@mpercival.com> * Copyright: Mark Percival - http://mpercival.com 2008 * * With thanks to: * Josh Davis - http://www.josh-davis.org/ecmaScrypt * Chris Veness - http://www.movable-type.co.uk/scripts/aes.html * Michel I. Gallant - http://www.jensign.com/ * Jean-Luc Cooke <jlcooke@certainkey.com> 2012-07-12: added strhex + invertArr to compress G2X/G3X/G9X/GBX/GEX/SBox/SBoxInv/Rcon saving over 7KB, and added encString, decString, also made the MD5 routine more easlier compressib
畅读付费文章
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)