Продолжаем решать задачки по информационной безопасности web-серверов. Сегодня задачка с портала root-me.org, называется "HTTP - Improper redirect". За решение задачки дают 15 баллов, чуть посложнее начального уровня.
Задача: получить доступ к индексной странице. Get access to index.
Уязвимость будет связана с неправильным редиректом в PHP.
В PHP код http_redirect() или header('Location: ...') не выполняет остановку выполнения кода. В результате вместе со статусом 301 или 302 клиенту отправляется полное содержимое HTML страницы. Да, браузер клиента выполняет редирект, но можно же не пользоваться браузером!
Ссылки
http://cwe.mitre.org/data/definitions/698.html
Решение
Переходим на страницу задания:
http://challenge01.root-me.org/web-serveur/ch32
И попадаем на login.php.
А нам требуется index.php.
Но зайти не получается.
Браузер на странице index.php получает код "302 Found" и и выполняет редирект на "./login.php?redirect".
Как отключить редирект?
Можно, конечно, установить специализированное ПО для безопасников типа Burp Suite.
Минут 20 и вы разберётесь как поймать index.pxp и отобразить полное содержимое страницы. Флаг подсветил.
Но есть решение проще, запускаем командную строку или bash и используем curl:
curl http://challenge01.root-me.org/web-serveur/ch32/index.php
Флаг: ExecutionAfterRedirectIsBad.
Валидируем.
Флаг подходит, зарабатываем 15 очков.
Безопасность
- Помните о том, что следует вручную прекращать выполнение PHP кода после выполнения редиректа. Без exit() после заголовка header('Location: ...') PHP продолжает выполнение и отправляет вместе с заголовком содержимое страницы.