|
1 | | -# JSONP 响应解密示例 |
2 | | - |
3 | | -## 简介 |
4 | | -演示前端通过 JSONP 发送明文请求,后端返回加密响应,前端解密后展示。 |
5 | | - |
6 | | -## 快速开始 |
7 | | -1. **克隆项目**: |
8 | | - ```bash |
9 | | - git clone https://github.com/your-repo/jsonp-response-decryption-example.git |
10 | | - cd jsonp-response-decryption-example |
11 | | - ``` |
12 | | - |
13 | | -2. **启动后端**: |
14 | | - ```bash |
15 | | - cd backend |
16 | | - npm install express crypto-js |
17 | | - node server.js |
18 | | - ``` |
19 | | - |
20 | | -3. **运行前端**: |
21 | | - 打开 `frontend/index.html` 文件。 |
22 | | - |
23 | | -## 功能 |
24 | | -- **前端**: 发送明文请求,接收并解密加密响应。 |
25 | | -- **后端**: 接收明文请求,返回加密的 JSONP 响应。 |
26 | | - |
27 | | -## 代码结构 |
28 | | -- `frontend/index.html`: 前端页面。 |
29 | | -- `backend/server.js`: 后端服务器。 |
30 | | - |
31 | | -## 示例 |
32 | | -- **前端请求**: |
33 | | - ```javascript |
34 | | - jsonpRequest("http://localhost:3000/api", "handleResponse", inputData); |
35 | | - ``` |
36 | | -- **后端响应**: |
37 | | - ```javascript |
38 | | - res.jsonp(encryptedResponse); |
39 | | - ``` |
40 | | - |
41 | | ---- |
42 | | - |
43 | | -简洁明了,适合快速了解项目! |
| 1 | +# Script Hook辅助逆向jsonp响应加密 |
| 2 | + |
| 3 | +# 一、逆向目标 |
| 4 | + |
| 5 | +这个页面上点击"发送请求"按钮的时候,会从后端来气数据展示在右侧: |
| 6 | + |
| 7 | + |
| 8 | + |
| 9 | +但是服务器的响应是加密的: |
| 10 | + |
| 11 | + |
| 12 | + |
| 13 | +响应示例: |
| 14 | + |
| 15 | +```js |
| 16 | +/**/ |
| 17 | +typeof handleResponse === 'function' && handleResponse("U2FsdGVkX18jpSwKLBja1RP6m9cFa3PyMKk/uydl6d1zCAYCISbs7WNV/qzxA2Pjp8/cogXmLwy+Ox63NJ/kOk+b6LgUoqBtRNxglWIDjRWlEcDzMtnEkUclvk/qkM0nSEiPHlf22gXn5R4s6h5RCpW4rO4s6UwX"); |
| 18 | +``` |
| 19 | + |
| 20 | +我们的目标就是搞清楚服务器返回的数据是如何被解密的。 |
| 21 | + |
| 22 | +# 二、下载 & 启动靶场 |
| 23 | + |
| 24 | +克隆仓库到本地: |
| 25 | + |
| 26 | +```bash |
| 27 | +git clone [email protected]:JSREI/js-script-hook.git |
| 28 | +``` |
| 29 | + |
| 30 | +进入靶场目录: |
| 31 | + |
| 32 | +```bash |
| 33 | +cd js-script-hook/goat/jsonp-response-encrypt |
| 34 | +``` |
| 35 | + |
| 36 | +启动Server: |
| 37 | + |
| 38 | +```bash |
| 39 | +node server.js |
| 40 | +``` |
| 41 | + |
| 42 | +打开客户端页面: |
| 43 | + |
| 44 | +``` |
| 45 | +client.html |
| 46 | +``` |
| 47 | + |
| 48 | +然后要破解的内容就在这个页面上。 |
| 49 | + |
| 50 | +# 三、安装脚本 |
| 51 | + |
| 52 | +安装请参考项目主页的安装教程,此处不再赘述: |
| 53 | + |
| 54 | +``` |
| 55 | +https://github.com/JSREI/js-script-hook?tab=readme-ov-file#%E4%BA%8C%E5%AE%89%E8%A3%85 |
| 56 | +``` |
| 57 | + |
| 58 | +# 四、分析 |
| 59 | + |
| 60 | +安装完之后先配置一下脚本: |
| 61 | + |
| 62 | + |
| 63 | + |
| 64 | +因为加密内容是在响应中的,所以我们只开启响应断点就可以了: |
| 65 | + |
| 66 | + |
| 67 | + |
| 68 | +然后我们再单击页面上的发送请求的按钮,会发现自动进入了断点,而断点的位置,就是jsonp的callback函数内: |
| 69 | + |
| 70 | + |
| 71 | + |
| 72 | +jsonp响应的内容放在变量encryptedResponse中,而这个变量被传递到了一个decryptData函数,看上去就是在解密,然后传递的第二个参数secretKey的值是写死的"my-secret-key",看上去就是一个秘钥之类的: |
| 73 | + |
| 74 | + |
| 75 | + |
| 76 | +把鼠标放到decryptData上悬浮一会儿,跟进去函数的代码实现: |
| 77 | + |
| 78 | + |
| 79 | + |
| 80 | +然后直接就看到了加密数据的解密逻辑,其实就是一个DES解密: |
| 81 | + |
| 82 | + |
| 83 | + |
| 84 | +解密函数: |
| 85 | + |
| 86 | +```js |
| 87 | +// 解密函数(使用 DES) |
| 88 | +function decryptData(encryptedData, secretKey) { |
| 89 | + const bytes = CryptoJS.DES.decrypt(encryptedData, secretKey); |
| 90 | + return bytes.toString(CryptoJS.enc.Utf8); |
| 91 | +} |
| 92 | +``` |
| 93 | + |
| 94 | +而我们能够如此简单且丝滑的分析清楚数据的解密逻辑,主要还是因为[Script Hook](https://github.com/JSREI/js-script-hook)这个脚本能够直接把断点打到jsonp的callback函数内,感兴趣的大佬赶快来试一试吧! |
| 95 | + |
| 96 | + |
| 97 | + |
| 98 | + |
| 99 | + |
0 commit comments