Основы этичного веб-хакинга (перевод)

Размер шрифта: - +

HTTP Parameter Pollution

Описание 
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=1000&fromAccount=12345 
Теперь, если бэкенд, получая дублирующиеся параметры, при- 
нимает только последний параметр, можно предположить, 
что хакер сможет изменить POST-запрос к сайту для отправки 
следующего параметра toAccount: 
amount=1000&fromAccount=12345&toAccount=99999

Сайт, уязвимый к HPP атаке передаст запрос бэкенду в таком 
виде: 
toAccount=9876&amount=1000&fromAccount=12345&toAccount=99999 
В этом случае второй параметр toAccount, отправленный зло- 
умышленником, перезапишет запрос к бэкенду и позволит 
перевести деньги на предоставленный хакером счет (99999) 
вместо счета, установленного системой (9876). 
Это можно использовать, внося правки в собственные запросы, 
которые обрабатываются уязвимой системой. Но также это 
может быть более полезным для хакера, если он может сгене- 
рировать ссылку с другого сайта и обмануть пользователей, 
заставив их ненамеренно отправить вредный запрос с допол- 
нительными параметрами, добавленными хакером. 
С другой стороны, HPP на клиентской стороне включает инъ- 
екцию дополнительных параметров в ссылки и другие src 
атрибуты. Позаимствуем пример с OWASP и предположим, 
что у нас есть следующий код: 
1 <? $val=htmlspecialchars($_GET[’par’],ENT_QUOTES); ?> 
2 <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 потребует некоторых экспериментов, 
чтобы узнать, как работает тестируемый вами сайт.



Евгений Этичный

Отредактировано: 08.03.2019

Добавить в библиотеку


Пожаловаться