domingo, 24 de marzo de 2013

[SQLMAP] SQL Injection utilizando método POST





En esta entrada breve y simple, se detallaran los pasos que realizaremos cuando necesitemos explotar una vulnerabilidad de Sql Injection, que mayormente se encuentran en algunos servidores basados en SQL Server y Oracle. Estas vulnerabilidades son típicas en los LOGIN'S Administrativos, ya que como debemos de saber,  que cuando ingresamos el usuario y password estos datos se envían a través del método POST, por lo tanto puede existir la posibilidad de que al ingresar datos falsos o algunos bypasses, esta nos pueda mostrar algún error que nos permita identificar la vulnerabilidad, por tanto se puede explotar automatizadamente utilizando SQLMAP ejecutando comandos para enviar la petición en POST y no en GET como se "acostumbra".

Si no me explique bien, pues al buen entendedor pocas palabras!!! entonces sin mas rodeos, vamos a la acción!

Tenemos un LOGIN en ASP, en la cual no tenemos los datos correctos ni nada por el estilo, ya que no hemos encontrado ningún tipo de vulnerabilidad en el servidor que nos brinde estos datos, por tanto como somos curiosos e inteligentes empezamos a probar datos falsos y algunos bypasses como el famosillo ' or '1'='1 como se muestra en la imagen siguiente:


Después de haber colocado este bypass, tenemos la posibilidad de que el servidor nos muestre algún tipo de vulnerabilidad o el error que nos permita identificar si es vulnerable a SQL Injection, tanto así que si el servidor se encuentra bajo ASP esta nos puede mostrar el error "Microsoft OLE DB Provider for ODBC Drivers error '80040e14'", si esto llega a suceder, corremos la suerte de poder explotar esta vulnerabilidad. En este caso después de haber colocado dicho bypass, el servidor nos devuelve el siguiente error:


Al visualizar esta vulnerabilidad, somos consciente que se puede explotar manualmente o automatizadamente, para así obtener los datos que nos permita logearnos de una manera correcta al servidor.

Ahora, para seguir probando si el LOGIN tiene algún otro tipo de vulnerabilidad, regresamos al form y dejamos en blanco el usuario y clave y le cliqueamos en Conectar, la cual el servidor nos muestra lo siguiente:


¿Algo raro cierto? ¿Por que? ... Este LOGIN nos demuestra que las peticiones no están validadas, quiere decir que si colocamos algún bypass, esta nos muestra una vulnerabilidad, como también si dejamos los form en blanco y cliqueamos en conectar, esta nos permite saltarnos del login. 

Bien, después de haber llegado a unas pequeñas conclusiones sobre que el servidor tiene una vulnerabilidad en el login y que las peticiones no están validadas, procederemos a utilizar el Live HTTP Headers para así ver las cabeceras del login al momento que cliqueemos en Conectar.

En este caso después de haber colocado el Live HTTP Headers a la escucha de lo que pasa por el servidor mientras cliqueamos en Conectar dejando todo el blanco, esta nos devuelve lo siguiente:


Hemos obtenido 3 datos muy importantes! las cuales son:

  • http://www.uap.edu.pe/intranet/logon2.asp
  • POST /intranet/logon2.asp HTTP/1.1
  • usuario=&pw=&user=07&B7=++Conectar++

La primera es posiblemente la URL Vulnerable, la segunda nos indica que la variable es POST y el ultimo, los parámetros que posiblemente son vulnerables.

Entonces procederemos a explotar la vulnerabilidad automatizadamente que se encuentra en el LOGIN, utilizando SQLMAP y ejecutando el siguiente comando basándonos en los datos obtenidos por el Live HTTP Headers.

  • ./sqlmap.py -u "http://www.uap.edu.pe/intranet/logon2.asp" --data="usuario=&pw=&user=07&B7=++Conectar++" -p "usuario" --level=5 --risk=5 --dbs


Después de que la herramienta termine de auditar el servidor, esta detectara que el parámetro POST "usuario" es vulnerable, tal cual se muestra en la siguiente imagen:


A partir de allí, ya sabemos que dicho LOGIN es realmente vulnerable y lo hemos explotado con total satisfacción obteniendo así toda la base de datos del servidor.


Ahora si! con esta DB obtendremos los respectivos datos reales para poder logearnos satisfactoriamente en el LOGIN que tanto deseamos ;)

Espero les sirva.

Saludos. 

31 comentarios:

  1. Muy bueno el post, como se puede prevenir este tipo de ataques??

    ResponderEliminar
  2. Como siempre, muy bueno cale.

    ATTE: BTshell

    ResponderEliminar
  3. Merecio la pena la espera, excelente Cale.

    ResponderEliminar
  4. Genial, siempre estoy esperando nuevos artículos, no pares. Gracias.

    ResponderEliminar
  5. y si tiene fw activo

    ResponderEliminar
  6. Muy buena demo para demostrar un análisis y razonamiento antes de comenzar las pruebas de intrusión.

    Saludos.

    ResponderEliminar
  7. Buen post caleb deberías añadir esto hermano para el análisis sea anónimo

    http://www.el-palomo.com/2012/04/anonimato-en-internet-tor-polipo-y-sqlmap/comment-page-1/#comment-1321

    Excelente

    ResponderEliminar
  8. siempre publicando buenas notas hacerca de seguridad el punto es aprender espero sigas publicando cosas tan buenas e interesantes como siempre todos los post son interesantes en la google miles de blogs como el tuyo de un poco aqui y otro aca se aprende , sigue asi .

    ResponderEliminar
    Respuestas
    1. Aprende a escribir animal! ¿¿¿¿hacerca????

      Eliminar
  9. SQLMAP una Herramienta muy buena

    ResponderEliminar
  10. Esta información es muy valiosa, pero igual tengo la misma duda,¿cómo podemos evitar un ataque similar? o ¿qué sugieres para dejar un sistema lo mas seguro posible (aparte de ni usar windows jejejejeje)?

    ResponderEliminar
    Respuestas
    1. El problema en este caso no es el Windows sino la falta de validación de los campos del formulario. Para evitar este tipo de ataques es necesario validar los datos de entrada en el lado del servidor(principalmente) y en el lado del cliente(esta opción se puede saltar deshabilitando javascript del navegador)

      Eliminar
  11. Eres un muy malote calev! t admiro much! sldos dsd argentna

    ResponderEliminar
  12. tambn lo hubieras guardado lo de http live headers en un bloc de notas con cualquier nombre ejemplo code.txt y el codigo seria este:
    ./sqlmap.py -r /root/desktop/code -p usuario=&pw=&user=07&B7=++Conectar++ --dbs
    salu2 ;)

    ResponderEliminar
  13. very fucking cool bro! *O*

    ResponderEliminar
  14. Que buen Blog, te felicito, llevo una semana depredando la info de tu genial blog (leyendo), un saludo y estoy muy atento a la próxima entrega. Slds.

    ResponderEliminar
  15. publica de la Pagina Joomla, de la UNP - Sus vulnerabilidades los link y q tipo de vulnerabilidad es.

    ResponderEliminar
  16. can we have any update please, congratulations for the blog. King Regards.

    ResponderEliminar
  17. Buen post caleb deberías añadir alguna entrada nueva en tu blog, es mucho tiempo sin tener novedades. Slds.

    ResponderEliminar
  18. fue facil se nota que la seguridad es pesima.

    ResponderEliminar
  19. muy bueno el post 100% comprobado :p

    ResponderEliminar
  20. Hola amigo puedes aplicar eso a https://dued.uap.edu.pe/logeo.asp
    y obtener el usuario y clave de los docentes? por favor te lo pido

    ResponderEliminar
  21. No es que sea importante pero risk es un valor entre 0 y 3 ambos inclusive, por tanto nunca puede tomar un valor de 5. Y lo de que ya tiene usted los datos para poder logearse no lo veo yo tan claro tampoco. Es de suponer que la base de datos contendrá las contraseñas encriptadas con algún algoritmo no reversible. Seguramente alguna de ellas será vulnerable a una desencriptación con bases de datos de hashes pero eso no es seguro 100% que vaya a ser así. De cualquier manera la base de datos ha sido vulnerada y el ejemplo es muy didáctico.

    ResponderEliminar
  22. interesante mi estimado amigo, podrías sacarle la vuelta a esta web intranet.uandina.edu.pe
    te dejo mi correo por alguna novedad : raydenxp@hotmail.com

    ResponderEliminar
  23. Hola amigo, este blog esta muerto y es una lastima, comenzó con buen pie.

    Saludos.

    ResponderEliminar
  24. excelente demostracion

    ResponderEliminar
  25. Excelente! solo que tengo una duda , funciona para php? ejemplo: dejo en blanco las casillas y conecto... El live http no arroja nada. en cambio si inserto caracteres arroja lo siguiente...
    http://ejemplo/ejemplo/acceso.php
    POST /sistema/acceso.php HTTP/1.1
    tipo=p&usuario=%27+or+%271%27%3D%271&contrasena=sdfdss

    se puede explotar la vulnerabilidad con el mismo comando que insertaste pero con los datos que yo obtuve o tengo que modificar algo y donde?
    De ante mano muchas gracias :D!

    ResponderEliminar
  26. y si quiero abrir una tabla como se hace? en ese ejmplo
    gracias

    ResponderEliminar