На странице
Обход URL-based access control
Лаборатория
URL-based access control can be circumvented · Apprentice
Решение
Дано
This website has an unauthenticated admin panel at /admin, but a front-end system has been configured to block external access to that path. However, the back-end application is built on a framework that supports the X-Original-URL header.
To solve the lab, access the admin panel and delete the user carlos.
Анализ задания
Сайт с админкой /admin, доступ к которой ограничен. Однако, мы знаем, что фреймворк поддерживает заголовок X-Original-URL. Нужно получить доступ к админке и удалить пользователя.
Теория
Вспомним, для чего используется X-Original-URL.
Это нестандартный HTTP-заголовок. Зачем используют? Позволяет бэкенду видеть оригинальный URL до обработки прокси (nginx, Apache). Некоторые фреймворки доверяют этому заголовку, тем самым позволяя обойти ограничения на доступ к закрытым URL.
Мы делаем запрос к публично доступной странице, но с помощью X-Original-URL меняем URL на, например, /admin.
Разведка
Открываем сайт, сразу видим ссылку «Admin panel». Заходим — «Access denied».
Ладно, тогда закидываем в Repeater запрос GET / и добавляем в конец X-Original-URL: /admin. Вернулся HTML админки. Находим там ссылку на удаление пользователя:
<a href="/admin/delete?username=carlos">
Пробуем:
X-Original-Url: /admin/delete?username=carlos
Так, но сервер жалуется «Missing parameter 'username'». Может, query string обрезается?
А если попробовать передать query string в основном запросе:
GET /?username=carlos
X-Original-Url: /admin/delete
Сработало! Лаба решена.
Ещё в этой категории
Web Shell Upload через обход блек-листа расширений (PortSwigger Lab)
.php в блек-листе, но .htaccess заливается без вопросов — подсовываем свой конфиг Apache и заставляем сервер исполнять shell.bug как PHP.
Web Shell Upload через обфускацию расширения (PortSwigger Lab)
Блек-лист расширений не пускает .php, двойное расширение shell.php.jpg отдаётся как картинка — null-byte shell.php%00.jpg обходит обе проверки.
Remote Code Execution через загрузку web shell (PortSwigger Lab)
Загрузка аватарки без валидации — заливаем PHP web shell и читаем /home/carlos/secret.