Burpsuite+Mitmproxy+Python解决Web渗透测试过程中遇到的自定义JS加密防护问题
字数 1101 2025-08-15 21:31:27
Web渗透测试中处理自定义JS加密防护的解决方案
背景与问题
在Web渗透测试过程中,经常会遇到使用自定义JavaScript加密防护的网站,这给测试工作带来了诸多挑战:
- 自定义加密算法:网站使用JavaScript实现的独特加密/编码算法
- 重写成本高:用其他语言重写算法耗时且容易出错
- 测试效率低:需要在BurpSuite和命令行之间频繁切换
- 请求体加密:BurpSuite中只能看到编码后的请求体,难以修改
解决方案概述
使用以下工具组合解决上述问题:
- BurpSuite:一级代理,用于拦截和修改响应
- mitmproxy:二级代理,用于自动处理加密/解密
- Python + PyExecJS:调用JavaScript加密函数
工具安装
- PyExecJS:
pip3 install pyexecjs - mitmproxy:
pip3 install mitmproxy - BurpSuite:社区版或专业版均可
实施步骤
1. 定位加密JavaScript方法
- 在JS文件中搜索关键字:
encode,encrypt - 查找AJAX请求,搜索
post,检查发送请求前的操作 - 使用BurpSuite插件jsrainbow辅助分析
2. 验证JavaScript功能
使用PyExecJS测试JavaScript加密函数:
import execjs
data = '{"NAME":"xxx","ID":"xxx","_DATA":"示例数据"}'
def myencoder(data):
jsstr = get_js()
loader = execjs.compile(jsstr) # 加载JS文件
return loader.call('xxx', data) # 调用js方法
def get_js():
with open("C:\\xxx.js", 'r', encoding='utf-8') as f:
return f.read()
if __name__ == '__main__':
print(myencoder(data))
3. 修改响应中的JavaScript
通过BurpSuite修改响应,去除加密函数调用:
- 进入
Proxy→Options→Match & Replace - 添加规则匹配加密函数调用并移除
- 清除浏览器缓存确保加载修改后的JS
4. 编写mitmproxy插件
创建自动加密的mitmproxy插件:
from mitmproxy import ctx, http
import execjs
def myencoder(data):
jsstr = get_js()
loader = execjs.compile(jsstr)
return loader.call('xxx', data)
def get_js():
with open("C:\\xxx.js", 'r', encoding='utf-8') as f:
return f.read()
class Modify:
def request(self, flow):
if flow.request.url.startswith("https://www.xxx.com/"):
if flow.request.urlencoded_form:
flow.request.urlencoded_form["PASSWD"] = myencoder(
flow.request.urlencoded_form["PASSWD"]
)
addons = [Modify()]
5. 配置代理链
-
启动mitmproxy:
mitmdump -p 8081 -s addon_jsenc.py --quiet-p:指定端口-s:指定插件脚本--quiet:静默模式(调试时可去掉)
-
配置BurpSuite上游代理:
User options→Connections→Upstream Proxy Servers- 添加mitmproxy作为上游代理
优势与效果
- 无需重写算法:直接调用原JavaScript加密函数
- 透明加密:BurpSuite中操作明文,自动加密
- 支持其他工具:SQLmap等工具可通过代理直接使用
- 高效测试:无需手动切换工具或复制粘贴
参考资源
通过这套方案,可以高效处理Web渗透测试中遇到的各种JavaScript加密防护,显著提升测试效率。