前言
在BUUCTF上看到这题存在三种解法,感觉比较经典,就想着来复现一下顺便学习一波。存在以下三种解法:
- flask session 伪造
- unicode欺骗
- 条件竞争
审题
拿到题目发现一共就登录注册两个功能,随便注册一个test/test用户

登录之后查看源码发现提示<!-- you are not admin -->,根据提示和题目名估计要让我们登录admin用户就可以得到flag。

在change password页面查看源码,发现提供了题目的源码地址
<!-- https://github.com/woadsl1234/hctf_flask/ -->
发现是用flask写的,我们就直接去看一下路由
@app.route('/code')
def get_code():
@app.route('/index')
def index():
@app.route('/register', methods = ['GET', 'POST'])
def register():
@app.route('/login', methods = ['GET', 'POST'])
def login():
@app.route('/logout')
def logout():
@app.route('/change', methods = ['GET', 'POST'])
def change():
@app.route('/edit', methods = ['GET'

本文介绍了HCTF2018中的一道题目,涉及三种解题方法:flask session伪造、Unicode欺骗和条件竞争。在flask session伪造中,通过获取SECRET_KEY并使用特定脚本伪造session以登录admin账户;Unicode欺骗则利用strlower函数的nodeprep.prepare漏洞,注册特定用户名并改变admin密码;条件竞争漏洞理论上能通过并发操作修改admin密码,但在实际测试中未成功。
最低0.47元/天 解锁文章
1646





