进入题目
发现一个超链接、
右键检查
发现/read?url路径猜测后端语言不是php是python
点击超链接跳转到百度猜测存在ssrf漏洞
访问/etc/passwd成功
尝试访问/app/app.py源码成功
encoding:utf-8 import re, random, uuid, urllib from flask import Flask, session, request app = Flask(name) random.seed(uuid.getnode()) app.config['SECRET_KEY'] = str(random.random()233) app.debug = True @app.route('/') def index(): session['username'] = 'www-data' return 'Hello World! Read somethings' @app.route('/read') def read(): try: url = request.args.get('url') m = re.findall('^file.', url, re.IGNORECASE) n = re.findall('flag', url, re.IGNORECASE) if m or n: return 'No Hack' res = urllib.urlopen(url) return res.read() except Exception as ex: print str(ex) return 'no response' @app.route('/flag') def flag(): if session and session['username'] == 'fuck': return open('/flag.txt').read() else: return 'Access denied' if name=='main': app.run( debug=True, host="0.0.0.0" )
查看师傅解读
要访问/flag,用户为fuck且有session 抓包
发现jwt格式的session
解密
查看源码,看师傅解读
对于伪随机数,如果seed是固定的,生成的随机数是可以预测的,也就是顺序固定的,所以只要知道seed的值即可。这里的seed使用的uuid.getnode()的值,该函数用于获取Mac地址并将其转换为整数。
那么就需要读取Mac地址local_file:///sys/class/net/eth0/address
得到Mac地址:0xa275cf685e40
然后使用Python2得出**(Python2和Python3保留的位数不一样)
130.950614643
用flask_session_cookie_manager3.py工具
替换session
得到flag
标签:return,url,赛区,app,read,flag,session,Web4,CISCN2019 From: https://www.cnblogs.com/v3n0m-cccccc/p/18288451