[CISCN2019 华东南赛区]Web4
进入题目

发现一个超链接、
右键检查

发现/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

                
            
        
浙公网安备 33010602011771号