[DSBCTF 2024]ezzz_ssti¶
这题是一道标准的 flask ssti, 参数为 get user
。传入 {{7*'7'}}
可验证,并检验得到没有过滤。但是发现了一个问题,就是有长度限制 40 位。即使我们使用比较短的 lipsum.__globals__.os.popen('ls').read()
也过不了。
这题当时没做出来,搜索资料也没搜到。但是其实只要搜 "ssti 长度限制" 就可以了。原理是这样的:首先 config
作为 flask 的一个字典变量,存储了一些 flask 运行的配置。但是在单次运行的 flask 实例中,config
是可保存的,所以可以把我们的信息存储在这里,利用 config.update()
方法即可。
因此,首先我们先把 update()
方法写入 config
中,用来省几个字符:
然后我们可以通过 {{config}}
来查看有没有写入成功。这里是可以看到写入成功了的。所以我们就利用 config.a
来更新 config
字典。我们把之前的 payload 拆解一下写入变量就行,先把 os 模块获得:
然后,我们就可以执行 popen 了:
文章热度:0次阅读