提示
- ssti模板注入
- head頭x-forwarded-for
每一次做題的最開始流程都大致因該是
- 信息收集
- 找可以操控的地方
查看hint頁面的源代碼又發現它提示說
####你知道為什么會知道你的ip嗎
查看flag頁面
從剛才給我的提示以及他這里顯示的我的ip,大概找到了我可操作的可控點
既然它會讀取我訪問它的ip并顯示,那么我可以通過修改我的ip以達到執行命令的效果
這里抓包使用x-forwarded-for驗證
從它返回的頁面來看是可以利用的
現在就是判斷這里應該怎樣去利用
從經驗上來判斷這里很像是ssti模板注入
嘗試驗證一下
這里傳入了${7*7}頁面返回了執行過后的結果說明這里存在ssti注入
!!!!如果報錯或者不執行也不一定是錯的,最后會講解
現在判斷是那種模板
這里傳入a{*comment*}b后回顯ab,說明這里是smarty模板
應為smarty是php的模板所以直接嘗試rce
{system('ls')}
這里回顯出flag.php文件,直接cat
這里并沒有回顯
猜測這里只是一個障眼法
看一下跟目錄
出現flag,這里應該就沒問題了
獲得flag
SSTI模板注入
SSTI就是服務器端模板注入
當前使用的一些框架,比如python的flask,php的tp,java的spring等一般都采用成熟的的MVC的模式,用戶的輸入先進入Controller控制器,然后根據請求類型和請求的指令發送給對應Model業務模型進行業務邏輯判斷,數據庫存取,最后把結果返回給View視圖層,經過模板渲染展示給用戶。
漏洞觸發的原因未經任何處理就將其作為 Web 應用模板內容的一部分,模板引擎在進行目標編譯渲染的過程中,執行了用戶插入的可以破壞模板的語句,因而可能導致了敏感信息泄露、代碼執行、GetShell 等問題。其影響范圍主要取決于模版引擎的復雜性。
大致意思呢就是:
沒有將數據區于語句分開,導致他們被當成一個整體了
$output = $twig->render("Dear {first_name},", array("first_name" => $user.first_name) );
以上并不會早場ssti漏洞注入,應為執行區域和數據區域不在同一個地方$output = $twig->render("Dear " . $_GET['name']);
這里呢就會造成ssti漏洞,這里接受數據后就直接執行了,可能會方便用戶使用,但是也同時會被別有用心的人構造payload來注入可通過一下方式來判斷是什么模板從而進行下一步的滲透
輸入{{7*'7'}}返回49的是jinja2模板。返回7個7的是twig模板
!!!!!!!!!!最后,ssti主要的還是知道他是那種模板,知道了以后去網上搜怎么注入,怎么查版本信息,就能獲得更過注入點。