Skip to content

Commit 734d311

Browse files
committed
feat: 为jsonp解密响应增加靶场实战文章
1 parent 55579dc commit 734d311

File tree

9 files changed

+99
-43
lines changed

9 files changed

+99
-43
lines changed
274 KB
Loading
341 KB
Loading
81.1 KB
Loading
410 KB
Loading
642 KB
Loading
512 KB
Loading
471 KB
Loading
437 KB
Loading
Lines changed: 99 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,99 @@
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+
![image-20250112222146343](./README.assets/image-20250112222146343.png)
8+
9+
但是服务器的响应是加密的:
10+
11+
![image-20250112222336009](./README.assets/image-20250112222336009.png)
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+
![image-20250112234427735](./README.assets/image-20250112234427735.png)
63+
64+
因为加密内容是在响应中的,所以我们只开启响应断点就可以了:
65+
66+
![image-20250112234852221](./README.assets/image-20250112234852221.png)
67+
68+
然后我们再单击页面上的发送请求的按钮,会发现自动进入了断点,而断点的位置,就是jsonp的callback函数内:
69+
70+
![image-20250112235145257](./README.assets/image-20250112235145257.png)
71+
72+
jsonp响应的内容放在变量encryptedResponse中,而这个变量被传递到了一个decryptData函数,看上去就是在解密,然后传递的第二个参数secretKey的值是写死的"my-secret-key",看上去就是一个秘钥之类的:
73+
74+
![image-20250112235229725](./README.assets/image-20250112235229725.png)
75+
76+
把鼠标放到decryptData上悬浮一会儿,跟进去函数的代码实现:
77+
78+
![image-20250112235445200](./README.assets/image-20250112235445200.png)
79+
80+
然后直接就看到了加密数据的解密逻辑,其实就是一个DES解密:
81+
82+
![image-20250112235545550](./README.assets/image-20250112235545550.png)
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

Comments
 (0)