Knockpy - OSINT para la búsqueda de subdominios

Para comenzar con este post es muy importante saber qué es un dominio de Internet y las partes que lo componen. Un dominio de Internet es un sistema de direcciones que está formado por tres elementos diferentes que son los siguientes: el subdominio, el dominio y la extensión.


Un subdominio se crea a partir de un dominio, agregando un conjunto de caracteres antes del dominio, separando estos del dominio por un punto. Por ejemplo para el dominio "example.com" se pueden crear los subdominios "www.example.com", "mail.example.com", "ftp.example.com", etc.

Los subdominios no se registran como los dominios, tan solo se crean usando las herramientas que brinda el proveedor de dominios y/o hosting.

Un subdominio es útil cuando se desea que las personas que visitan una pagina o carpeta de un website vayan más fácilmente a la dirección en cuestión, tipeando solo el subdominio y no la dirección larga completa. También se usa para crear micrositios, es decir, websites dedicados a un tema en particular sin que se mezclen las páginas con las del website principal. Con esto se tiene un website más ordenado y de acceso más fácil para los visitantes.

En un Pentest, en la fase inicial que generalmente es llamada Information Gathering, es una buena idea buscar aplicaciones (quizás exóticas, de pruebas u olvidadas) que se ejecutan en subdominios. En esta etapa se necesita obtener la mayor cantidad de información posible de un sistema para que el consultor se haga una idea de la estructura del objetivo, también en caso de necesitar localizar un determinado posible servicio que ofrezca un dominio.

Hay muchas técnicas para el descubrimiento de un subdominio, a partir de la utilización de los recursos públicos con fuerza bruta (DNS Brutting). Pero la combinación de métodos logrará resultados una solución más amplia durante pruebas de seguridad informática.

La fuerza bruta es la metodología por la cual se intenta probar con una serie de palabras (diccionario) y comprobando la respuesta del servidor de manera automatizada. Y para ello se utilizará la herramienta knock, un buscador de subdominios.

Knock

Knockpy, según lo que se lee en el Git oficial, es una herramienta realizada en el lenguaje de programación python que ha sido diseñada para enumerar los subdominios de un dominio a través de una lista de palabras. Está creado para buscar también la transferencia de zona DNS y para intentar omitir el registro DNS comodín si está habilitado.

Soporta consultas a subdominios mediante VirusTotal (estableciendo previamente la API_KEY dentro del archivo config.json).

Este programa es autónomo, por lo que no necesita ser instalado en ningún lugar en particular. Todo lo que necesita es una versión reciente de Python 2.x. Sólo para utilizar la opción de transferencia de zona (-zt) se debe instalar el módulo dnspython, de lo contrario se puede prescindir de el.

Si el servidor de nombres permite que se produzcan transferencias de zona, todos los nombres DNS y direcciones IP alojados por el servidor de nombres se devolverán en texto ASCII legible por el usuario.

Descarga

Para descargar el aplicativo sólo se necesita hacer un clonado del repositorio y ejecutar el setup que ya viene instalado:

git clone https://github.com/guelfoweb/knock

cd knock/

python setup.py install


Usage

La forma básica de ejecutar esta herramienta es de la siguiente forma:

python knock.py <URL>

Transferencia de Zona

El servicio DNS es un servicio básico que debe estar funcionando siempre. Por esto, para cada servidor maestro en una zona, se suelen configurar varios servidores esclavos que se sincronizan de forma automática con los datos del maestro para poder atender a los clientes en su lugar, distribuyendo la carga y aportando tolerancia a fallos.

Un servidor esclavo de una zona puede tener la misma autoridad que el servidor maestro. Cuando se debe resolver una consulta, tanto el servidor maestro como el esclavo tienen la misma capacidad. La única diferencia es que en el servidor maestro probablemente los archivos de zona se han generado de forma manual mientras que en el servidor esclavo se han descargado desde el maestro.

Por lo tanto la transferencia de zona es el proceso por el cual un esclavo descarga la zona desde el maestro.

El parámetro "axfr" es el que permite la transferencia de zona desde el DNS maestro, ya que se usa para sincronizar y actualizar datos de la zona cuando se produjeron cambios. Si bien la transferencia puede hacerse vía "axfr", también es posible hacerla de forma incremental, denominada entonces "ixfr".

Cuando se ejecuta la solicitud de transferencia de zona se obtiene la transferencia de toda la zona como respuesta. Sin la debida configuración, esto le permite a un atacante replicar la base de datos DNS, obteniendo información sensible.

Cuando knockpy detecta que la transferencia de zona es posible, se verá algo similar a esto:

Usando la API KEY de VirusTotal

Para poder realizar una búsqueda en VirusTotal lo que primero se debe hacer es obtener la API KEY y se puede realizar siguiendo este enlace https://ithemes.com/security/how-to-malware-scan-api-key-with-virustotal/.

Una vez obtenido se deberá configurar knockpy de la siguiente forma:

nano knockpy/config.json

2017-08-08 22_25_08-kali-linux-2016.2-amd64-BASE4 - VMware Workstation

Luego es recomendable volver a ejecutar el setup de la herramienta:

python setup.py install

De esta forma knockpy sumará automáticamente a VirusTotal a su repositorio de búsqueda cuando se haga una ejecución básica:

Otros ejemplos

En el caso de que knockpy no haya podido identificar subdominios a través de la transferencia de zona, intentará utilizar la fuerza bruta como se puede ver a continuación:

Entradas populares de este blog

Trinity Rescue Kit: Tutorial para eliminar la contraseña de administrador en Windows

Cómo extraer el handshake WPA/WPA2 de archivos de captura grandes

HTTP Fingerprinting