我试图在我开发的一个简单的Flask web应用程序中获得RCE,它容易受到服务器端模板注入(SSTI)的影响。
RCE通常是通过在目标上上传反向shell脚本来获得的,由于有了file引用,所以可以使用object.__subclasses__()方法进行访问。
有效载荷的URL
http://0.0.0.0:5000/%7B%7B''.__class__.__mro__[1].__subclasses__()%7D%7D<#>分解
{{''.__class__}} =>
{{''.__class__.__mro__}} => (, )
{{''.__class__.__mro__[1]}} =>
{{''.__class__.__mro__[1].__subclasses__()}} => [, , , , ...Response页面
Oops! That page doesn't exist.
http://0.0.0.0:5000/[, , , , , , , ...不幸的是,在我得到的输出中,没有任何file引用,所以我无法上传反向shell。
我遗漏了什么?
发布于 2019-04-25 16:01:58
经过进一步的研究,我想我知道了原因。在我最初的文章中,似乎最新版本的Python不容易受到简要解释的度量的影响。
我作为目标使用的Flask应用程序确实在一个Docker容器中运行,安装了最新版本的Python。
检查它的一个简单方法是:
Python 2.7.10
>>> object.__subclasses__()
[, ,..., , ...]Python 3.7.1
>>> object.__subclasses__()
[, , ... ] # no or https://security.stackexchange.com/questions/208957
复制相似问题