Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #90, ИЮНЬ 2006 г.

PHPenetration

Zadoxlik (antichat.ru)

Хакер, номер #090, стр. 090-072-5


Если пользователю задать highlight как «'.system('dir').'», то результатом действия скрипта будет

preg_replace('#\b('.system('dir').')\b#i', '...', '...')

preg_replace width /e and width NULL

Условно можно считать, что неиспорченный magic_quotes_gpc или addslashes NULL отрезает правую часть строки. Для чего это может быть использовано? Оказывается, много для чего. Нужно только воображение. В частности, NULL можно применить при работе с preg_replace. Если в заменяемой подстроке, определяемой регулярным выражением, всунута переменная, которую тем или иным способом определяет пользователь, можно попробовать изменить структуру заменяемой подстроки так, чтобы в конце стоял модификатор /e. Посмотри на простенький пример:

preg_replace("#$c#i", '\\1', $mda);

Представь, что и $c и $mda можно как-то определить. Пусть в эксперименте будет задано $mda и $c прямо через GET.

script.php?c=(system\(ls\))%23e%00&mda=system(ls)

В результате получается листинг файлового каталога. А почему это так - попробуй подумать сам, обо всем этом уже писалось в данной статье. %23 - URL-закодированный символ #.

Движки на файлах

Некоторые бесплатные хостеры не предоставляют доступ к MySQL. Для таких случаев пишутся движки на текстовых БД. Структура и общение с текстовыми БД может быть самая разная. Иногда разработчики даже придумывают библиотеки функций для работы с текстовыми БД с помощью некоего подобия языка SQL. В таком случае текстовая БД представляет собой папки и файлы, где папки, например, - это базы данных, файлы - таблицы, а внутри файлов все как-то мудрено организовано в виде структуры таблицы. Нас же будет интересовать другой подход к организации БД на файлах. Например, что может быть проще того, чтобы заносить все данные в некий PHP-файл, доступ к которому будет закрыт извне, с тем, чтобы потом его инклудить и получать массивы данных прямо в готовом виде. Рассмотрим уязвимость в exBB 1.9.1. Нам неважно то, как мы сможем получить доступ к админ-панели (это делается с помощью других, не PHP-inj уязвимостей в движке), но главное, что такая возможность есть. Зайдем в админ-панель, в конфигурацию.

Теперь поищем, где хранятся все эти данные. Оказывается, что они лежат как раз в таком инклудаемом файле (доступ к нему закрыт .htaccess'ом). Файл имеет вид:

<?

$exbb['boardurl'] = 'http://exbb';

$exbb['home_path'] = 'z:/home/exbb/www/';

$exbb['boardname'] = 'название форума';

$exbb['boarddesc'] = 'описание форума';

$exbb['announcements'] = 1;

$exbb['topics_per_page'] = 15;

$exbb['posts_per_page'] = 10;

$exbb['ch_files'] = 0777;

$exbb['ch_dirs'] = 0777;

$exbb['ru_nicks'] = 1;

$exbb['reg_simple'] = 0;

$exbb['default_lang'] = 'russian';

$exbb['default_style'] = 'Original';

$exbb['membergone'] = 15;

...

Я сумел выйти за кавычку только в одном из параметров. Это - $exbb['boardurl']. В итоге я получил такой код:

Назад на стр. 090-072-4  Содержание  Вперед на стр. 090-072-6
Hosted by uCoz