网鼎杯第三场 mmmmy writeup
文章目录
只给了一个登录,任意用户名和密码都可以登录, admin
账号会提示 nononono
任意账号登录后发现有个留言系统,点击后提示只有 admin
用户才可以进行留言 ( 这里一开始还以为是XSS Orz
思考怎么拿到admin这个账号的登录权限,因为没有注册,登录处也没有可攻击的地方,后来查看cookie的时候发现有个 token
的键值,又是 JWT,但是这个和 i_am_admin
不一样的是没有地方可以得到 secret
,于是尝试爆破,得到secret为6a423
然后伪造身份成为admin
点开留言功能后突然就有点懵逼了,这不像是一个正常的留言系统。 但是发现输入的东西都会原原本本地打印在页面上,于是猜测这是一个SSTI
测试后发现过滤了很多东西,比如'
,"
,os
,_
,{{
只要出现了这些关键字,直接就打印None,太狠了
这里过滤了 {{
,其实还可以使用 {%
,比如 {% if 1 %}1{%endif%}
,会打印1
然后来思考一下需要绕过的地方,首先 __
被过滤,我们可以考虑使用 []
结合 request
来进行绕过,比如 {% if ()[request.args.a]%}
,url中 /bbs?a=__class__
很快能构造出来一个读取flag的payload,
|
|
很快也能发现GG了,因为报500错误,这里考虑是没有chr这个函数,那么如法炮制获取chr函数
|
|
这时就可以开始愉快的盲注了
其实还有一种更简单的方法,不需要盲注,直接明文,使用jinja2里的print
直接就打印flag了 Orz