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']. В итоге я получил такой код: |