[WesternCTF2018]shrine

[WesternCTF2018]shrine

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)

flask引擎-jinja2模板注入

利用tplmap这个工具进行检测是否有模板注入漏洞

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZEXLJHkq-1588052755103)(C:\Users\honor\AppData\Roaming\Typora\typora-user-images\1588051929946.png)]

Automatic Server-Side Template Injection Detection and Expleion tool [checks] Tested parameters appear to be not injectable
翻译:
服务器端模板自动注入检测和删除离子工具!][检查经过测试的参数似乎无法注入

模板渲染接受的参数需要用两个大括号括起来{{}}

模板注入也在大括号里构造

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1p10nrIi-1588052731868)(C:\Users\honor\AppData\Roaming\Typora\typora-user-images\1588052033551.png)]

在shrine路径下 ssti注入能运行

回头看下源码

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

注册了一个名为FLAG的config,猜测这就是flag,

如果没有过滤可以直接{{config}}即可查看所有app.config内容

推测{{config}}可查看所有app.config内容,但是这题设了黑名单[‘config’,‘self’]并且过滤了括号

不过python还有一些内置函数,比如url_for和get_flashed_messages

/shrine/{{url_for.globals}}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JuZplCkN-1588052731869)(C:\Users\honor\AppData\Roaming\Typora\typora-user-images\1588052314046.png)]

current_app-当前app,查看当下app中的config

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VMnUNcw0-1588052731876)(C:\Users\honor\AppData\Roaming\Typora\typora-user-images\1588052397235.png)]

得到flag

知识点:

SSTI模板注入:

模板注入涉及的是服务端Web应用使用模板引擎渲染用户请求的过程

服务端把用户输入的内容渲染成模板就可能造成SSTI(Server-Side Template Injection)

引擎有不同的测试以及注入方式:

flask/jinja2模板注入

PHP/模版引擎Twig注入

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值