{% extends 'utils/_task.html' %} {% include 'utils/_forensicsidenav.html' %} {% block content %}
SSTI (Server-side template injection) - уязвимость, позволяющая внедрить код в шаблон, выполнив его на стороне сервера.
Как это работает? Если пользователь ввёдет где-либо на сайте не просто текст, а команду, вставляемую в шаблонизатор, то сервер может выполнить её и вернуть пользователю результат, если не стоит должных защит. Примерно так это выглядит на сервере:(пример кода ниже)
if request.method == 'POST':
comment = request.form['user_comment']
# В HTML комментарий вставляется через вызов переменной: {% raw %} <p> {{ comment }} </p> {% endraw %}
Можно заметить, что {% raw %} {{ }} {% endraw %} передают переменную. Т.е пользователь может просто написать команду такого же вида в поле ввода и она будет выполнена.
В нашем случае можем ввести в комментарии:
{% raw %} {{ flag }} {% endraw %}
На доске же вместо нашего "комментария" отобразится введённая переменная, т.е флаг
Однако можно в {% raw %} {{ }} {% endraw %} вписать любую команду и она будет выполнена с одним "но": Современные шаблонизаторы неохотно обрабатывают в принципе всё, что в них суют и даже здесь уязвимость создана искусственно
скрытьПриветствую тебя, о сетевой путник!
Прошу, оставь упоминание о себе здесь! Тут допускается всё: ничего страшного если твой комментарий будет немного странным
{{ error }}
{{ username }}
{{ render_template_string(comment) }}
{% endfor -%}Sup3r_C4t
Мяу-мяу Мяу-мяу
Herobrine
▓▒░(°◡°)░▒▓
0MegaCTF++
Выходи сюда, глупый Админ! Отдавай флаг!!!!(╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻