Se ha denunciado esta presentación.
Se está descargando tu SlideShare. ×

Curso basicoseguridadweb slideshare7

Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Cargando en…3
×

Eche un vistazo a continuación

1 de 60 Anuncio

Más Contenido Relacionado

Similares a Curso basicoseguridadweb slideshare7 (20)

Anuncio

Más reciente (20)

Anuncio

Curso basicoseguridadweb slideshare7

  1. 1. SEGURIDAD Y APLICACIONES WEB Licencia Creative Commons Esta obra esta distribuida bajo una licencia de: <ul><li>Reconocimiento (Attribution): En cualquier explotación de la obra autorizada por la licencia hará falta reconocer la autoría.
  2. 2. No Comercial (Non commercial): La explotación de la obra queda limitada a usos no comerciales.
  3. 3. Compartir Igual (Share alike): La explotación autorizada incluye la creación de obras derivadas siempre que mantengan la misma licencia al ser divulgadas. </li></ul>
  4. 4. SEGURIDAD Y APLICACIONES WEB Practica SQLi Práctica SQL Injection
  5. 5. SEGURIDAD Y APLICACIONES WEB Practica SQLi Para la realización de las prácticas vamos a utilizar una suite de aprendizaje que consiste en un una imagen virtualbox que contiene instaladas varias aplicaciones vulnerables y algunas herramientas para facilitar la realización de ataques sobre ellas. Esta imagen se llama Web Security Dojo. Ha sido preparada por Maven Security y se puede encontrar en: http://www.mavensecurity.com/web_security_dojo/
  6. 6. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>En esta imagen podremos encontrar como aplicaciones vulnerables: </li></ul><ul><ul><li>OWASP's Webgoat
  7. 7. Google's gruyere
  8. 8. Damn Vulnerable Web App
  9. 9. Hacme Casino
  10. 10. OWASP Insecure WebApp
  11. 11. W3af's test website </li></ul></ul>
  12. 12. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>Burp Suite
  13. 13. w3af
  14. 14. sqlmap
  15. 15. arachni
  16. 16. metasploit
  17. 17. Zed Attack Proxy
  18. 18. OWASP Skavenger
  19. 19. OWASP Dirbuster
  20. 20. Paros </li></ul><ul><li>Webscarab
  21. 21. Ratproxy
  22. 22. skipfish
  23. 23. websecurify
  24. 24. davtest
  25. 25. J-Baah
  26. 26. JBroFuzz
  27. 27. Watobo
  28. 28. RATS
  29. 29. helpful Firefox add-ons </li></ul>Herramientas:
  30. 30. SEGURIDAD Y APLICACIONES WEB Practica SQLi A continuación iremos realizando diferentes prácticas donde veremos diferentes herramientas y ataques que se usan para descubrir y explotar vulnerabilidades en aplicaciones web y sistemas. <ul><li>En cada una de las prácticas se explicarán brevemente las herramientas que usamos para facilitar la explotación de cada vulnerabilidad. </li></ul>
  31. 31. SEGURIDAD Y APLICACIONES WEB Practica SQLi Webgoat es una aplicación ofrecida por OWASP y es una aplicación diseñada para el aprendizaje en pentesting con diversas vulnerabilidades cuya explotación es guiada por la aplicación.
  32. 32. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>Para acceder: </li></ul><ul><ul><li>Applications->Targets->Webgoat Start
  33. 33. Se abrirá una ventana de firefox con la página inicial cargada.
  34. 34. Usuario: guest
  35. 35. Contraseña:guest </li></ul></ul>
  36. 36. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  37. 37. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  38. 38. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>Para aumentar la comodidad en la realización de las pruebas usaremos también webScarab
  39. 39. WebScarab es otra aplicación de Owasp y es una aplicación para facilitar las auditorias web. </li></ul><ul><ul><li>Funciona como un proxy que intercepta toda la comunicación entre el navegador web y el servidor permitiéndonos entre otras cosas: editar los parámetros get y post que se intercambian. </li></ul></ul>
  40. 40. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  41. 41. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  42. 42. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>Para usar webScarab: </li></ul><ul><ul><li>Arrancamos webScarab
  43. 43. Configuramos el navegador para que apunte como proxy a webScarab
  44. 44. IP: 127.0.0.1
  45. 45. Puerto: 8008
  46. 46. Configuramos webScarab para que intercepte las peticiones get y post </li></ul></ul>
  47. 47. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  48. 48. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  49. 49. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>SQL Injection </li></ul><ul><ul><li>Vamos a realizar algunas de las lecciones del apartado “Injection Flaws”
  50. 50. Objetivo: </li><ul><li>Realizar ataques SQLi
  51. 51. Entender como funcionan
  52. 52. Entender como prevenirlos </li></ul></ul></ul>
  53. 53. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>Práctica 1:El objetivo es obtener todos los registros de la tabla que consulta la aplicación para realizar su trabajo legitimo. </li></ul><ul><ul><li>En esta lección se nos indica la query que se esta ejecutando por debajo.
  54. 54. Tendremos que: </li><ul><li>Interceptar la petición con Webscarab
  55. 55. Modificar el valor de tal forma que la query que se ejecuta sobre la BD devuelva todos los registros </li></ul></ul></ul>
  56. 56. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  57. 57. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>Pulsamos en “go” y nos saltará una ventana de websacarab con la petición http que se realiza al servidor.
  58. 58. Nos aparecerán todos los campos que se intercambian y podremos modificarlos pulsando sobre ellos.
  59. 59. Una vez modificados pulsaremos en “Accept Changes” para enviar la solicitud modificada al servidor
  60. 60. La aplicación devolverá el resultado de la operación </li></ul>
  61. 61. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  62. 62. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  63. 63. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  64. 64. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>La consulta es la siguiente </li></ul>SELECT * FROM weather_data WHERE station = [station] En lugar de [station] la aplicación colocará lo que nosotros introduzcamos en webscarab por lo que si introducimos hola , la consulta que se realizará será: SELECT * FROM weather_data WHERE station = hola
  65. 65. SEGURIDAD Y APLICACIONES WEB Practica SQLi ¿Que habría que introducir para que la consulta devuelva todos registros de la tabla? ¿?
  66. 66. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>El ataque se resuelve inyectando </li></ul><ul><ul><li>101 OR 1=1; </li></ul></ul><ul><li>Quedando la consulta ejecutada: </li></ul>SELECT * FROM weather_data WHERE station = 101 or 1=1; Lo que es lo mismo que SELECT * FROM weather_data, ya que la clausula where siempre devolverá true.
  67. 67. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  68. 68. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>Una vez realizado el caso con éxito la aplicación se protege utilizando una consulta parametrizada
  69. 69. Al intentar el ataque de nuevo nos indica que existe un error de parseo ya que el campo introducido no es un entero </li></ul>
  70. 70. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  71. 71. SEGURIDAD Y APLICACIONES WEB Practica SQLi Vamos a revisar un poco como funciona todo esto a nivel código con otra práctica
  72. 72. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>Seleccionamos LAB:SQL Injection </li></ul><ul><ul><li>Aparece la siguiente práctica.
  73. 73. El objetivo es logarnos como el usuario administrador
  74. 74. En este caso nos encontraremos con algunas dificultades: </li><ul><li>Existe un límite a la longitud del campo password
  75. 75. El campo usuario viene en un combo
  76. 76. No tenemos información de la query que se ejecuta a priori (Blind SQL injection) </li></ul></ul></ul>
  77. 77. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>Superando las dificultades: </li></ul><ul><ul><li>Las dos primeras dificultades se solucionan con el uso de WebScarab (al igual que si existiera alguna validación javascript en la página)
  78. 78. La última nos obliga a pensar en como debería ser la query que se esta ejecutando:
  79. 79. ¿Select * from tablaEmpleados where numeroEmpleado=x AND pass=y? </li></ul></ul>
  80. 80. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  81. 81. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>En este caso para ver más claramente que esta pasando en la aplicación pasaremos a ver el código.
  82. 82. Internamente se esta componiendo la query que se va a realizar en la BD de la siguiente manera:
  83. 83. String query = &quot;SELECT * FROM employee WHERE userid = &quot; + userId + &quot; and password = '&quot; + password + &quot;'&quot;; </li></ul>
  84. 84. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>Probaremos con algo muy parecido al caso anterior
  85. 85. En el campo password injectaremos: </li></ul><ul><ul><li>A' or '1'='1 </li></ul></ul>
  86. 86. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>¿Como lo evitamos? </li></ul>String query = &quot;SELECT * FROM employee WHERE userid = ? and password = ?&quot;; try { Connection connection = WebSession.getConnections(s); PreparedStatement statement = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); statement.setString(1, userId); statement.setString(2, password); ResultSet answer_results = statement.executeQuery();
  87. 87. SEGURIDAD Y APLICACIONES WEB Practica SQLi ¿Y solo se puede hacer esto con SQL injection? NOOOOOO Podemos insertar o modificar datos
  88. 88. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>Seleccionamos Modify Data with SQLi
  89. 89. Nos informan de: </li></ul><ul><ul><li>La tabla que pretendemos injectar se llama salaries
  90. 90. Los campos son userid y salary
  91. 91. Debemos cambiar el sueldo de jsmith </li></ul></ul><ul><li>¿Como lo hacemos? </li></ul>
  92. 92. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>jsmith' ; update salaries set salary=5000 where userid = 'jsmith
  93. 93. Podemos utilizar el punto y coma para ejecutar varias sentencias
  94. 94. Tras ejecutar esta query podemos volver a poner jsmith para comprobar que se ha modificado la tabla </li></ul>
  95. 95. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>Solución: </li></ul>probando Login succeeded for username:admin<script>alert(&quot;hola&quot;+document.cookie);</script> <ul><li>probando%0ALogin%20succeeded%20for%20username%3Aadmin%3Cscript%3Ealert(%22hola%22%2Bdocument.cookie)%3B%3C%2Fscript%3E </li></ul>
  96. 96. SEGURIDAD Y APLICACIONES WEB Practica SQLi Pero,... aquí falta algo ¿ como sabemos los nombres de las tablas y los campos para realizar estas inyecciones?
  97. 97. SEGURIDAD Y APLICACIONES WEB Practica SQLi Para poder extraer estos datos tan necesarios necesitamos avanzar un poco más: <ul><li>Conocer la BD que estamos atacando (MySql, Oracle, MSQL,...)
  98. 98. Obtener datos sobre la estructura interna de la misma. </li></ul>
  99. 99. SEGURIDAD Y APLICACIONES WEB Practica SQLi Se pueden dar dos circunstancias: <ul><li>La aplicación esta tan mal construida que nos informa de estos datos en pantalla. (Volcado de excepción en pantalla...)
  100. 100. La aplicación solo informa de que se ha producido un error de manera genérica (Blind SQLi) </li></ul>
  101. 101. SEGURIDAD Y APLICACIONES WEB Practica SQLi En cualquier caso, una vez detectada una SQLi se pueden utilizar herramientas que automaticen el proceso de extracción de datos de la BD. En esta práctica vamos a ver como funciona sqlmap: <ul><li>Vamos a la máquina virtual DOJO
  102. 102. Arrancamos la aplicación DVWA
  103. 103. Arrancamos sqlmap (se abrirá una consola) </li></ul>
  104. 104. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  105. 105. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  106. 106. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>Nos logamos en la página de DVWA </li></ul><ul><ul><li>admin
  107. 107. Password </li></ul></ul><ul><li>Pulsamos en la opción SQL Injection
  108. 108. Bajamos el nivel de seguridad de la aplicación para facilitar la práctica </li></ul><ul><ul><li>Pulsamos en DVWA Security
  109. 109. Bajamos el nivel a low </li></ul></ul><ul><li>Comprobamos la vulnerabilidad 1' or '1'='1 </li></ul>
  110. 110. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  111. 111. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  112. 112. SEGURIDAD Y APLICACIONES WEB Practica SQLi Ahora mismo estamos logados en la aplicación y tenemos una cookie de session asignada, para poder usar sqlmap tendremos que pasarle dicha variable para obtenerla: <ul><ul><li>Tools->Cookies Manager+ </li></ul></ul>
  113. 113. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>Apuntamos el valor de la variable PHPSESSID </li></ul><ul><ul><li>En mi caso(r0ne9pqfj3du14d64bttchgrj5) </li></ul></ul><ul><li>Ejecutamos en la consola de SQLMAP la siguiente sentencia
  114. 114. python sqlmap.py -u 'http://localhost/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#' --cookie='PHPSESSID=r0ne9pqfj3du14d64bttchgrj5; security=low' --string=&quot;Surname&quot; --dbs </li></ul>
  115. 115. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>Tras la ejecución de la sentencia SQLMAP nos devolverá:
  116. 116. [02:28:54] [INFO] the back-end DBMS is MySQL
  117. 117. web server operating system: Linux Ubuntu 10.04 (Lucid Lynx)
  118. 118. web application technology: PHP 5.3.2, Apache 2.2.14
  119. 119. back-end DBMS: MySQL 5.0
  120. 120. [02:28:54] [INFO] fetching database names
  121. 121. available databases [4]:
  122. 122. [*] dvwa
  123. 123. [*] information_schema
  124. 124. [*] mysql
  125. 125. [*] w3af_test </li></ul>
  126. 126. SEGURIDAD Y APLICACIONES WEB Practica SQLi Ya sabemos las tecnologías que usa la aplicación y el nombre de las BD que contiene el servidor ¿Que más podríamos sacar? Nombres de tablas Usuarios Passwords …. TODO
  127. 127. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>Vamos a ir añadiendo al comando ejecutado al principio los siguientes parámetros </li></ul><ul><ul><li>--tables
  128. 128. --users
  129. 129. --passwords </li></ul></ul><ul><li>En fin que podemos obtener facilmente toda la información que necesitemos de la BD </li></ul>
  130. 130. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  131. 131. SEGURIDAD Y APLICACIONES WEB Practica SQLi
  132. 132. Algunas opciones interesantes SQL map: ( python sqlmap.py -h) --is-dba Detect if the DBMS current user is DBA --roles Enumerate DBMS users roles --dbs Enumerate DBMS databases --columns Enumerate DBMS database table columns --schema Enumerate DBMS schema --dump Dump DBMS database table entries --dump-all Dump all DBMS databases tables entries --sql-query=QUERY SQL statement to be executed --sql-shell Prompt for an interactive SQL shell SEGURIDAD Y APLICACIONES WEB Practica SQLi
  133. 133. SEGURIDAD Y APLICACIONES WEB Practica SQLi <ul><li>En esta prueba tenemos unos altos privilegios porque la aplicación esta usando un usuario root para conectarse con la base de datos.
  134. 134. En todo caso podremos realizar las mismas acciones que el usuario que se conecta a la BD desde la aplicación por lo que siempre es conveniente que este usuario tenga los mínimos privilegios posibles. </li></ul>
  135. 135. SEGURIDAD Y APLICACIONES WEB Practica SQLi Como hemos visto a través de una vulnerabilidad relativamente sencilla de evitar se crea un agujero de seguridad cuya criticidad es variable en función de la configuración del resto de capas que nos vamos encontrandonos: <ul><li>Usuario que utiliza la aplicación para acceder a BD
  136. 136. Vulnerabilidades en la BD
  137. 137. Usuario con que se lanza la BD
  138. 138. Vulnerabilidades en el SO </li></ul>
  139. 139. SEGURIDAD Y APLICACIONES WEB Practica SQLi La criticidad de una vulnerabilidad SQLi no se queda en lo visto hasta ahora que consistiría en acceder a todos los datos y privilegios que el usuario con el que se ejecuta la aplicación. Tenemos acceso a la ejecución de comandos en la BD con lo que en caso de existir vulnerabilidades en la BD podríamos aprovecharlas para escalar privilegios en la mismo o incluso tener acceso a una shell del sistema operativo con lo que poder seguir adentrándonos en el sistema.

×