CTF-BUUCTF-Web-[HCTF 2018]admin

CTF-BUUCTF-Web-[HCTF 2018]admin

题目:

在这里插入图片描述

先熟悉下网站,有这些功能:注册、登录、上传文章、修改密码、登出、无法注册admin。

得到的两个提示:

解题:

GitHub上down源码

在这里插入图片描述
妈妈桑,python学了点毛!

从文件结构和routers.py中都可以看到调用了模板,打开一看,很熟悉的东西出来了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KPM5sZMb-1577789487570)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191231171823059.png)]

能够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…,不会搞

不信邪了

换另一条路,继续审计代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wn6XiPsY-1577789487571)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191231184745817.png)]

发现有个转小写的函数

意思说是不是可以用大写ADMIN注册,然后ADMIN --> admin

试一下

在这里插入图片描述

OK了!!!

发布了40 篇原创文章 · 获赞 2 · 访问量 2410

猜你喜欢

转载自blog.csdn.net/qq_42404383/article/details/103787673