Gestionando tareas, Nuevo Servicio de Project en O365.
13 febrero, 2020
SCRUM y QA, dos elementos fundamentales para la efectividad de los proyectos.
13 marzo, 2020

En los últimos tiempos se están multiplicando los casos de ciberataques y como consecuencia, las organizaciones están poniendo en marcha acciones dirigidas a la detección de vulnerabilidades. Este hecho, me ha motivado a escribir un post sobre Hacking web donde me gustaría recalcar la importancia de la seguridad y lo sencillo que puede ser franquearla por motivos de dejadez o despiste del desarrollador.

En este post hablaremos de diferentes maneras de atacar una página web con fines didácticos donde repetiré en muchas ocasiones lo siguiente:

“CUALQUIER ENTRADA DE DATOS A TU PÁGINA WEB HAY QUE TRATARLA Y CONTROLARLA”

Comencemos…

¿Qué es un hacker? Podemos definirlo como una persona más o menos competente con las tecnologías que intenta burlar las barreras de seguridad de empresas, organizaciones o particulares con diversos fines: Robar datos, sustraer dinero, realizar chantajes, demostrar que puede acceder, etc.

Dependiendo de los fines los catalogamos en tres categorías:

 

 

 

 

 

 

¿Qué es el Hacking? Es la búsqueda de vulnerabilidades en cualquier sistema que realiza un Hacker para conseguir sus fines.

¿Podemos hacer un sistema 100% seguro?, la respuesta es “NO”. Todavía…. Pero no debemos desanimarnos y debemos seguir haciendo lo posible para conseguirlo o acercarnos lo más posible a que lo sea.

“CADA VEZ  MÁS, DAMOS POR HECHO QUE TODOS LO SITIOS DONDE NAVEGAMOS SON SEGUROS… Y NADA MÁS LEJOS DE LA REALIDAD”.

En este artículo y en el siguiente, voy a tratar los métodos de hackeo que más se producen y que causalmente son los más sencillos. Podríamos agruparlos en:

  • Inyecciones de Código
  • Ataques de Ficheros
  • Robo de sesiones

Hacking web. Inyecciones de Código

Dentro de las inyecciones de código podemos encontrar los diferentes tipos de ataque:

  • SQL Injection
  • Cross-Site Scripting

Hacking web. SQL Injection

Podemos definirlo como manipulaciones de consultas en SQL para conseguir resultados, algo para la que no está pensada.

Dentro de esta categoría vamos a ver los dos casos más típicos:

  • Ataque de acceso
  • Ataque de obtención de información

Ataque de acceso

Imaginemos el típico sistema de logado para acceder a una página que usa esta sentencia para acceder:

Select user from users where user =’+usuario.text+’ and password =’+ contraseña.text+’

Si Usuario.text = Alvaro y Password.text = MiPass, la sentencia de acceso quedaría de la siguiente manera:

Select user from users where user =’Alvaro’ and password =’MiPass’

 

 

 

 

 

 

 

 

 

Si esta consulta que hemos realizado devuelve un dato, nos dejaría ingresar en la página.

Ahora bien, ¿qué pasaría si tal y como está resuelta la entrada de datos el hacker escribe lo siguiente en la caja de texto del usuario?:

Select user from users where user =’TePille’ or ‘1’=’1 ‘ –‘ and password =’MiPass’

 

 

 

 

 

 

 

 

 

Esta sencilla consulta le devolverá la lista de usuarios y se podrá logar en la web con el primer usuario de la lista “incluso sin conocer quien es” puesto que cumplirá la condición inyectada.

Analicemos cómo el sistema interpreta la consulta:

Select user from users where user =’TePille’ or ‘1’=’1′ –‘ and password =’MiPass’

Si nos fijamos, busca el Usuario que cumpla una de las dos condiciones que escribo. ‘TePille’ (que no cumple) o 1=1 (Cumple siempre).

¿Y la password? El hacker ha puesto los guiones para comentar en SQL SERVER, podrían ser asteriscos en Oracle o almohadilla en MySql, etc.

¿Qué hace esto? Comentar lo que venga a continuación de la condición que el hacker quiere que el sistema valide para saltarse la comprobación de la password.

“OS SORPRENDERÍA SABER LA CANTIDAD DE WEBS QUE HAY EN LA RED QUE PERMITEN LOGARSE AÚN HOY EN DÍA UTILIZANDO ESTE SENCILLO SISTEMA”.

Ataque de obtención de información

Ahora vamos a suponer que navegamos por una página de camping y vamos su buscador para encontrar artículos. El buscador nos devuelve el artículo buscado y su precio: Select * from  articulos where articulo= ‘+Articulo.text+’

 

 

 

 

 

 

 

 

Si existe el artículo concreto que hemos buscado, nos lo devolverá con su precio de esta forma: Select * from  articulos where articulo= ‘Saco’

Ahora bien, tal y como hemos hecho antes ¿qué pasaría si introdujéramos lo siguiente en el campo articulo?:

‘TePille’ union select null, ‘hola’  –’

La consulta quedaría de esta forma:

Select * from  articulos where articulo= ‘TePille ‘unión select null, ‘hola ‘ –’

Os preguntareis, ¿para qué quiere hacer eso el hacker? La respuesta es que está preparando un entorno para obtener información.

Este ejemplo es sencillo, pero aunque normalmente visualices unos campos determinados, las consultas devuelven más campos, como por ejemplo, identificadores que no se muestran por pantalla.

Pues bien, como sabemos una UNIÓN obliga a que ambas consultas tengan que tener los mismos campos. Pues bien, el hacker está usando la UNIÓN como medio para averiguar cuántos campos devuelve la consulta para posteriormente poder robar información.

Imaginemos que el ejemplo anterior además del articulo y precio, devuelve un ID que no se muestra en pantalla.

Select * from  articulos where articulo= ‘TePille ’unión select null,’hola’ –’

 

Ahora, como se puede ver, saca el resultado puesto que este listado devuelve tres campos.

Como el hacker sabe que devuelve tres campos puede hacer lo siguiente:

SELECT * from  articulos where articulo= ‘TePille ‘

UNION SELECT NULL,SCHEMA_NAME(schema_id) AS schema_name  ,name AS table_name  

FROM sys.tables   ORDER BY schema_name, table_name –’

Con esta sencilla consulta el hacker podría visualizar los esquemas y tablas de la base de datos del sitio al que esté atacando.

 

Hacking web. Cross-Site scripting

Esta vulnerabilidad permite la ejecución de un script en el lado del cliente al visualizar una página web.

Los dos tipos principales son:

  • XSS Almacenado
  • XSS Reflejado

Hacking web. Ataque XSS Almacenado

Es aquel que se almacena en la Base de datos del servidor. Desde allí se carga y se interpreta en el navegador de otro usuario.

Vamos a realizar un ataque de este tipo en un Foro de Test en los que se comenta sobre una película.

Imaginaros que quien ha programado el foro hace la consulta en la Base de datos y escribe directamente en cada caja de texto los datos recuperados sin sanearlos.

Robo de sesión

¿Qué pasaría si el hacker escribe la siguiente línea de código en el comentario?

<SCRIPT>alert(document cookie)<SCRIPT>

Posteriormente pulsa “Submit”

Al pulsar sobre el nombre de “ALVARO B” para ver su comentario, como la aplicación carga directamente lo escrito, al mostrarlo el navegador interpretará que se quiere ejecutar un script y mostrará la sesión del usuario que ha pulsado sobre el nombre que ha puesto el hacker.

Visto lo anterior, imaginaos que en vez de poner un “Alert” para que se vea bien el ejemplo, hubiera puesto un Windows.Location. Esta instrucción redirige la petición a una página que tiene el hacker y manda como parámetro la sesión del usuario. Después la guarda en un fichero.

“EL HACKER LE HABRÍA ROBADO LA SESIÓN AL USUARIO SIN PROBLEMA. AHORA PODRÍA UTILIZAR EL ADDON DE FIREFOX “COOKIES MANAGER” PARA MANIPULAR Y EDITAR LAS COOKIES PARA QUE PUEDA SECUESTRAR LA SESIÓN”.

Phishing

También se podría utilizar para hacer lo que se denomina Phishing, que consiste en suplantar la identidad de un usuario.

Ejemplo:

  1. El hacker haría una página html idéntica a la original en la que al usuario que acceda le muestre un mensaje indicando que ha expirado la sesión y que si quiere poder leer o escribir en el foro debe volver a registrarse.
  2. El hacker pondría en el foro Original un script de tipo location que le redirigirá a su página.
  3. Nada más acceder en una página similar a la original, le aparecerá un mensaje indicando que ha expirado su sesión.
  4. Si el usuario no se percata del cambio de página, volverá a registrarse.
  5. En ese momento el hacker guardará el usuario y contraseña de la víctima y podrá acceder al foro original suplantando su identidad.
Deface

Por último, con el ejemplo anterior vamos a comentar como podríamos hacer este tipo de ataque que consiste en inutilizar una parte de un programa o una web.

Es tan sencillo como poner un script de tipo Windows.location en el nombre del usuario.

Al pulsar “submit”, si el desarrollador no ha tratado el texto que he metido en la caja de texto usuario, al mostrar el listado de participantes en el Foro, la aplicación redirigirá a la página de google a todos los usuarios que intenten verla:

Esto dejará inutilizada esa parte de la aplicación hasta que el administrador encuentre el usuario en que se ha inyectado el script y lo elimine de la Base de datos.

Hacking web. Ataque XSS Reflejado

El hacker consigue que el usuario ejecute la página con el código inyectado sin guardarse en base de datos.

Para saber si una web es vulnerable a este tipo de ataques, solo tienes que buscar cualquier buscador por palabras clave que tenga el sitio web e introducir este código:

<script type = ‘text / javascript’> alert (‘soy vulnerable a XSS reflejado’); </ script>

Si se muestra un mensaje emergente con la frase (soy vulnerable a XSS reflejado), significa que es una web vulnerable.

Este tipo de ataque es el más común y normalmente viene en forma de algún enlace incluido en un mail.

Robo de sesión

Imaginemos una típica página de compras online. Vamos a introducir en el buscador de artículos este script: <script type = ‘text / javascript’> alert (‘soy vulnerable a XSS reflejado’) </script>

Si se nos muestra el siguiente mensaje es vulnerable:

Fijaros en la url, a cualquiera que ejecute esa url en el navegador le aparecerá el mensaje de alerta inyectado anteriormente.

“En este caso, para que se entienda mejor el ejemplo, se muestra por el método get pero podría hacerse también por el método post”.

Una vez que tenemos la página candidata, ahora utilizaremos el ya famoso Windows.location para que nos envíe por parámetro la sesión del usuario y cogeremos la url generada de la página original.

Vamos a camuflar esa url en un correo indicando una promoción del 50% en calzado.

Este correo lo vamos a mandar de forma masiva a un montón de usuarios.

Si por casualidad algún usuario está registrado en esa página de compras, al pinchar en mi enlace accederá a la página de compras y al ejecutar el script dentro de la url del enlace de mi correo, redirigirá a una página en la que el hacker habrá creado su sesión del usuario.

Hacking web. Como evitar estos ataques de cara al desarrollador

  • Validar y tratar siempre cualquier entrada de datos al sistema.

    • Si se espera un tipo de dato, que el dato introducido solo pueda ser de ese tipo.
    • Sustituir las llaves o paréntesis por su homólogo en código Html.
    • Dejar introducir solo algunos signos de forma controlada.
    • No mostrar nunca los datos tal cual los introduce el usuario.
      • Filtrar caracteres especiales en las consultas.
      • Delimitar los valores de las consultas
    • Etc…
  • Poner tiempos máximos de sesión
  • Fundamental
    • Nunca hay que fiarse de que el usuario registrado sea el usuario legítimo. A la hora de hacer modificaciones o acciones sensibles, hay que pedir validaciones que solo el usuario legítimo debería saber.
    • Siempre que un usuario quiera hacer un cambio de contraseña, tiene que introducir la contraseña anterior. (De esta forma, aunque te roben la sesión o te suplanten no podrán cambiarte las credenciales).

En el siguiente Post de: Hacking web. Ataques habituales y maneras sencillas de defendernos (parte 2) nos centraremos y veremos ejemplos de ataques de ficheros y robo de sesiones.

Hasta pronto.

 

Si queréis comentarnos lo que sea podéis hacerlo en info@kabel.es
También podéis seguirnos en Twitter, LinkedIn, Facebook

 

Kabel

 

Licencia de Creative CommonsEste obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.

Compártelo: Share on FacebookTweet about this on TwitterShare on LinkedInPin on Pinterest

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

NEWSLETTER