Blind XXE через JSON. Решение задания bnv с Google CTF Quals 2019
На прошлых выходных проходит Google CTF Quals. Задания были довольно сложные, выше среднего. Тем не менее что-то можно было решить. Разбор некоторых заданий выйдет на канале на текущей недели.
Задания всё ещё доступны - https://capturetheflag.withgoogle.com/#challenges/
Ссылка на событие - https://ctftime.org/event/809
Задание.
Задание категории Web
Описание мало что нам даёт, поэтому сразу переходим на сайт.
Сайт содержит только одно (явное) активное действие, которое заключается в возможности выбора города. Подключим Burp Suite, чтобы перехватить запрос, который отправляется на сервер.
Видим, что в формате JSON отправляется некоторое число. Его значение нам ничем помочь не может.
Вся информация, которую можно было собрать - у нас есть. Теперь следует самый длительный этап решения подобных заданий - перебор всех возможных вариантов эксплуатации.
После ряда неудачных попыток внедриться внутрь JSON'а можно подумать, что в JSON нам не нужно внедряться, а необходимо как-то изменить запрос, например поменяв тип передаваемых данных. Как оказалось, это довольно популярный способ эксплуатации XXE.
https://blog.netspi.com/playing-content-type-xxe-json-endpoints/
Таких статей не одна, и все они описывают процесс изменения запроса с JSON'a на XML.
Попробуем и мы сделать подобное.
Отлично, мы можем отправлять xml вместо json. Теперь попробуем сделать XXE, про неё уже не раз выходили посты на канале.
К сожалению, многие стандартные пейлоады не сработали и пришлось искать другие идеи. Не сработали пейлоады из-за невозможности получения вывода результатов команд. В этом случае нужно использовать Blind XXE, принцип и примеры которой хорошо описаны тут - https://portswigger.net/web-security/xxe/blind
Пробуем пейлоад из статьи, для чтения
Отлично, теперь надо понять где лежит флаг. Самый первый вариант - просто ввести flag, ожидая что он лежит в корне.
Так и есть. Задание не особо простое, но и не сказать, что сложное. Палки в колёса вставляет первый этап, на котором нужно понять, что JSON иногда можно передавать в виде xml. После найти варианты слепой эксплуатации XXE для чтения файлов.
авторство - канал "Убежище Хакера"
На прошлых выходных проходит Google CTF Quals. Задания были довольно сложные, выше среднего. Тем не менее что-то можно было решить. Разбор некоторых заданий выйдет на канале на текущей недели.
Задания всё ещё доступны - https://capturetheflag.withgoogle.com/#challenges/
Ссылка на событие - https://ctftime.org/event/809
Задание.
Задание категории Web
Описание мало что нам даёт, поэтому сразу переходим на сайт.
Сайт содержит только одно (явное) активное действие, которое заключается в возможности выбора города. Подключим Burp Suite, чтобы перехватить запрос, который отправляется на сервер.
Видим, что в формате JSON отправляется некоторое число. Его значение нам ничем помочь не может.
Вся информация, которую можно было собрать - у нас есть. Теперь следует самый длительный этап решения подобных заданий - перебор всех возможных вариантов эксплуатации.
После ряда неудачных попыток внедриться внутрь JSON'а можно подумать, что в JSON нам не нужно внедряться, а необходимо как-то изменить запрос, например поменяв тип передаваемых данных. Как оказалось, это довольно популярный способ эксплуатации XXE.
https://blog.netspi.com/playing-content-type-xxe-json-endpoints/
Таких статей не одна, и все они описывают процесс изменения запроса с JSON'a на XML.
Попробуем и мы сделать подобное.
Отлично, мы можем отправлять xml вместо json. Теперь попробуем сделать XXE, про неё уже не раз выходили посты на канале.
К сожалению, многие стандартные пейлоады не сработали и пришлось искать другие идеи. Не сработали пейлоады из-за невозможности получения вывода результатов команд. В этом случае нужно использовать Blind XXE, принцип и примеры которой хорошо описаны тут - https://portswigger.net/web-security/xxe/blind
Пробуем пейлоад из статьи, для чтения
/etc/passwd
Отлично, теперь надо понять где лежит флаг. Самый первый вариант - просто ввести flag, ожидая что он лежит в корне.
Так и есть. Задание не особо простое, но и не сказать, что сложное. Палки в колёса вставляет первый этап, на котором нужно понять, что JSON иногда можно передавать в виде xml. После найти варианты слепой эксплуатации XXE для чтения файлов.
авторство - канал "Убежище Хакера"