CTFbugku中有几道SSTI的题目,之前没接触过,借放假的时间系统的学学,加油!
-
一个Hello world,了解一下语法先
from flask import Flask # 导入模块
app = Flask(__name__) # 创建视图函数
@app.route('/') # 设置装饰器路由,也就是设置访问目录
def index():
return 'Hello world' # 设置页面返回值
if __name__ == '__main__':
app.run() # 启动函数
-
定义参数的格式,也可以定义python中常用的其他类型(str...)
from flask import Flask
app = Flask(__name__)
@app.route('/users/<int:user_id>') # /users/是定位访问的路径,int是参数类型只能是int
def url_info(user_id):
print(user_id)
return 'Hello world {}'.format(user_id)
if __name__ == '__main__':
app.run()
-
设置用变量的形式访问
from flask import Flask,request
app = Flask(__name__)
@app.route('/users/')
def get_users():
id = request.args.get('id')
return 'user id :{}'.format(id)
if __name__ == '__main__':
app.run()
.写个页面
<!DOCTYPE html>
<html>
<head>
<title>1111</title>
<meta charset="utf-8"></meta>
</head>
<body>
我的模板
<br>{{key}}
</body>
</html>
from flask import Flask,request,render_template
app = Flask(__name__)
@app.route('/')
def home():
key = request.args.get('key')
return render_template('index.html',key=key)
if __name__ == '__main__':
app.run()
-
试试key={{1-1}},并没有出现别人说的那样会进行运算,查了查资料发现是因为render_template函数自动渲染了对应的内容,只有render_template_string函数才会有再次渲染的问题出现,现实中开发几乎已经很少用这个render_template_string函数了,但是CTF中常见,试试就知道了
from flask import Flask, request, render_template_string
app = Flask(__name__)
@app.route('/')
def home():
key = request.args.get('key')
a = '''
<!DOCTYPE html>
<html>
<head>
<title>1111</title>
<meta charset="utf-8"></meta>
</head>
<body>
我的模板
<br>{}
</body>
</html>
'''.format(key)
return render_template_string(a) # 换为该函数
if __name__ == '__main__':
app.run()