Описание
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 потребует некоторых экспериментов,
чтобы узнать, как работает тестируемый вами сайт.
#42590 в Разное
#1028 в Бизнес-литература
#5061 в Развитие личности
хакер, хакинг, основы этичного хаки...
16+
Отредактировано: 08.03.2019