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  Содержание