[HCTF 2018]admin
进入页面可以看见左边有选项,发现一共有两个选项:
根据常识,没注册肯定不能登录,因此我们随便注册一个账号:123456789,
然后注册,跟着提示继续登录,页面发生变化:
看左边选项框,这次变成了四个选项:index、post、change password、logout,意思分别是索引、发送、改密码、注销。
点击发送看看:
这里啥也没有,因此卡住了。
开始抄大佬作业了。
第一种解法
flask session伪造。
首先介绍一些什么是flask session伪造:
flask的session是存储在客户端cookie中的,而且flask仅仅对数据进行了签名。众所周知的是,签名的作用是防篡改,而无法防止被读取。而flask并没有提供加密操作,所以其session的全部内容都是可以在客户端读取的,将session存储在cookie中,这就可能造成一些安全问题。
利用方式:
我们可以用python脚本把flask的session解密出来,但是如果想要加密伪造生成我们自己的session的话,还需要知道flask用来签名的SECRET_KEY
点开改密码的页面,看看源码,发现了:
这是这个题的源代码因此下载下来看一看,看 网上大佬说的用pycharm或其他打开,审计代码,先看路由(route),每一个.py文件一个一个审计。最后在templates中找到index.html里有线索:
current_user.is_authenticated函数:在模板渲染时,会先判断当前用户的登录状态( current_user.is_authenticated )。 如果用户没有登录( current_user.is_authenticated 返回 False ),就不会渲染表单部分的 HTML 代码,即上面代码块中 {% if… %} 和 {% endif %} 之间的代码。
因此这里需要让session[‘name’] == ‘admin’
而通过对flask的了解,我们可以得知,在知道secret_key的情况下,我们可以对签名进行伪造。
此处参考文章:https://www.leavesongs.com/PENETRATION/client-session-security.html
而通过f12可以得知session的值:
这里找到网上大佬的解密脚本:
#!/usr/bin/env python3
import sys
import zlib
from base64 import b64decode
from flask.sessions import session_json_serializer
from itsdangerous import base64_decode
def decryption(payload):
payload, sig = payload.rsplit(b'.', 1)
payload, timestamp = payload.rsplit(b'.', 1)
decompress = False
if payload.startswith(b'.'):
payload = payload[1:]
decompress = True
try:
payload = base64_decode(payload)
except Exception as e:
raise Exception('Could not base64 decode the payload because of '
'an exception')
if decompress:
try:
payload = zlib.decompress(payload)
except Exception as e:
raise Exception('Could not zlib decompress the payload before '
'decoding the payload')
return session_json_serializer.loads(payload)
if __name__ == '__main__':
print(decryption(sys.argv[1].encode()))
//注意要自己装好flask模块才能运行,又卡里一会儿
终于调试好可以运行了:
把name改成admin进行加密,加密脚本获取网上大佬的:mirrors / noraj / flask-session-cookie-manager · GitCode
使用格式如下:
得到加密后的session,修改session的值即可完成登录:
得到了最终答案:
flag{0f75975b-f96c-487f-87a9-6b48e3dfa2b3}
后两种解法太高级了看不懂先不看(bushi
参考文章:
https://www.cnblogs.com/chrysanthemum/p/11722351.html