HTTP Parameter Pollution, или HPP, происходит, когда сайт принимает пользовательский ввод и использует его для создания запроса к другой системе без валидации этого ввода. Это может пройзойти одним из двух способов, через сервер (или бэкенд) и через клиентскую сторону.
Silverlightfox приводит прекрасный пример серверной HPPатаки на StackExchange предположим, у нас есть следующий сайт, https://www.example.com/transferMoney.php, который через метод POST принимает следующие параметры:
amount=1000&fromAccount=12345
Когда приложение обрабатывает этот запрос, оно создает собственный POST запрос к другому компоненту в бэкенде системы, который, в свою очередь, выполняет транзакцию с фиксированным параметром toAccount.
• ОтдельныйURLбэкенда:https://backend.example/doTransfer.php
• Отдельныепараметрыдлябэкенда:toAccount=9876&amount=100
Теперь, если бэкенд, получая дублирующиеся параметры, принимает только последний параметр, можно предположить, что хакер сможет изменить POST-запрос к сайту для отправки следующего параметра toAccount:
amount=1000&fromAccount=12345&toAccount=99999
Сайт, уязвимый к HPP атаке передаст запрос бэкенду в таком виде:
toAccount=9876&amount=1000&fromAccount=12345&toAccount=99999
В этом случае второй параметр toAccount, отправленный злоумышленником, перезапишет запрос к бэкенду и позволит перевести деньги на предоставленный хакером счет (99999) вместо счета, установленного системой (9876).
Это можно использовать, внося правки в собственные запросы, которые обрабатываются уязвимой системой. Но также это может быть более полезным для хакера, если он может сгенерировать ссылку с другого сайта и обмануть пользователей, заставив их ненамеренно отправить вредный запрос с дополнительными параметрами, добавленными хакером.
[ad name=»Responbl»]
С другой стороны, HPP на клиентской стороне включает инъекцию дополнительных параметров в ссылки и другие src атрибуты. Позаимствуем пример с OWASP и предположим, что у нас есть следующий код:
<? $val=htmlspecialchars($_GET[’par’],ENT_QUOTES); ?> <a href=”/page.php?action=view&par=’.<?=$val?>.’”>Посмо 3 три меня!</a>
Это принимает значение для par из UTL, убеждается, что оно безопасное и создает из него ссылку. Если хакер отправит:
http://host/page.php?par=123%26action=edit
то полученная в результате ссылка будет выглядеть так:
<a href=”/page.php?action=view&par=123&action=edit”>Посмо меня!</a>
Это может заставить приложение к выполнению действия редактирования вместо просмотра.
И серверная и клиентская HPP зависят от того, какая технология используется на бэкенде и как она действует, получая несколько параметров с одинаковыми именами. Например, PHP/Apache используют последний переданный параметр из нескольких с одинаковыми именами, Apache Tomcat использует первый параметр, ASP/ISS используют все параметры, и так далее. В результате, нет одного гарантированного способа для отправки нескольких параметров с одинаковыми именами и обнаружение HPP потребует некоторых экспериментов, чтобы узнать, как работает тестируемый вами сайт.
Примеры
Сложность: Низкая
Url: https://hackerone.com/blog/introducing-signal-and-impact Ссылка на отчет: https://hackerone.com/reports/1059536 Дата отчета: 18 декабря 2015
Выплаченное вознаграждение: $500
Описание: На HackerOne есть кнопки для шаринга контента через популярные социальные сети, такие как Twitter, Facebook и прочие. Эти кнопки содержат конкретные параметры для ссылки на социальную сеть.
Обнаруженная уязвимость позволяла хакеру подставить другие параметры URL в ссылку и направить её на любой сайт, а HackerOne включил бы этот параметр в POST-запрос к социальной сети, создавая таким образом нежелаемое поведение.
Пример использования уязвимости менял url:
https://hackerone.com/blog/introducing-signal
на
https://hackerone.com/blog/introducing-signal?&u=https://vk.c
Обратите внимание на добавленный параметр u. Если бы посетители HackerOne нажали на обновленную таким образом ссылку, пытаясь поделиться контентом через социальные сети, вредоносная ссылка выглядела бы так:
https://www.facebook.com/sharer.php?u=https://hackerone.com/b
Здесь последний параметр u получает приоритет над первым и, соответственно, используется для публикации на Facebook. При публикации в Twitter, предложенный стандартный текст также мог бы быть изменен:
https://hackerone.com/blog/introducing-signal?&u=https://vk.c site:https://vk.com/durov
[ad name=»Responbl»]
Выводы
Обращайте внимание на случаи, когда сайты принимают контент и взаимодействуют с другим веб-сервисом, таким, как сайты социальных сетей.
В этих ситуациях может быть возможна отправка переданного содержимого без надлежащих проверок его безопасности.
Риски, раскрываемые использованием HTTP Parameter Pollution сильно зависят от действий, выполняемых бэкендом сайта и тем, куда будут отправлены вредоносные параметры.
Оглавление:
Базовые знания о HTTP протоколе. Глава 1
Что такое HTML иньекция. Уроки хакинга. Глава 2.
Что такое HPP (HTTP Parameter Pollution) атака? Уроки хакинга. Глава 3
Что такое CRLF инъекция, примеры использования. Уроки хакинга, Глава 4.
Уязвимости в логике приложений. Уроки хакинга. Глава 6
Уязвимости в логике работы приложений. Примеры.
Что такое XSS атака (Cross Site Scripting Attacks). Уроки хакинга. Глава 7.
SQL иньекции. Виды и примеры использования. Уроки хакинга. Глава 8.
Уязвимости Открытого Перенаправления. Уроки хакинга. Глава 9
9 comments On Что такое HPP (HTTP Parameter Pollution) атака? Уроки хакинга. Глава 3
Pingback: Использование на практике CSRF. Уроки хакинга. Глава 5. - Cryptoworld ()
Pingback: SQL иньекции. Виды и примеры использования. Уроки хакинга. Глава 8. - Cryptoworld ()
Pingback: Что такое HTML иньекция. Уроки хакинга. Глава 2. - Cryptoworld ()
Pingback: Что такое CRLF инъекция, примеры использования. Уроки хакинга, глава 4. - Cryptoworld ()
Pingback: Уязвимости в логике работы приложений. Примеры. Уроки хакинга. Глава 6 - Cryptoworld ()
copy paste from books
HTML injection
Username:
Password:
HTML injection