|

CGI-Checker по-русски
Xakep, номер #021, стр. 021-038-3
open (OUT, ">>$out"); # Отрываем файл с логами для записи
$str=<LOAD>; # Считываем ответ сервера
if ($str=~/200/) { # Если ответ содержит число 200, то файл существует
if ($out_f==1) {print OUT $cur." - НАЙДЕН!\n";}
if ($out_m==1) {print $cur." - НАЙДЕН!\n";}}
else {
if (($all==1) && ($out_f==1)) {print OUT $cur." - не найден\n";}
if (($all==1) && ($out_m==1)) {print $cur." - не найден\n";}}
close (OUT); # Закрываем файл с логами
close (LOAD);} # Заканчиваем соединение
close (DAT); # Закрываем базу дырявых скриптов
Вот это уже законченный вариант программы, который ты можешь использовать у себя на компе либо на удаленном серваке.
Все. Теперь ты можешь гордиться - у тебя есть собственный CGI сканер! В принципе, на этом статью можно закончить, но я не рассказал про сканер для работы с браузера. Ведь далеко не у всех есть shell доступ, а на своем компьютере пашет не так быстро, как хотелось бы. Если у тебя есть свой сайт с CGI доступом, то тебе повезло. Ты просто введешь в своем браузере такую ссылку:
http://www.site.ru/cgi-bin/check.cgi?сканируемый сайт
Кодинг: смена плана
Удобно ведь! Для этого нам придется немного переделать вторую программу: повыкидывать лишнее и кое-что добавить. Создай файл check.cgi, в нем будет находиться последняя программа. Вот код самого чекера, который будет запускаться из твоего браузера:
#!/usr/local/bin/perl
use Socket;
$AF_INET=2; $SOCK_STREAM=1;
$protocol=(getprotobyname('tcp'))[2];
$end="\015\012"; $cgi="cgi.dat";
$site=$ENV{QUERY_STRING}; # Вот так узнаем адрес сайта
$port=80; $addr=(gethostbyname($site))[4];
$addrs=pack ('S n a4 x8', $AF_INET, $port, $addr);
open (DAT, $cgi);
print "Content-type: text/html\n\n"; # Выводим заголовок HTML файла
print "Scan: $ENV{QUERY_STRING}<br>\n"; # Выводим, что сканируем
while ($cur=<DAT>){
chomp ($cur);
if (!(socket(LOAD,$AF_INET,SOCK_STREAM,$protocol))){
print "Невозможно создать сокет!"; exit;}
if (!(connect(LOAD, $addrs))){print "Невозможно соединиться!"; exit;}
select(LOAD); $|=1; select(STDOUT);
print LOAD "HEAD $cur HTTP/1.0$end";
print LOAD "Host: $site$end$end";
$str=<LOAD>;
if ($str=~/200/) {print $cur." - НАЙДЕН!<br>\n";}
close (LOAD);}
close (DAT);
Как видишь, здесь почти нет объяснений, так как программу можно понять, глядя в предыдущий cgi-checker. Саму базу я не стал писать, ее ты можешь найти на xakepy.al.ru (вместе с самими скриптами). База заняла бы много места, а толку дала бы мало. Лучше возьми готовую - геморроя меньше будет ;).
Побольше тебе дырявых скриптов на волне сетевого скана!
Назад на стр. 021-038-2 Содержание
|