Security of Computer Systems
Главная | Articles | Регистрация | Вход
 
Вторник, 2024-04-16, 7:21 PM
Приветствую Вас Гость | RSS
Menu
Categories
Крякинг [3]
Кодинг [7]
Главная » Статьи » Кодинг » Кодинг

CGI Сканер с Web интерфейсом
Давайте определимся, на чем основывается работа сканера. Мы подключаемся к хосту и запрашиваем какой-нибудь файл, а затем обрабатываем ответ и делаем выводы.

Существуют два способа сделать запрос по HTTP - это использовать модуль LWP и функцию get($url) или же использовать для этого дела сокеты. Мы естественно выберем 2-ой способ.

А сделали мы это по 2 причинам: Во-первых нам нужно научится работать с сокетами, а во-вторых скорость при отдельных GET запросах гораздо ниже чем при установлении связи с помощью сокетов. Разберем, что же мы должны сделать:

  • Подключиться к серверу.
  • Послать запрос.
  • Получить и обработать ответ.
  • Вывести его пользователю.

Задача еще усложняется тем, что мы сначала должны принять входные данные от пользователя.

Используем для этого форму в отдельном HTML документе. Итак, начнем:

Для начала используем вот этот самый html код:

< form method="post" action="/cgi-bin/cgi.pl">
Enter hostname:
< input name="host" value="" size=20>
< input type="submit" value="Submit">
< /form>
< /body>
< html>

А теперь приступим к созданию самой программы.

#!c:perlbinperl.exe (пример для WinNT)

use Socket; # Указываем, что используем модуль Socket
&GetFormInput; # Запускаем подпрограмму для получения данных из формы $host = $field{'host'};# и затем обрабатываем их присваивая значения поля host соответствующей переменной
print "Content-type: text/htmlnn";
print qq] # Вместо кавычек
Results for $host
];
#Здесь начинается самая главная часть скрипта.
open (PPP,"< expl.txt"); #Открываем файл содержащий названия уязвимых скриптов.
while (< PPP>)
{
chomp;
$prot = getprotobyname('tcp'); # Указываем протокол, по которому будем конектиться
socket(SOCK, PF_INET, SOCK_STREAM, $prot); # Создаем сокет.
$i_addr = inet_aton("$host"); #Здесь мы специальной функцией обрабатываем значения переменной $host (подробнее об этой функции читайте в прошлых статьях)
$p_addr = sockaddr_in(80, $i_addr); # Хост и порт, куда конектимся
connect(SOCK, $p_addr); # осуществляем коннект
send (SOCK, "HEAD $_ HTTP/1.0nn", 0); #запрашиваем файл
$answer=< SOCK>; #Обрабатываем ответ
print " $_ $answer< /td "; #Выводим полученные данные пользователю
close(SOCK); # Закрываем файл, содержащий названия уязвимых скриптов.
}
close (PPP); # Закрываем файл
print "
";
# А вот та самая подпрограмма для получения данных от формы. Советую всем записать себе на будущее - очень пригодится.
sub GetFormInput
{
(*fval) = @_ if @_ ; local ($buf);
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN,$buf,$ENV{'CONTENT_LENGTH'});
}
else {
$buf=$ENV{'QUERY_STRING'};
}
if ($buf eq "") {
return 0 ;
}
else {
@fval=split(/&/,$buf);
foreach $i (0 .. $#fval){
($name,$val)=split (/=/,$fval[$i],2);
$val=~tr/+/ /;
$val=~ s/%(..)/pack("c",hex($1))/ge;
$name=~tr/+/ /;
$name=~ s/%(..)/pack("c",hex($1))/ge; if (!defined($field{$name})) {
$field{$name}=$val;
}
else {
$field{$name} .= ",$val";
} }
}
return 4;}
exit;
exit;

Категория: Кодинг | Добавил: Rqas (2006-03-18)
Просмотров: 4334 | Комментарии: 10 | Рейтинг: 0.0/0 |
Всего комментариев: 0
idth="100%" cellspacing="1" cellpadding="2" class="commTable">
Имя *:
Email:
Код *:
Login Form
Логин:
Пароль:
@Belvit.com

Category Search
Polls
Кто Вы?
Всего ответов: 2136
Counter
Онлайн всего: 1
Гостей: 1
Пользователей: 0

18.118.145.114


Belvit.com © 2024