[PHP-инклудинг и allow_url_include] [Проблема с WUBI и Ubuntu 10.04] [Как был взломан antichat.ru] [AntiDDoS в LightHTTPd] [Sleep() в слепых SQLi] [Уязвимости разных движков] [Уязвимости Joomla] [Уязвимости Invision Power Board] [Уязвимости GuppY CMS] [Уязвимости 1024cms] [Уязвимости IceBB] [Уязвимости Zeus Botnet] [Online PHP code analysis] [Web-разведка] [Сканер уязвимости nginx] [Анализ текстов] [SSI Web-shell] | Уязвимости языка PHPЗдесь будут мысли и наработки по уязвимостям интерпретатора PHP..Просмотрев все стандартные функции, работающие с файлами, я обнаружил некоторые недоработки. Во-первых почти все функции по-разному реагируют на существующий и несуществующий файлы в корневой директории, то есть можно произвести листинг корневой директории. Видимо считается, что в ней ничего интересного быть не должно. Функции:
Далее. BlackFan уже писал эксплойт для листинга директорий при помощи linkinfo() и realpath(). У меня вышло, что realpath не работает ни на 5.3.2, ни на 5.3.8, а вот linkinfo работает и там, и там. Также стоит отметить функцию tmpfile(), которая почему-то плюёт на open_basedir и всегда позволяет создавать временные файлы во временной директории, даже если доступ в неё запрещён. Читая исходники, я обнаружил, что проверка на наличие ограничения проводится на каком-то уровне, но не стал углубляться, в чём же причина неудачи. Листинг директории через glob() работал давным-давно, и его давно пофиксили. Но открыв список доступных протоколов PHP, я не мог обойти вниманием обёртку glob://. Выяснилось, что она-таки не видит установку open_basedir. Отсюда родился эксплойт. Очередная функция/метод, позволяющая произвести листинг директории при помощи брутфорса -- это finfo. $finfo = finfo_open(FILEINFO_MIME);
$filename = "/var/www";
var_dump(finfo_file($finfo, $filename));
Функция говорит, что файл не существует или же ругается на open_basedir. На директории вообще не ругается. |
|
| © BECHED |