没时间而且太菜了,week2差了两道题没写qwq
[Week2]自助查询
[Week2]登录验证
考点 `JWT(JSON Web Token)`思路: 爆破私钥 / none攻击
JWT</font>
由三部分组成,分别是Header</font>
、Payload</font>
和Signature</font>
该三部分均为Base64Url</font>
编码
拓展,JWT
不是base64
编码,而是BASE64URL
编码
BASE64URL
编码的流程:先base
编码,再去除尾部=,把”+”替换成”-“ ,把”/“替换成”_”
随手一输admin/admin
提示 你不是真正的admin 看数据包发现
token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjkxNDA4MjIsImlhdCI6MTcyOTEzMzYyMiwibmJmIjoxNzI5MTMzNjIyLCJyb2xlIjoidXNlciJ9.gR1jjFXhYj2uah0JKPogKlq5nK_AJbeadaVx9OhAVg0
疑似JWT
拿到jwt.io
解一下
很好,是HS256对称加密(RS256 ES256 都是非对称加密)一旦我们拿到密钥,就可以伪造签名了
下面进行密钥爆破
成功得到key 下面进行伪造
即可
[Week2]guess_the_number
F12查看到`/s0urce`路由,下载源码`app.py`1 | import flask |
发现是一个猜数字的问题,必须让第一个数等于第二个数,涉及伪随机数问题,由于没学过于是开始疯狂学习
random</font>
是python的一个随机数库,可用于生成伪随机数
random.random()</font>
随机生成一个0到1之前的浮点数
1 | import random |
random.randint(1,100)</font>
随机生成一个1到100之间的整数
1 | import random |
设置随机数种子random.seed(10)
1 | import random |
一旦随机数种子被确认,那么输出的随机数 生成序列 也就确认了,我们可以根据随机数种子,推出生成的随机数是什么
在伪随机数生成器(PRNG)中,一个种子并不只生成一个随机数。相反,它生成的是一个伪随机数序列。每次调用
random.randint()
或其他类似方法时,伪随机数生成器会根据当前的内部状态生成下一个随机数。因此,给定相同的种子,可以生成一系列相同的随机数
问题是,尽管不同的种子输出的生成序列不同,但是不同的种子可能输出的第一个值相同,但是这种可能性比较小
综上,现在我们已知种子的范围,只需要写一个程序爆破即可
1 | import random |
找到了种子1364726
1 | import random |
得到结果8239362449
参考资料
https://research.qianxin.com/archives/1357
https://github.com/MisakiKata/python_code_audit/blob/master/%E4%BC%AA%E9%9A%8F%E6%9C%BA%E6%95%B0.md
[Week2]入侵者禁入
知识点:Python Flask Session伪造+Ssti模板注入现在我们获取了secret_key
下面使用工具进行伪造
[https://github.com/noraj/flask-session-cookie-manager](https://github.com/noraj/flask-session-cookie-manager)
总结
自己三方面的能力不足- 知识面、技术栈太局限,应该拓展一下,了解更多的漏洞(ssti、sqli)
- 编写脚本的能力、开发能力不足,线下不出网环境就寄了
- 完善武器库