探究Flask/Jinja2中的服务端模版注入(一)

访客6年前黑客资讯1295

假如你还没听说过SSTI(服务端模版注入),或许对其还不够了解,在此之前主张咱们去阅览一下James Kettle写的一篇文章。
作为一名专业的安全从事人员,咱们的作业便是协助企业安排进行危险决议计划。及时发现产品存在的要挟,缝隙对产品带来的影响是无法精确核算。作为一名常常运用Flask结构进行开发的人来说,James的研讨促进我下定决心去研讨在运用Flask/Jinja2结构进行运用开发时服务端模版注入的一些细节。
Setup
为了精确评价Flask/Jinja2中存在的SSTI,现在咱们就树立一个PoC运用:
@app.errorhandler(404)
def page_not_found(e):
    template = '''{%% extends "layout.html" %%}
{%% block body %%}
   
        Oops! That page doesn't exist.
        %s
   
{%% endblock %%}
''' % (request.url)
    return render_template_string(template), 404
这段代码的背面场景应该是开发者愚笨的以为这个404页面有一个独自的模版文件, 所以他在404 view函数中创建了一个模版字符串。这个开发者期望假如发作过错,就将该URL反馈给用户;但却不是经由render_template_string函数将URL传递给模版上下文,该开发者挑选运用字符串格式化将URL动态增加到模版字符串中,这么做没错对吧? *** ,这还不算我见过最糟糕的。
运转该功用,咱们应该能够看到以下预期作用

大多数朋友看到以下发作的行为马上就会在脑子中想到XSS,当然他们的主意是正确的。在URL后边增加alert(42)会触发一个XSS缝隙。

方针代码存在XSS缝隙,而且假如你阅览James的文章之后就会知道,他曾明确指出XSS极有可能是存在SSTI的一个要素,这便是一个很棒的比方。可是咱们经过在URL后边增加{{ 7+7 }}在深化的去了解下。咱们看到模版引擎将数学表达式的值现已核算出来

在方针运用中咱们现已发现SSTI的踪影了。
Analysis
接下来有得咱们忙的了,下一步咱们便深化模版上下文并探寻进犯者会怎么经过SSTI缝隙进犯该运用程序。以下为咱们修正往后的存在缝隙的view函数:
@app.errorhandler(404)
def page_not_found(e):
    template = '''{%% extends "layout.html" %%}
{%% block body %%}
   
        Oops! That page doesn't exist.
        %s
   
{%% endblock %%}
''' % (request.url)
    return render_template_string(template,
        dir=dir,
        help=help,
        locals=locals,
    ), 404
调用的render_template_string现在包括dir, help, locals 内置模版,将他们增加到模板上下文咱们便能够经过该缝隙运用这些内置模板进行内省。
时间短的暂停,咱们来谈谈文档中关于模板上下文的描述。
Jinja globals
Flask template globals
由开发者增加的素材资料
咱们最关怀的是之一条和第二条,由于他们通常情况下都是默认值,Flask/Jinja2结构下存在SSTI缝隙运用中的任何地方都能够进行运用。第三条取决于运用程序而且完成的办法太多,stackoverflow评论中就有几种办法。在本文中咱们不会对第三条进行深化探讨,可是在对Flask/Jinja2结构的运用进行静态源代码剖析的时分仍是很值得考虑的。
为了持续内省,咱们应该:
阅览文档
运用dir内省locals目标来检查一切能够运用的模板上下文
运用dir和help.深化一切目标
剖析感兴趣的Python源代码(究竟结构都是开源的)
Results
经过内省request目标咱们收集到之一个愿望中的玩具,request是Flask模版的一个大局目标,其代表“当时恳求目标(flask.request)”,在视图中拜访request目标你能看到许多你等待的信息。在request 目标中有一个environ目标名。request.environ目标是一个与服务器环境相关的目标字典,字典中一个名为shutdown_server的办法名分配的键为werkzeug.server.shutdown,那么咱们能够猜猜打针{{ request.environ['werkzeug.server.shutdown']() }}在服务端会做些什么?一个影响极低的拒绝服务,运用gunicorn运转运用程序这个办法的作用便消失,所以该缝隙局限性仍是挺大的。
咱们的第二个发现来自于内省config目标,config也是Flask模版中的一个大局目标,它代表“当时装备目标(flask.config)”,它是一个类字典的目标,它包括了一切运用程序的装备值。在大多数情况下,它包括了比方数据库链接字符串,连接到第三方的凭据,SECRET_KEY等灵敏值。检查这些装备项目,只需注入{{ config.items() }}有效载荷。

[1] [2] [3] [4]  黑客接单网

相关文章

高校SQL注入防治扼要计划

 1、避免SQL注入的动机 近来教育职业的信息安全问题真是一波未平一波又起:连续发作多个高校网站体系被更改,影响恶劣;高校密布被爆SQL注入缝隙,触及80%以上的高校;教育职业成为电信欺诈的重灾区,据...

操控流程完整性:给我们介绍一种“特殊”的Javascript反剖析技能

写在前面的话 了解歹意软件的实在代码对歹意软件剖析人员来说对错常有优势的,由于这样才干够实在了解歹意软件所要做的工作。但不幸的是,咱们并不总是能够得到“实在”的代码,有时歹意软件剖析人员或许需求相似...

xHunt:针对科威特航运组织的攻击行动-黑客接单平台

2019年5月至6月,unit42安全团队在一起针对科威特航运业的进犯事情中,检测到了一个新后门东西——Hisoka,它的作用是下载几个的定制东西进行后缝隙运用,一切东西好像都由同一个开发人员创立,最...

登录框之特殊考虑:来自客户端的诈骗

0×01 前语 前几天刚见人发了一个登录框引发的血案,而惯例的爆炸有风控和各种反常验证码,或许大型的电商都会用SSO完成登录,密码找回逻辑看似天衣无缝,又或许选用第三方的Oauth授权。往往这些惯例的...

ARM架构上用来替代JTAG的调试协议SWD-黑客接单平台

关于嵌入式开发人员和专门进犯硬件的黑客来说,JTAG 实践上是调试和拜访微处理器寄存器的标准。该协议已运用多年,至今仍在运用,JTAG调试接口有必要运用VCC、GND电源信号,以及TMS、TCK、TD...