CTF-BUUCTF-Web-[HCTF 2018]admin
题目:
先熟悉下网站,有这些功能:注册、登录、上传文章、修改密码、登出、无法注册admin。
得到的两个提示:
解题:
GitHub上down源码
妈妈桑,python学了点毛!
从文件结构和routers.py中都可以看到调用了模板,打开一看,很熟悉的东西出来了
能够admin登录即可拿到flag!!!
{% if current_user.is_authenticated and session['name'] == 'admin' %}
<h1 class="nav">hctf{xxxxxxxxx}</h1>
恶补:
flask:是一个使用 Python 编写的轻量级 Web 应用框架(牛批!)
session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。有关使用Session 对象的详细信息,请参阅“ASP应用程序”部分的“管理会话”。注意会话状态仅在支持cookie的浏览器中保留。
session的工作原理:
(1)当一个session第一次被启用时,一个独一的标识被存储于本地的cookie中。
(2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。
(3)当执行PHP脚本时,通过使用session_register()函数注册session变量。
(4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。
next,伪造session
登录时和服务器有交互,拿到session,然后修改
shit!真烦人,大佬提供的session加解密的python脚本:
https://github.com/noraj/flask-session-cookie-manager
python还在学,so…,不会搞
不信邪了
换另一条路,继续审计代码:
发现有个转小写的函数
意思说是不是可以用大写ADMIN注册,然后ADMIN --> admin
试一下
OK了!!!