JS逆向实战5--JWT TOKEN x_sign参数
什么是JWT
JWT(JSON WEB TOKEN):JSON网络令牌,JWT是一个轻便的安全跨平台传输格式,定义了一个紧凑的自包含的方式在不同实体之间安全传输信息(JSON格式)。它是在Web环境下两个实体之间传输数据的一项标准。实际上传输的就是一个字符串。广义上讲JWT是一个标准的名称;狭义上JWT指的就是用来传递的那个token字符串
JWT用来做什么?怎么来的?
由于http协议是无状态的,所以客户端每次访问都是新的请求。这样每次请求都需要验证身份,传统方式是用session+cookie来记录/传输用户信息,而JWT就是更安全方便的方式。它的特点就是简洁,紧凑和自包含,而且不占空间,传输速度快,而且有利于多端分离,接口的交互等等
JWT是一种Token规范,主要面向的还是登录、验证和授权方向,当然也可以用只来传递信息。一般都是存在header里,也可以存在cookie里。
爬虫
为什么要介绍jwt呢 因为这次本人爬取的网站就需要token headers里面传了一个x-sign的值
话不多说直接进行分析
抓包分析
由上图可以看到,这个包就是外面所需要的数据
然后看他的请求参数和请求头
由分析可知,我们可以看到 这有些变量是需要我们去伪装的 比如请求体里的时间戳
比如这个x-sign
寻找断点
因为这个headers加密 所以我们直接进入堆栈中找请求参数
我们通过翻页进入断点
由此可知这个确实是请求所需参数 但是x-sign还没由生成
我们不停的打断点 找到这个值
这个过程需要耐心
其实我们如果了解JWT 看到x-sign的值就应该敏感 直接搜JWT 就能搜到
然后再打几个断掉 找到加密参数的地方
分析参数
由上述图所知,我们需要传一个参数进去 ,其他值随笔伪装伪装即可
我们反推参数找到下面这段代码
我们看到这个值 可以确定 是用这个值然后通过md5加密 最后得到Headers的值的
python代码如下:
import hashlib
import time
import execjs
import requests
session = requests.session()
print(client_id)
# 生成node对象
node = execjs.get()
start_time = int(time.time())
end_time = int(time.time() - 365 * 24 * 3600)
ctx = node.compile(open(file="1.js", encoding="utf-8").read())
data1 = '{"pageNumber":2,"pageSize":25,"provinceId":0,"searchType":"TITLE","sourceTimeStart":' + str(
end_time) + ',"sourceTimeEnd":' + str(start_time) + '}'
data = f'/purchase/search{data1}'
print(data)
has_sub = hashlib.md5(data.encode('utf-8')).hexdigest()
sign = ctx.call("makeJwt", has_sub)
print(sign)
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
'x-sign': sign
}
response = session.post('post请求地址', headers=headers, data=data1)
print(response.text)
最新文章
- static修饰的静态内部类
- React-Native 给客户端来个「同音词模糊搜索」
- windows环境下,如何启动chromedriver
- javaSE文件的使用
- Win XP 如何禁用屏保
- 一个只需要点 「下一步」就完成监控 Windows
- HDU 5968 异或密码 【模拟】 2016年中国大学生程序设计竞赛(合肥)
- UVA 10198 Counting
- [core java学习笔记][第四章对象与类]
- url地址传参中文乱码处理
- CodeForces 652D Nested Segments
- C++实现动态顺序表
- console.table(),在控制台以表格形式输出对象
- 用ttBulkCp把excel中的数据导入到timesten数据库中
- PowerDesigner的Table视图同时显示Code和Name的方法[转发]
- OrbSLAM2采集点云数据
- URLSession
- [leetcode]Spiral Matrix II @ Python
- Python 核实文件是否存在的函数
- php获取微信用户信息(没测试过)
热门文章
- 在 Linux 中安装 MongoDB 的流程
- 我就获取个时间,机器就down了
- ABC 203 F - Weed (DP)
- 第五十七篇:webpack打包发布
- Linux虚拟机 RHEL8.0安装步骤
- Job And Schedule (V8R6C3)
- SQL语句中过滤条件放在on、where、having的区别和联系
- 关于“No loop matching the specified signature and casting was found for ufunc lstsq_n”问题的解决
- 深度剖析Istio共享代理新模式Ambient Mesh
- python推导式特殊用法