本人初學SSTI,知識很有限,只能以新手的角度解析這道題
解題步驟
1.打開題目鏈接, 出現以下頁面
提示需要傳入一個名為flag的參數,題目又叫SSTI,從而得到了可以使用模板注入的基本條件
2.根據經驗,一般secret-key中存在有價值的東西,或者說在config中,從而構建url:http://114.67.246.176:18558/?flag={{config}}
得到如下頁面
看到secret_key中存在着flag
如果理解了題目的含義,那么也可以構建如下url:http://114.67.246.176:18558/?flag={{config.SECRET_KEY}}
從而直接獲取config里面secret_key變量的值,也就是flag
總結:這是一個關於python和jinja 2的極為基礎的ssti模板注入題目,只需要了解基礎的jinja語法和網頁頁面渲染方式。就是通常用戶需要提交一個姓名到網頁,然后這個網頁就會出現你每次訪問,出現hello,某某某的效果。而如果有ssti的漏洞,那么我們在提交姓名時,提交一個惡意代碼,在這里是jinjia 2引擎,我們提交一個jinjia2語句,然后jinjia2引擎就會渲染解析這個語句,而jinjia 2語句里面又會套用python語句,總而言之利用這些語句我們可以查看敏感信息,代碼執行或者getshell。根據經驗,我們一般會查看config信息,在這個題目中告訴了我們flag是可以傳入的ssti模板注入點,利用它獲取config信息,而網頁源碼也有提示是在secretkey處有貓膩。類似於xss的代碼執行,由於我們在url中傳入的參數flag的值為一個jinjia 2語句{{ }},這是一個變量語句,其中有函數config,通過網頁的二次渲染執行了這個語句,從而得到了想要的信息
彩蛋:我們一般也會查看網頁源代碼,可以看到以下提示
他告訴了你是flask模板,同時一般會設置一個secret_key這樣一個變量