Herramientas Web y Fuzzing en Pentesting
Luego de la fase de reconocimiento y escaneo, muchas veces nos encontramos con el puerto 80 en estado “open” o ciertas direcciones IP que nos redirigen hacia un sitio web. Por lo tanto, el uso de diversas herramientas web y fuzzing se vuelven fundamentales para recopilación de información en entornos de Pentesting.
En este artículo estaremos viendo diferentes herramientas para búsqueda de información como directorios, programas, versiones y todos aquellos aspectos esenciales que cumplen con el funcionamiento de un sitio web.
Table of Contents
ToggleWhatweb
Whatweb es una herramienta de código abierto muy usada en auditorías de ciberseguridad debido a su eficaz escaneo para recopilar información con respecto a tecnologías utilizadas por un sitio web. Estas pueden ser:
- Gestor de contenidos.
- Librerías Javascript.
- Tipos de headers.
- Servidores web.
- Versiones de software.
- ID de cuentas de usuarios.
- Cookies.
Entre otros..
No obstante, esta herramienta cuenta con más de 700 plugins que nos permite conocer diversas funcionalidades, como las mencionadas anteriormente y aún más.
Por lo tanto, podemos realizar un escaneo pasivo y activo de la información con whatweb. Recordemos que la recolección pasiva de información, consiste en obtener la mayor cantidad de datos de forma indirecta, es decir, sin la interacción visible de la aplicación web auditada. En cambio, un escaneo de información activa consiste en interactuar de forma directa con dicho sistema web.
Veamos algunos ejemplos:
Escaneo básico
Si deseamos obtener datos “básicos” de una aplicación web, simplemente podríamos realizar la siguiente sintaxis:
#whatweb example.com
Como podemos observar, dicha consulta nos permite ver un resumen de los encabezados HTTP, dirección IP, complementos destacados, país, cookie y tipo de script.
Escaneo avanzado
Ahora bien, para un escaneo activo y más detallado deberíamos usar la opción -v. También, lo podemos hacer mediante una dirección IP como se muestra a continuación:
Esto es una parte de la cantidad de información que me devuelve la consulta. Entonces, con este método podemos obtener información mucho mas detallada (y menos sigilosa) como puede ser todos el header, complementos instalados, cadenas del servidor, etc..
En el caso de querer saber los plugins utilizados por este comando debemos ejecutar whatweb -l.
Curl
El comando curl (Cliente URL), como su nombre lo indica, es una herramienta utilizada como cliente para verificar la conectividad y transferir datos desde y hacia un sitio web utilizando el protocolo adecuado. Estos pueden ser:
HTTP y HTTPS
TELNET
FTP y FTPS
POP3 y POP3S
SMB y SMBS
SFTP
SCP
GOPHER
SMTP y SMTPS
IMAP e IMAPS
LDAP y LDAPS
Su funcionamiento está basado en la librería libcurl, la cual es una herramienta open source del lado del cliente.
La sintaxis básica de este comando sería:
#curl opciones URL
Opciones más usadas
Si queremos ver la conectavidad Request-Response de una URL simplemente podríamos hacer:
curl -v https://example.com
Con la opción -v le indicamos que nos muestre la salida en modo verbose.
Para ver las cabeceras que posee un sitio web:
curl -I https://example.com
En el caso de querer descargar algún archivo en el directorio actual de trabajo podríamos usar la opción -O. También, con la opción -o, podemos redireccionar la salida a un archivo en particular (en caso de no existir lo creará):
curl https://example.com -o test.txt
Si queremos ingresar a una URL segura cuyo certificado sea SSL/TLS puede pasar que tengamos algún error o el CN no conicide. Para estos casos podemos hacer uso del siguiente parámetro:
curl – -insecure https://example.com
Si queremos descargar un archivo a través del protocolo ftp haríamos:
curl -u user:password ftp://directory/style.css -o test.txt
Con la opción -u hemos especificado usuario y contraseña para conectarnos vía ftp.
Lo mismo podemos hacer vía el método GET:
curl -s -G http://IP_adress:Port -u user:password
Con la opción -s indicamos el modo silent y con -G transmitimos una petición GET para conectarnos a dicha URL a través de la opción -u
Para guardar las cookies de un sitio en un archivo txt podríamos realizar lo siguiente:
Como podemos ver, hemos obtenido la cookie de la plataforma Tryhackme en el archivo mis_cookies.txt y el documento HTML que nos devuelve el servidor en index.html.
En el caso de querer enviar cookies a un sitio web:
curl – -cookies mis_cookies.txt https://example.com
Podemos enviar el User-Agent a modo de inyección a un sitio web:
Curl -A “Nuew_User_Agent” https://example.com
Esto lo especificamos detalladamente en el apartado de vulnerabilidad Logpoisoning de LFI.
wfuzz
El fuzzing (Fuzz Testing) consiste en realizar un escaneo a través de diferentes rutas o directorios aleatorios a una apliación web, con el fin de encontrar posibles vulnerabilidades o fallos de seguridad.
Esta técnica es una de las más usadas con diversas herramientas web y fuzzing en auditorías de pentesting, ya que podemos comprobar validaciones de entradas, manejo de errores, análisis estático y dinámico en aplicaciones, entre otras cosas. Esto permite abordar de forma proactiva todos los posibles ataques malintencionados a los equipos de seguridad y desarrollo en una organización, y de este modo, mejorar la seguridad y prevenir futuros fallos.
Existen muchos tipos de herramientas web para fuzzing que pueden aplicarse a sistemas operativos como aplicaciones android o iOS en pentesting. En este artículo, nos centraremos en aquellas aplicadas en sitios web.
Herramientas y parámetros
Existen diversas herramientas para fuzzing como dirb, gobuster, dirsearch, etc.. El próposito es mismo: Buscar directorios desconocidos en una aplicación web. Para esto, haremos uso de wfuzz, la cual está hecha en Python y es una de las más usadas ya que viene por defecto en algunas distribuciones como Kali Linux.
Las opciones para búsquedas de directorio más usadas son las siguientes:
– c: Permite la salida en color.
–hc: Lo usamos para especificar los código de estado que NO queremos imprimir.
-w: Especificamos la ruta con el conjunto de directorios a buscar. Estos suelen ser:
/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
/usr/share/wordlists/dirbuster/directory-list-2.3-small.txt
/usr/share/wordlists/dirbuster/directory-list-lowecase-2.3-medium.txt
/usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-small.txt
/usr/share/wordlists/dirbuster/directory-list-1.0.txt
/usr/share/wordlists/dirbuster/directories.jbrofuzz
/usr/share/wordlists/dirbuster/apache-user-enum-1.0.txt
/usr/share/wordlists/dirbuster/apache-user-enum-2.0.txt
–t: Temporizador
–u: Se usa para indicar la URL
Listar directorios ocultos
En el siguiente ejemplo estaremos listando los directorios ocultos de nuestra máquia DVWA:
Como vemos, empezará a buscar directorio por directorio incluidos en dicha ruta. Si nos fijamos bien, vemos que al final de la URL hemos colocado “FUZZ”, con esto especificamos dónde queremos probar nuestro directory-list-2.3-medium.txt (ya que suele ser el más usado). Como resultado empezaremos a obtener códigos de estado 200,301, 403, etc. Cabe mencionar que este proceso puede variar en la velocidad, con respecto el temporizador que coloquemos o la herramienta que usemos.
Buscar subdominios
Ahora bien, usaremos wfuzz para encontrar posibles dns o subdominios (virtual hosting). Para esto usaremos la opción ‘-H‘ de la siguiente manera:
Como vemos, esta vez hemos colocado FUZZ por delante del dominio. Esto se debe porque todo subdominio se escribe por delante (o a la izquierda) del dominio. Por lo tanto, ese será el lugar donde se probarán todas las palabras. Como resultado obtendremos:
En este caso, sí nos aparecen códigos 404. Sin el embargo, podemos ver que se repite una misma línea varias veces, y tal vez, no nos interese dicho contenido. Entonces, si si esto ocurre (Como la línea 10 que se muestra en la imagen), podríamos ocultarla colocando – -hl 10.
Searchsploit
Llegados a este punto, y con todas las herramientas recomendadas para obtener diferente tipo de información, no puede faltar Searchsploit. Esta herramienta, como su nombre lo indica, nos permite realizar una búsqueda de manera off-line (sin usar internet) a través de la base de datos más grande de exploits “exploit-database”.
Podemos ver las últimas versiones para distintos sistemas operativos y el estándar CVE (Common Vulnerabilities and Exposures) donde se encuentran de forma pública distintas vulnerabilidades con su respectiva fecha.
Ahora bien, en base a su sintaxis en la imagen anterior, veamos algunos ejemplos de esta herramienta:
Buscar por título algún exploit hecho en Python:
searchsploit -t python
Una buena manera es enumerar la salida con el comando de filtro nl.
Podemos ver que cada exploit cuenta con un Path. Por tanto, si queremos copiarnos algunos de estos en nuestro directorio actual de trabajo deberíamos hacer:
searchsploit -m PATH
Por ejemplo, en el caso de querer copiar la primera línea perteneciente a la vulnerabilidad 27728 haríamos:
Veamos los que nos dice este archivo:
Ejemplos complementarios
Si antes de descargar algún exploit queremos examinarlo o ver más información podemos hacer uso de la opción -x de la siguiente manera:
searchsploit -x 27728
Incluso, luego de la fase de escaneo vía el comando nmap, podemos guardar la salida de dicha ejecución en un archivo xml y, en base a esto, podemos buscar algún exploit con respecto a dicha información escaneada a través del parámetro – -nmap. Por ejemplo:
nmap -sV IP_adress -oX resultado.xml
Una vez realizado el escaneo y guardado el resultado en resultado.xml buscaremos algún exploit de la siguiente manera:
searchsploit -x – -namp resultado.xml
Por lo tanto, esta es una exelente herramienta para búsqueda de exploits y vulnerabilidades. De igual manera, no debemos dejar de buscar en nuestros navegadores más información con respecto a actualizaciones, comentarios de la gente, algún dato más relevante, etc.. Con el fin de sumar más información a nuestra búsqueda.