Python-模板注入

本文介绍了模板注入的概念,通过Flask框架深入讲解了模板注入的原理,包括Flask的基础知识、渲染方法以及如何引发XSS。文章详细展示了存在模板注入漏洞的代码,并给出了利用 SSTI 的多种方法,如调用 `os` 模块读写文件。同时,文章提供了一个CTF题目实例,演示了如何利用模板注入获取服务器信息。
摘要由CSDN通过智能技术生成

何为模板注入?

模板引擎可以让(网站)程序实现界面与数据分离,业务代码与逻辑代码的分离,哲大大提升了开发效率,良好的设计也是的代码重用变得更加容易。

到那时模板引擎也拓宽了我们的攻击面,注入到模板中的代码可能会引发RCE或者XSS

 

flask基础

在学习SSTI之前,先把flask的运作流程搞明白,这样有利于更加快速的理解原理

路由

先看一段代码

from flask import flask



@app.route('/index/')

def hello_word():

return 'hello world'

route装饰器的作用是将函数与url绑定起来。例子中的代码的作用就是当你访问http:127.0.0.1:5000/index的时候,flask会返回hello world

渲染方法

flask的渲染方法有render_template和render_template_string两种。

render_template()是用来渲染一个指定文件的。使用如下

return render_template('indexhtml')

render_template_string则是用来渲染一个字符串的。SSTI与这个方法密不可分

使用方法如下

html='<h1>This is index page</h1>'

return render_template_string(html)

模板

flask时使用Jinja2来作为渲染引擎的。看例子

在网站的根目录下新建templates文件夹,这里是用来存放html文件。也就是模板文件。

test.py



from flask import Flask,url_for,redirect,render_template,render_template_string

@app.route('/index/')

def user_login():

return render_template('index.html')



/templates/index.html



<h1>This is index page</h1>

访问127.0.0.1:5000/index/的时候,flask就会渲染出index.html的页面。

模板文件并不是单纯的html代码,而是夹杂着模板的语法,因为页面不可能都是一个样子的,有一些地方是会变化的。比如说显示用户名的地方,这个时候就需要使用模板支持的

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值