ОБСУЖДЕНИЕ Writeup 

Web | Просто найди его | HackerLab (WriteUp)

0 ответов 986
Автор темы
justfindhimhackerlab.webp

Название: Просто найди его
Категория: Web
Уровень: лёгкий
Ссылка на задание: https://hackerlab.pro/en/categories/web/722714c7-d357-4680-b389-44ca6a1d89ee
Баллы: 50


Reconnaissance​

Первое что я увидел, так это кнопка при нажатии которой выводится "совет".
1780483627752.webp

Первая мысль которая меня посетила это Fuzzing Directory и запустил ffuf в фоне, а пока начал склоняться к SQL injection (Так как подумал что фразы берутся из БД), чтобы точно поставить диагноз нужно изучить как сервер вообще обрабатывает нажатие кнопки и что он передаёт. Запускаем Burp и отслеживаем запросы.
Отлично, видим что есть POST запрос с json форматом, давайте перекинем его в Repeater и попробуем привести его в нормальный вид для удобства.
1780483802642.webp

Давайте разберёмся, что такое graphQL?
GraphQL — это язык запросов с открытым исходным кодом для API и среда выполнения на стороне сервера. Он предоставляет строго типизированную схему для определения связей между данными, что делает API более гибкими и предсказуемыми. И он не привязан к конкретной базе данных или механизму хранения — он работает с вашим существующим кодом и данными, что упрощает развитие API с течением времени.
Кажется, я догадываюсь... Здесь GraphQL API vulnerabilities.

Exploitation​

Давайте изучим полностью схему:
JSON:
    {
        "query": "{__schema{queryType{name}}}"
    }
Видим, что есть "столбец" getFlag, он нам инетерсен, давайте попробуем до него достучаться.
1780484916868.webp

Из текста ошибки понимаем, что getFlag хранит в себе значение isAdmin которое может быть либо True или False, давайте установим его на true.
JSON:
{
    "query":"{ getFlag(isAdmin: true)}"
}
46536534465465465465654.webp

Флаг у нас!
 
  • Огонь
  • Нравится
Реакции: Edmon Dantes и Сергей Попов
1