Прежде чем я начну объяснять, как мы можем обойти флаг HttpOnly, давайте обсудим, что такое HttpOnly.
HttpOnly - это дополнительный флаг, включенный в заголовок ответа HTTP Set-Cookie. Флаг HttpOnly в Set-Cookie генерирует cookie, что может помочь снизить риск доступа клиентских сценариев к защищенным cookie, если флаг HttpOnly (необязательный) включен в заголовок ответа HTTP, а cookie не могут быть доступны через сценарии на стороне клиента, если браузер поддерживает этот флаг. Поэтому, даже если существует уязвимость межсайтового скриптинга (XSS) и пользователь случайно переходит по ссылке, использующей эту уязвимость, браузер не будет раскрывать куки третьей стороне.
Существует несколько известных способов обойти флаг HttpOnly.
Кража метода TRACE, если цель принимает его, в этом случае метод TRACE включен, но современные веб-браузеры больше не поддерживают его по умолчанию, поэтому нет смысла эксплуатировать его с помощью метода TRACE.
Получение cookie HttpOnly из ответа, что не сработало для нас - https://www.shorebreaksecurity.com/blog/xss-exploitation-with-xhr-response-chaining/
После нескольких часов борьбы у нас появилась новая идея .......
Итак, почему именно phpinfo?
Почти каждый сайт, который я тестирую (конечно, основанный на PHP), имеет файлы phpinfo.
После некоторого перебора каталогов и файлов мы наткнулись на файл info.php.
Наиболее интересной частью phpinfo является то, что он считывает все cookie, даже те, которые относятся к HttpOnly.
Кража ci_session с помощью файла info.php
Мы нашли XSS в поле name, и теперь мы можем использовать его для загрузки нашего JavaScript, который использует XMLHttpRequest() для чтения info.php и отправки его
Мы создали этот JS-код, который читает файл info.php, получает значение "HTTP_COOKIE" и отправляет его обратно на наш сервер.
Файл info.js.
Вот наш запрос, содержащий содержимое файла info.php (в base64)
Декодирование данных base64
После получения ci_session мы можем получить доступ к учетной записи администратора и повысить свои привилегии от пользователя.
В Tomcat есть примеры, которые можно использовать таким же образом
HttpOnly - это дополнительный флаг, включенный в заголовок ответа HTTP Set-Cookie. Флаг HttpOnly в Set-Cookie генерирует cookie, что может помочь снизить риск доступа клиентских сценариев к защищенным cookie, если флаг HttpOnly (необязательный) включен в заголовок ответа HTTP, а cookie не могут быть доступны через сценарии на стороне клиента, если браузер поддерживает этот флаг. Поэтому, даже если существует уязвимость межсайтового скриптинга (XSS) и пользователь случайно переходит по ссылке, использующей эту уязвимость, браузер не будет раскрывать куки третьей стороне.
Существует несколько известных способов обойти флаг HttpOnly.
Кража метода TRACE, если цель принимает его, в этом случае метод TRACE включен, но современные веб-браузеры больше не поддерживают его по умолчанию, поэтому нет смысла эксплуатировать его с помощью метода TRACE.
Получение cookie HttpOnly из ответа, что не сработало для нас - https://www.shorebreaksecurity.com/blog/xss-exploitation-with-xhr-response-chaining/
После нескольких часов борьбы у нас появилась новая идея .......
Итак, почему именно phpinfo?
Почти каждый сайт, который я тестирую (конечно, основанный на PHP), имеет файлы phpinfo.
После некоторого перебора каталогов и файлов мы наткнулись на файл info.php.
Наиболее интересной частью phpinfo является то, что он считывает все cookie, даже те, которые относятся к HttpOnly.
Кража ci_session с помощью файла info.php
Мы нашли XSS в поле name, и теперь мы можем использовать его для загрузки нашего JavaScript, который использует XMLHttpRequest() для чтения info.php и отправки его
Мы создали этот JS-код, который читает файл info.php, получает значение "HTTP_COOKIE" и отправляет его обратно на наш сервер.
Файл info.js.
Вот наш запрос, содержащий содержимое файла info.php (в base64)
Декодирование данных base64
После получения ci_session мы можем получить доступ к учетной записи администратора и повысить свои привилегии от пользователя.
В Tomcat есть примеры, которые можно использовать таким же образом
Код:
/examples/servlets/servlet/SessionExample
