1.解题过程
题目意思:你需要传为flag的参数
先查看源代码,得到提示
在flask中,设置了一个secret_key变量
使用模板变量进行渗透 :{{}}是模板变量的用法。在模板中,想要展示视图向模板渲染的变量,需要使用{{变量}}进行接收。
尝试输入flag={{6+6}},得到部分信息
最后url+?flag={{config}}得到flag
在模板中,config通常指的是配置文件。这些文件包含了程序运行所需的设置和参数,使得程序可以根据配置文件的内容进行适应性调整。
这是标准做法:
?flag={{''.__class__.__base__.__subclasses__()[127].__init__.__globals__['popen']('echo $FLAG').read()}}
- ‘’.class:这部分获取了一个空字符串的类。
- .base:这部分获取了该类的基类,对于空字符串来说,它的基类是object。
- .subclasses():这部分返回了object类的所有直接子类。
- [127]:这部分试图访问子类列表的第128个元素(因为Python的索引是从0开始的),但这个索引超出了列表的长度,所以会抛出一个IndexError。
- .init:这部分试图访问某个类的初始化方法,但前面提到的子类列表访问是错误的,所以这一步也是错误的。
- .globals[‘popen’](‘echo FLAG′).read():这部分首先尝试访问当前对象的全局符号表(字典),然后试图在其中查找popen键,并执行其对应的值(一个命令)。这个命令是echoFLAG,它会输出环境变量FLAG的值。最后,.read()方法读取命令的输出。
2.知识点补充(SST模块注入)
1.定义:
SSTI即服务器端模板注入(Server-Side Template Injection),是一种注入漏洞。 服务端接收了用户的恶意输入以后,未经任何处理就将其作为Web应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执行了用户插入的可以破坏模板的语句,因而可能导致了敏感信息泄露、代码执行、GetShell等问题。(简单来说,服务器与数据库未相联系,找到漏洞后可以控制,破坏web模版)
2.攻击类型
- 代码执行:攻击者可以通过SSTI注入在服务器端执行任意代码,包括命令执行、远程文件包含等攻击。这可能导致服务器被完全控制,进一步导致数据泄漏、服务器崩溃或恶意操作。
- 敏感信息泄露:攻击者可以通过SSTI注入获取服务器上的敏感信息,如数据库连接字符串、API密钥等。这可能导致用户数据泄露、系统被入侵或身份盗窃等问题。
- 垂直和横向越权:通过SSTI注入,攻击者可能访问到非授权的数据或功能,实施垂直或横向越权行为。这可能导致用户权限被提升、重要数据被访问或其他合法用户遭受影响。
-
DoS攻击:攻击者可以通过SSTI注入导致服务器负载过高,从而拒绝服务,使网站或应用程序无法正常运行。(来自于百度)