护网杯2018 easy_tornado

[护网杯 2018]easy_tornado

半实况记录

进题:

image-20200318180736868

分别进入三个连接看一眼:

image-20200318180809797

image-20200318181402343

image-20200318181414192

大概情况如此。

因为没感受到什么,所以我用burp跑了一下看看响应头。

image-20200318181529080

现在我有几个问题:

  1. Etag是什么?
  2. 这几个连接后面的filehash是什么?
  3. 题目里的torando是什么意思
  4. cookie_secret是什么

尝试了一下如果不用filehash访问文件,页面返回Error。如此我有个猜想:这题可能是让通过hints.txt的方法自己构造一个filehash,带上filehash访问flllllllllllag?

于是先访问一下fllllllllllllag,页面返回Error,再瞎访问一个不存在的文件,我是希望返回404的但还是输出Error。那我暂时不能确定我的猜想没问题。

我还是感觉我猜想可能是对的,但我先查资料收集一下信息:

  • torando是一款web服务器,python写的。
  • Etag全称Entity Tag,是服务端用来标识某资源状态的一个token,按我理解就是,资源不变的话Etag就不变。响应回来后客户端得到Etag,再次发起对该资源的请求时将Etag的值放入If-None-Match头中。服务端接到请求对比If-None-Match和当前服务端资源的Etag是否一致,如果一致说明客户端手中的资源跟现在服务器的资源一毛一样。就直接返回304状态节省资源。(304 Not Modified)。
  • cookie_secret是tronado中常用防止cookie伪造的方式。具体介绍见官网https://www.tornadoweb.org/en/stable/guide/security.html#cookies-and-secure-cookies

于是目标我大概清晰了,就是要通过hint中的方法构造出访问fllllllllllllag的filehash。

然而怎么获取cookie_secret啊。。

回到之前那个error页面,有个细节:

image-20200327212728193

想到了反射型xss,但显然反射型xss无法从服务端获取东西,于是想到了服务端脚本攻击。

搜索服务端脚本攻击,搜到了叫 服务端模板注入 的东西很符合当前这个状况,那么开始尝试。

payload: ?msg={{config}}

response: 500: Internal Server Error

payload: ?msg={{request}}

response:HTTPServerRequest(protocol='http', host='2eb12ecd-6a2b-4afb-a58f-51e7c0098218.node3.buuoj.cn', method='GET', uri='/error?msg={{request}}', version='HTTP/1.1', remote_ip='174.0.222.75')

继续尝试,发现过滤了__ [] ()

总之先上官网了解一下资料吧,看看cookie_secret到底在什么地方。

查阅文档

官网给出一个设置cookie_secret的例子:

class MainHandler(BaseHandler):
    @tornado.web.authenticated
    def get(self):
        name = tornado.escape.xhtml_escape(self.current_user)
        self.write("Hello, " + name)

settings = {
    "cookie_secret": "__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__",
    "login_url": "/login",
}
application = tornado.web.Application([
    (r"/", MainHandler),
    (r"/login", LoginHandler),
], **settings)

从上面代码可以看出这是一个简易的webapp,class MainHandler是一个处理流程,cookie_secret存在于一个配置对象中。下面的application目测这个webapp的入口。tornado.web.Application的第二个参数传入了这个settings,所以我继续搜索tornado.web.Application这个函数。

image-20200321120257374

↑根据经验这种application对象里一般会有配置信息,不过这个application不是刚才说的那个。

image-20200321120825703

这个大概是了,不过结合上面RequestHandler.application的描述,好像这个Application就是上面的application。tornado.web.Application包含一组RequestHandler,一个RequestHandler可以获取他所在的Application。

继续搜索:tornado.template — Flexible output generation

We provide the functions escape(), url_escape(), json_encode(), and squeeze() to all templates by default.

上述方法因为过滤了()符号不能使用,但发送payload:escape,页面返回:<function xhtml_escape at 0x7f678a6f6410>这让我觉得当前语句执行的Context就是tornado.template

回忆刚才输入request的时候,返回了 HTTPServerRequest 这个信息,仔细想了一下,request应该是一个变量,而HTTPServerRequest就是这个变量的类型。如果是这样,那么可以通过猜测变量名的方式得到application内容。

结果

没耐心继续翻了,看了一眼答案,目标paylaod是 handler.settings

说什么在tornado模板中,存在一些可以访问的快速对象,例如
{{ escape(handler.settings[“cookie”]) }}

我不是很懂。上官网搜了handler也并没有找到这个快速对象。

暂时认为就是明白了需要从RequestHandler.settings里获得cookie_secret,然后进行变量名猜测吧。

image-20200328114328642

通过’cookie_secret’: ‘239c888a-b473-4bb0-a3e3-444f5551ed2b’} 开始构造目标文件的hash:

3dc5df01f3eed6824433675e13680a10

结果:

image-20200328114523731

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇