SSTI学习

SSTI

Server Side Template Injection(服务端模板注入)

1
2
3
4
5
6
7
8
9
10
11
from flask import Flask, request
from jinja2 import Template
app = Flask(__name__)
@app.route("/")
def index():
name = request.args.get('name', 'guest')
t = Template("Hello " + name)
return t.render()
if __name__ == "__main__":
app.run()

跑起来:

1565317993352

测试payload:

1
<http://127.0.0.1:5000/?name=guest.{{(9999-1111)}}>

1565318070006

1
http://127.0.0.1:5000/?name=guest.{{'aaa'.upper()}}

1565318480330

问题代码:

1
2
t = Template("Hello " + name)
return t.render()

我们把断点打在return

1565319294852

第一个跟进到的是asyncsupport.py

self变量中我们看到其实注入poc已经解析完成了{{9999-1111}}

1565319402700

因此我们跟进前面的

1565319555163

问题出在t = Template("Hello " + guest):

其将"Hello " + guest传入jinja2.Template并解析输出Hello guest.8888再使用render方法渲染

本文标题:SSTI学习

文章作者:

发布时间:2019年10月19日 - 19:37:52

最后更新:2019年12月31日 - 14:10:40

原始链接:http://laker.xyz/2019/10/19/SSTI%E5%AD%A6%E4%B9%A0/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。