Найти тему

CTF web — pinger

Разбираем вторую задачку из нашего соревнования CTF. Задание называется pinger, 100 баллов за флаг.

-2

Ссылка ведёт на URL:

http://challenge01.root-me.org/web-serveur/ch54/

Нам предлагают пройти одно из испытаний на root-me.org.

Ссылки

CTF - Capture The Flag

Решение

Сразу скажу, задачка на эксплуатацию уязвимости из разряда Command injection.

Command injection - внедрение команд ОС. Выполнение несанкционированных команд операционной системы на удалённом сервере через уязвимое веб-приложение.

Что нам предлагают. У нас есть форма. Вводим адрес и пингуем его. Результат выводится на экран. Для теста пинганём localhost.

-3

Видим, что возвращается результат, похож на результат пинга в Linux. Да что там похож, он и есть. Вероятно выполняется код "ping x". Если так, то мы можем попробовать добавить в конец свою команду, если вводимые данные не валидируются.

Попробуем пингануть такое:

localhost; cat /etc/passwd
-4

Да, уязвимость налицо. Мы можем выполнить любую команду bash Linux через эту форму. Осталось найти флаг. Смотрим что у нас лежит в корне сайта:

127.0.0.1; ls
-5

Видим только один файл index.php. Заглянем в него. Вообще, выполнять несколько команд можно разными способами:

localhost; cat index.php
localhost&&cat index.php
localhost|(cat index.php)

Я проверил, работают все.

-6

Вывели содержимое файла index.php. Посмотрим в текстовом виде на код страницы:

-7

А вот и наш флаг, он задан в виде переменной:

$flag = "S3rv1ceP1n9Sup3rS3cure";

Безопасность

  1. Проверяйте переменные переданные пользователем. В данной задаче достаточно валидировать IP адрес или доменное имя, это уже исключит инъекцию.
  2. Пинговать лучше не с помощью команд ОС. Пример Ping.

Источник:
https://internet-lab.ru/ctf_web_pinger

Если вам понравилась статья, то ставьте 👍🏻 каналу.
Пишите комментарии, задавайте вопросы, подписывайтесь.