flask session伪造

通过CTF题目进行学习

首先打开题目,查看源代码发下如下注(提)释(示)

v2-86fd508e879f1f18763ad08d8bea7bd2_b.jpg

看到这个,有经验的大佬们估计可以猜到,八成这题就是要伪造admin登录

习惯性尝试一波弱口令,

admin/admin

admin/123456

结果肯定是失败的,随便注册一个账号登录

v2-24dd5e5c56baed58efead2e5e23d5ff8_b.jpg

登录,查看页面的功能及源代码,是否存在提示

在change页面发现源代码地址

看到flask,在根据之前的注释,想到考点应该是flask cookie伪造

v2-494fde836e2c86364127f5da03f46d26_b.jpg

通过F12大法,得到当前test用户的session

v2-55b0d1bc8392ec1f5035f37bbf46b3c7_b.jpg

通过python的解密脚本进行解密

这里有两个脚本

解密使用一下脚本

#!/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("session填在此处后保存,运行脚本".encode()))

v2-9a90bb5427919c7f26ecea24ebebc847_b.png

得到 解密后的脚本之后,想要伪造成admin用户或者说 是其他用户,

需要一个SECRET_KEY,也就是秘钥,这个我们通过上面得到的源代码去寻找,

在config.py中得到key,即ckj123

v2-84a99fdcc6311d4cfd837efb98b0f4e7_b.jpg

在index代码中发现 得到flag的关键信息

需要name == admin

v2-3dcc8443b9d8ece8612333a32f89b675_b.jpg

我们将解密的session中的 'name': 'test' 修改为 'name': 'admin'

然后将session进行加密

v2-b5bfba1b2c900d794153a73fb75930a1_b.png

加密 脚本使用如下脚本GitHub - noraj/flask-session-cookie-manager: Flask Session Cookie Decoder/Encoder

加密 脚本使用如下脚本

github.com/noraj/flask-

这个脚本可以加密也可以解密,为什么不直接用这个脚本 进行解密,而是要用 上面的脚本来解密。原因如下图

正常解密没问题 ,关键就是解密后的内容没啥问题,但是它自己都无法加密,,

v2-c5148f6a06bba25db6e4faa7d23dbae6_b.jpg


接着上面,我们加密得到伪造后的cookie,通过 burp抓包,

v2-e96ab2980fc58bae5bf96242de01ef3e_b.jpg

v2-dc82ea71acc28402b3805588c19adc45_b.jpg


flask 伪造session最重要的是获得SECRET_KEY

可以通过但不限于文件包含,源代码泄露,命令执行 ,代码执行等多种 方式获得,从而达到伪造高权限 用户,从而getshell


当然这道题还有其他 解法,但是在这里就不讲了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SwBack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值