Автор: @puzzlejoy
Ссылка на таск Codeby
https://codeby.games/categories/web/d5c47306-5d4f-4ad4-958f-5414a0b85b9b
Описание задания
Должно быть всё очень просто…
Решение
В названии таска у нас самая настоящая подсказка, которая является отправной точкой для решения задания.
На первый взгляд кажется, что сайт пустой - нас встречает какой-то html слайдер, ничего интересного.
Но у сайта есть особенность - в определенных ситуациях, когда мы пытаемся найти на сайте что-то, чего там априори нет, нас редиректит на некую страницу “ERROR 404”, которая на самом деле не является HTTP-ответом об ошибке, и, чтобы это проверить, воспользуемся Burp Suite и убедимся, что страница возвращает код 200 вместо положенного 404:
Приглядимся к ответу сервера внимательнее, написанный нами текст отправляется в контекст HTML-шаблона страницы.
По мимо этого замечаем, что сайт поднят на python/3.9.18
Учитывая всё это, мы можем предположить, что перед нами SSTI (Server-Side Template Injection), опасность которой заключается в том, что при наличии этой уязвимости мы можем выполнять произвольный код на сервере, и, соответственно, получить доступ к конфиденциальным данным.
Проверим справедливость наших размышлений с помощью простейшего эксплойта:
Мы ввели 7*\7 и получили 49. Это значит, что вводимые нами данные интерпретируются на стороне сервера.
{{...}}
: Это часть синтаксиса шаблонов, который используется во многих шаблонных системах, таких как Jinja2 в Python, для вставки динамического содержимого. Поэтому создавая полезную нагрузку, мы будем ориентироваться на этот факт.
Чтобы “докрутить” SSTI до OS command injection можем импортировать модуль “os”, который будет взаимодействовать непосредственно с операционной системой сервера:
Команда “id” успешно выполнилась и указала на то, что мы имеем доступ к системе под пользователем root (какая удача).
Посмотрим, что находится в домашней директории (обратите внимание на то, что некоторые спецсимволы url-кодируются):
Прочитаем его и получим флаг:
Флаг
Tags: