Intro [Прошу каментить и оценивать] Почти каждый слышал про сервис domainsdb.net , а многие им пользовались.И им наверно знаком случай когда требуется проверить большое кол-во хостов на предмет наличия всяких потенциально дырявых скриптов (гостевые книги, форума, админки) nikto здесь использовать не выгодно, т.к. полное сканирование занимает достаточно много времени и проверять им 20 хостов никто не будет.В свое время NSD писал про атаку reverse ip lookup и даже написал небольшой скриптек для проверки хостов на наличие форумов phpbb Недавно мне пришлось вот так проверить n-ное кол-во хостов на наличие форумов и прочих интересностей. Inside. Я решил написать свой скрипт, mini-nikto так сказать.Для удобства решил сделать его полностью автоматизированым. Вот собственно код: Code: #!/usr/bin/perl -w use IO::Socket; use threads; $ddb_user="Gh0sT___"; $ddb_pass="look"; $dbFiles="files.db"; $_=$ARGV[0]; sub usage() { print "[x] usage: $0 [host]\n"; exit 1;} sub invalidHost() { print "[x] $ARGV[0] is invalid host\n"; exit 1;} sub invalidLogin() { print "[x] Login ($ddb_user) or pass is invalid\n"; exit 1;} sub connectionTimeout { print "[i] Connection to $_[0] timed out\n";} sub matchAns { return 1 if $_[0]=~m!200|401! ;} sub noFile { print "[x] No requred files found\n"; exit 1;} sub check { open($files,"<$dbFiles") or noFile(); $ip=$_[0]; #Checking files while (<$files>) { chomp(); $somesock = new IO::Socket::INET (PeerAddr => "$ip", PeerPort => "80", PeerProto => "tcp", TimeOut => 10) or connectionTimeout($ip) and last; $server_check ="GET $_ HTTP/1.1\n"; $server_check.="Host: $ip\n"; $server_check.="User-Agent: Smart Bot\n"; $server_check.="Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\n"; $server_check.="Accept-Language: en-us,en;q=0.5\n"; $server_check.="Accept-Encoding: gzip,deflate\n"; $server_check.="Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\n\n"; print $somesock $server_check; sysread ($somesock, $ans, 20); if (matchAns($ans) == 1) { print " [*][Files] Might be interesting: $ip$_\n"} close $somesock; } close $files; } usage() unless $ARGV[0]; print "..:: Simple InetCrack by Gh0s7 ::..\n"; nvalidHost() unless /\d{1,3}\.\d{1,3}.\d{1,3}.\d{1,3}/ or /\w+\.[com|ru|net|biz|org|info]/i; print " [*] Getting Ip..."; my $h_sock = new IO::Socket::INET (PeerAddr => "domainsdb.net", PeerPort => "80", PeerProto => "tcp"); $len = length("d=$_&x=&y="); $req = "POST /$_ HTTP/1.1\n"; $req.= "Host: domainsdb.net\n"; $req.= "Cookie: pass=$ddb_pass; user=$ddb_user\n"; $req.= "User-Agent: inetcracker\n"; $req.= "Content-Length: $len\n"; $req.= "\nd=$_&x=&y="; print $h_sock $req; while (<$h_sock>) { if (/there are <a href\=\"\/.{1,20}/) { @res=split (/\"/, $&); $_=$res[1]; s/\///; $ip = $_; last; } } print "$ip\n"; print " [*] Starting lookup\n"; close $h_sock; $h_sock = new IO::Socket::INET (PeerAddr => "domainsdb.net", PeerPort => "80", PeerProto => "tcp"); $req = "GET /$ip HTTP/1.1\n"; $req.= "Host: domainsdb.net\n"; $req.= "Cookie: pass=$ddb_pass; user=$ddb_user\n"; $req.= "User-Agent: inetcracker\n\n"; $i=0; #<tr><td>1. </td><td><b><a href="http://host.net/" print $h_sock $req; while (<$h_sock>) { if (m!.{8}[0-9]{1,3}.{16,18} href\=\".{4,25}\"!) { @res=split (/\"/, $&); next if $res[1]=~m!/whois/!; @cut2=split (/\//, $res[1]); $host[$i] = $cut2[2]; $i++; } invalidLogin() if /Domains list is limited to 3/; } print " [*] Lookup finished\n"; print " [*] Found $i hosts\n"; exit unless $i; foreach (@host) {threads->create(\&check,$_)->detach} print " [*] Waiting for childs\n"; sleep 200; print " [*] Finished\n"; [/i] Вот файл files.db: Code: /postnuke/ /postnuke/html/ /modules/ /phpBB/ /forum/ /forums/ /members/ /porn/ /restricted/ /xxx/ /cgi.cgi/ /webcgi/ /cgi-914/ /cgi-915/ /bin/ /cgi/ /mpcgi/ /cgi-bin/ /ows-bin/ /cgi-sys/ /cgi-local/ /htbin/ /cgibin/ /cgis/ /scripts/ /cgi-win/ /fcgi-bin/ /cgi-exe/ /cgi-home/ /cgi-perl/ /admin/ /clients/ /pass/ /password/ /passwords/ /store/ /users/ /access/ /members/ /private/ /ccbill/ /dmr/ /mastergate/ /dmr/ /epoch/ /netbilling/ /webcash/ /wwwjoin/ /etc/security/ /admins /clients /pass /password /passwords /passwd /passwd.adjunct /store /users /.htpasswd /.passwd /robots.txt /phpmyadmin/ /myphpadmin/ /sqladmin/ Используем так: perl /path/to/script [host], Где [host] - собственно хост для проверки. Outro Этот мне скрипт реально помог при взломе одного сервера.Надеюсь он поможет о остальным.Отдельное спасибо KSURi за доку по потокам на перле. Этот код и статья особо не претендуют на какую-то оригинальность или новизну, просто релиз от меня.
Code: print "..:: Simple InetCrack by Gh0s7 ::..\n"; nvalidHost() unless /\d{1,3}\.\d{1,3}.\d{1,3}.\d{1,3}/ or /\w+\.[com|ru|net|biz|org|info]/i; Очепятка =/ Идея конечно не нова, но исполенение мне нравится) Тока надо расширить базу... Распотраши тот-же "никто" например... Я у тебя кое-что позаимствую наверное, если ты не против)
Digimortal спасиб.... _Great_ не указывай где мне постить, я просто попросил проветь этот сплоит на этом серваке и все.... я не просил его ломать или что то ещё!
TreniX я знаю что перл это не обязательно сплоит, но просто сплоиты практически всегда пишут на php или perl.
KSURi: удивись, база нагло с3.14зжена у никто Не вся, конечно, но большИе фрагменты именно оттуда. На тему заимствования: бери конечно, гпл рулит, только если кусок большой, ориг. автора укажи
Gh0s7 я по другому немного реализовал) Но все равно спасибо, реализация мне нравится, развивай ее. Со временем получится неплохой сканер.
Сейчас этот скрипт неработает т.к. DomainsDB умер. Есть ли какой-нибудь аналог или пожалуста подправьте его,я пробовал-неполучилось.