Название: Конвертер
Категория: Web
Уровень: Лёгкий
Ссылка на задание: https://hackerlab.pro/categories/web/8c871c3d-c395-47f6-9f3d-93ec11ed5b6f
Баллы: 300
Reconnaissance
Нас встречает обычный ASCII конвертер, который кодирует текст и декодирует его. Первая мысль это CMD Injection, поскольку вполне возможно там функция ascii которая передаётся в PHP или Python.Как оказалось, приложение было написано на jinja2, поскольку payload {{ 7*7 }} выдал 49. И тут мы понимаем, что здесь SSTI.
Exploitation
Как мы знаем а кто не знает сейчас объясню, SSTI - это атака, которая позволяет взаимодействовать с подклассами Python. т.е использовать функции Python напрямую. Давайте попробуем посмотреть какие подклассы нам доступны:
Python:
# По хорошему нам нужно было сначала найти доступные классы, потом базис и только потом подклассы, но я сократил чтобы не растягивать WriteUp, в конце оставлю ссылку
{{ [].__class__.__base__.__subclasses__() }}
На скришоте видно, какие подклассы мы можем использовать, нам очень повезло, мы можем использовать класс
os._wrap_close, поскольку этот класс в модуле os, мы можем "выпрыгнуть" в глобальную область видимости этого модуля. Мы буквально получили доступ к функциям popen() и system(). Его индекс 137, давайте используем его и посмотрим как устроен сайт изнутри.
Python:
{{ [].__class__.__base__.__subclasses__()[137].__init__.__globals__['popen']('ls -lah').read() }}
Отлично, мы получили доступ к исходным файлам проекта. Давайте прочитаем файл
app.py.Ссылка на материал: PayloadsAllTheThings/Server Side Template Injection/Python.md at master · swisskyrepo/PayloadsAllTheThingsЯ использовал также grep чтобы сразу вывести флаг, без кода приложения.