First#
做一些 App 测试、Web 测试、小程序测试的时候,通常会遇到流量加密的问题,对于流量加密自然是要去解密的。
通常办法是提取对应的加解密部分,然后手动复制加解密字段进行加解密。
或者是 Hook 加解密函数,在调用的时候进行加解密。
上面无论哪种方法都比较麻烦,前者需要不断复制加密字段去解密,后者没法复用,需要重新调用才能执行方法。
CustomCrypto#
这是一个强大的加解密代理工具,可以将 Burp 流量代理到任意位置进行加解密。
How to use ?#
Settings#
插件安装后,只有两个要填写的地方,需要监控的网址
以及 需要执行的命令
。
需要监控的网址
:指的是需要去做加解密的网址。比如只有 http://localhost/login
需要加解密,就只填写 http://localhost/login
,如果整站都需要进行加解密,你就填写 http://localhost/login
,必须要带上 Http 头。
需要执行的命令
:这个功能赋予了这个插件无限的可能。你可以用任何你喜欢的语言去编写加解密脚本,只要它可以在命令行调用。调用方式很简单,以 nodejs 为例,只填写这一部分就好了 node /your/path/crypto.js
,如果是 java 的话,得先编译,也可以运行时编译(不过那样响应速度就太慢了)
记得点 保存
,配置才会生效,本插件支持多个站点不同加解密方案调用。
Scripts#
这里以 PHP 为例(PHP 天下第一)
系统的调用脚本为:
php crypto.php 2 abcdefjhijklmnopq....
其中,第一个参数 2
指的是请求类型,我在 Burp 中定义了四种请求类型:
const REQUEST_RECEIVE = "0";
const REQUEST_SEND = "1";
const RESPONSE_RECEIVE = "2";
const RESPONSE_SEND = "3";
第二个参数,指的是需要加解密的 body 部分,这个字段采用 url编码(base64编码(body))
进行传递,所以进行加解密前得先进行解码。目前是不支持 get 参数解密的,想来也没人用 GET 传递加密数据吧。
注意:
如果你在
REQUEST_RECEIVE
或者RESPONSE_RECEIVE
阶段进行了加解密操作那么你在
REQUEST_SEND
或者RESPONSE_SEND
阶段收到的 body 就是你上个阶段修改后的值简单来说,就是
REQUEST_RECEIVE
、RESPONSE_RECEIVE
阶段如果做了解密,那么REQUEST_SEND
、RESPONSE_SEND
阶段就必须进行加密,这样服务器/客户端才能收到正确的响应。
Burp 流量的生命周期如下:
测试的 PHP 脚本:
<?php
const REQUEST_RECEIVE = "0";
const REQUEST_SEND = "1";
const RESPONSE_RECEIVE = "2";
const RESPONSE_SEND = "3";
if(sizeof($argv)!==3){
throw new Exception("错误,至少需要两个参数!");
}
$isEncrypton = ($argv[1]==REQUEST_SEND||$argv[1]==RESPONSE_SEND);
$data = base64_decode(urldecode($argv[2]));
function encode($d){
return base64_encode($d);
}
function decode($d){
return base64_decode($d);
}
if($isEncrypton){
echo encode($data);
}else{
echo decode($data);
}
Examples#
1️⃣ Web 前端流量加解密#
- 提取前端流量加解密脚本为 crypto.js,需要加解密的网址为:
http://example.com/login
- 套入 CustomCrypto 脚本模板
- 需要监控的网址处填写:
http://example.com/login
- 需要执行的命令处填写:
node crypto.js
- 保存
- 返回网页重新发包即可
- 这边的脚本对返回页面做了 base64 编码
2️⃣App 流量加解密 (对应的脚本暂未提供)#
- 如果是 APP 自己搞的比较复杂的加解密建议使用 Frida 或者 Xposed 植入代码,在 App 起一个 Http 服务,这个服务用于主动调用 App 中的加解密。
- 如果采用公开算法如 RSA、SM2 之类的,建议直接在本地实现对应代码,或者直接拷贝他的加解密类到本地 java 文件中来。
- 套入 CustomCrypto 脚本模板(python/php/java 随意)
- 需要监控的网址处填写:
http://example.com/login
- 需要执行的命令处填写:
php crypto.php
- 保存
- 返回 App 重新发包即可
Defect#
缺点也是有的,因为多了四步加解密流程,所以 Web 页面响应速度会慢几秒钟。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论