[HCTF 2018]admin

在这里插入图片描述
随便点点,发现存在登录、注册、修改密码等功能。注册后进入修改密码界面查看源码,
在这里插入图片描述
是个flask框架。flask是个非常轻量级的框架,可能会运行在没有文件系统管理和数据库的环境之下,因此会无法避免的出现客户端session的问题。

基于客户端session的解

P神关于客户端session漏洞的博客

在传统PHP开发中,$_SESSION变量的内容默认会被保存在服务端的一个文件中,通过一个叫“PHPSESSID”的Cookie来区分用户。这类session是“服务端session”,用户看到的只是session的名称(一个随机字符串),其内容保存在服务端。
然而,并不是所有语言都有默认的session存储机制,也不是任何情况下我们都可以向服务器写入文件。所以,很多Web框架都会另辟蹊径,比如Django默认将session存储在数据库中,而对于flask这里并不包含数据库操作的框架,就只能将session存储在cookie中。
因为cookie实际上是存储在客户端(浏览器)中的,所以称之为“客户端session”

所以我们这里可以造出admin的cookie来实现一个登录。附上p神的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()))

解出session内容。
在这里插入图片描述
构造所需admin的session我们还需要secret-key,在config.py中有提示:
在这里插入图片描述
而在index.php中,提示说session的name=admin时,即输出flag。
在这里插入图片描述
flask加解密脚本来加密构造session。
在这里插入图片描述
输入后登陆成功。
在这里插入图片描述

基于unicode编码的解

出题人文章这是预期解,目的在于考察关于unicode的安全问题。
在登录和修改密码时,进行了两次改小写操作。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试中发现如下问题:在这里插入图片描述
也就是说只要我们用类似ᴬᴰᴹᴵᴺ编码的账号,进行登录,在修改密码,我们就可以让该账户变为admin。最后拿到flag。

参考文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值