На странице
apsyleg1 мин
#portswigger #access-control #web-security

Обход 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

Сработало! Лаба решена.