网页逆向-某hxzxx前端websocket逆向

https://www.hxzq.cn/index.php

访问这个url,抓包https://www.hxzq.cn/index.php?id=rzrq&cate=ywgg

可以看到响应中并没有公告里的数据

数据到哪里去了呢?首先考虑会不会是xhr请求,然后页面渲染呢?对于这个网页来说的话,不是

看到有一个websocket请求,请求将通信协议升级成websocket

1
2
3
4
5
6
7
8
9
10
11
12
13
14
GET wss://www.hxzq.cn/1ywuKELSO2ahQuWZ/pr/ltijkE3r4JaiBRIwpGryA7mxZbqq7ul6r0Kdyj_sDtQ%3D/b/ws/4gzbq19tge/7e03e518-fdb0-41d3-a4fc-c70b4857f23f HTTP/1.1
Host: www.hxzq.cn
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36
Upgrade: websocket
Origin: https://www.hxzq.cn
Sec-WebSocket-Version: 13
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9
Cookie: FW9uCWqlVzC22m1KfCMCjfvFHpRMsgt=7e03e518-fdb0-41d3-a4fc-c70b4857f23f; dGg2aCfMMK97Ro270mqBFu5qjC8TQbL2opnHvbEpM=ltijkE3r4JaiBRIwpGryA7mxZbqq7ul6r0Kdyj%2FsDtQ%3D; dGg2aCfMMK97Ro270mqBFu5qjC8TQbL2opnHvbEpM=ltijkE3r4JaiBRIwpGryA7mxZbqq7ul6r0Kdyj%2FsDtQ%3D; FW9uCWqlVzC22m1KfCMCjfvFHpRMsgt=7e03e518-fdb0-41d3-a4fc-c70b4857f23f
Sec-WebSocket-Key: Aj9SwvJlqUDIDx/uPJgQyg==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

这里的Sec-WebSocket-Key通常是随机生成的

websocket协议是一个长链接,什么意思呢?HTTP/S请求,可以理解成一次一结算,一个链接就对应一个返回的数据,但是websocket协议,是一个链接,只要这个链接不断开,可以返回多个数据,从控制台也可以看出来

对于这个网站,websocket返回的数据是没有加密的

websocket的发送数据用sendMessage,注册事件用onMessage事件

根据函数栈定位到sendMessage的地方

往下找找到onMessage函数,打上断点,可以看到断下来的时候,网页没有任何显示,这也说明在发送websocket请求之前,我们需要的数据是没有加载的

不断循环,可以看到不停的在这个地方断下来,可以加上条件断点,输入console.log(JSON.stringify(t.data)); false; ,第二个false相当于这个断点的条件永远返回false,也就是永远不会在这里断下来,相当于在断点的位置插入了一句JSON.stringify(t.data) 的代码

直接运行,可以看到控制台输出了很多数据

可以看到返回的数据中有#text的数据是我们需要的,而且是url编码,可以使用decodeURIComponent去解码

可以在条件断点处加上判断

1
let xxx =  JSON.stringify(t.data); if(xxx.indexOf("#text") !== -1) {console.log(decodeURIComponent(t.data[5]));} console.log(xxx); false;

然后可以在控制台看到解码之后的数据,也就是我们需要的文章标题,还有文章的url

如果前端返回的数据是加密的,就需要逆向js去解密了