Skip to content
KitploitKITPLOIT
StrumentiBlog
Log in
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
DNS_Tunneling — Strumento di tunneling DNS che utilizza PowerShell e Nslookup per esfiltrare dati e recapitare payload tramite record DNS TXT/MX, bypassando Constrained Language Mode e le difese degli endpoint. | Kitploit
Strumenti/GitHubGitHub/octoberfest7/dns_tunneling
Generazione di PayloadEsfiltrazione DatiPenetration TestingCommand and ControlRed TeamingAnalisi DNS
GitHuboctoberfest7/dns_tunneling

DNS_Tunneling

Strumento di tunneling DNS che utilizza PowerShell e Nslookup per esfiltrare dati e recapitare payload tramite record DNS TXT/MX, bypassando Constrained Language Mode e le difese degli endpoint.

Vedi Repository
23237164 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Introduzione

Ispirato dal lavoro recente che ho svolto riguardante i beacon DNS di Cobalt Strike, insieme a una dichiarazione d'intenti per cercare di eludere Microsoft Defender for Endpoint, ho speso un po' di tempo a studiare come il DNS potrebbe essere utilizzato per trasferire un payload su una macchina target. Volevo inoltre mettermi alla prova cercando di farlo in un modo che sia possibile anche quando PowerShell è in modalità Constrained Language Mode. Questa ricerca era mirata a implementazioni più moderne di Windows (es. Win10+, Server 2019+) ma, come vedrete più avanti, potrebbe essere possibile anche su versioni precedenti.

Contesto

Cos'è il DNS Tunneling?

Il DNS tunneling è una tecnica che esiste da molto tempo e viene utilizzata da vari attaccanti. A livello base, comporta l'uso del protocollo DNS come mezzo per l'infiltrazione/esfiltrazione di dati o come canale di comunicazione C2. Ci sono molti post di blog a cui fare riferimento per maggiori informazioni su questo argomento.

Poiché si tratta di una tecnica molto vecchia e ben nota, molte organizzazioni hanno implementato metodi di rilevamento per cercare di prevenirla.

Il tipo di record DNS preferito per il tunneling DNS è stato storicamente TXT. Questo perché i record TXT possono contenere più dati rispetto ad altri record e sono anche case-sensitive, cosa che non vale per altri record e che può avere un impatto quando si inizia a parlare di codifica.

Cos'è la Modalità Constrained Language Mode?

Constrained Language Mode (CLM) è una modalità linguistica restrittiva per PowerShell che riduce notevolmente le capacità e le funzionalità consentite di PowerShell. In breve, .NET, oggetti COM e strumenti preferiti dagli attaccanti come (new-object net.webclient).downloadstring... non sono disponibili. Questo link fornisce maggiori informazioni. Le organizzazioni impongono questa policy per gli utenti normali come parte delle regole di riduzione della superficie di attacco. Di fatto, ci rende la vita più difficile come attaccanti.

Che aspetto hanno i record DNS?

La maggior parte delle persone dovrebbe avere almeno una conoscenza superficiale del DNS grazie all'uso di strumenti come Nslookup. Ma a livello base, il client invia una query e il server DNS restituisce una risposta a quella query. Esistono diversi tipi di record DNS: CNAME, A, AAAA, TXT, MX e NS, solo per citarne alcuni. Ciascuno di questi record può memorizzare e restituire informazioni diverse. Questi record sono configurati in un Zonefile, che viene servito da un server DNS.

Un esempio di zonefile è mostrato qui:``` $ORIGIN example.com. @ 3600 SOA ns1.p30.dynect.net. ( zone-admin.dyndns.com. ; address of responsible party 2016072701 ; serial number 3600 ; refresh period 600 ; retry period 604800 ; expire time 1800 ) ; minimum ttl 86400 NS ns1.p30.dynect.net. 86400 NS ns2.p30.dynect.net. 86400 NS ns3.p30.dynect.net. 86400 NS ns4.p30.dynect.net. 3600 MX 10 mail.example.com. 3600 MX 20 vpn.example.com. 3600 MX 30 mail.example.com. 60 A 204.13.248.106 3600 TXT "v=spf1 includespf.dynect.net ~all" mail 14400 A 204.13.248.106 vpn 60 A 216.146.45.240 webapp 60 A 216.146.46.10 webapp 60 A 216.146.46.11 www 43200 CNAME example.com.

Se dovessimo interrogare i record NS per example.com, la query restituirebbe ns1.p30.dynect.net, ns2.p30.dynect.net, ns3.p30.dynect.net e ns4.p30.dynect.net.

# Ricerca

## Registrazione del nome di dominio

Prima di iniziare, dobbiamo parlare brevemente di come configurare i record DNS per puntare a un IP che controlliamo e su cui eseguiremo un server DNS. Come mostrato di seguito, ho acquistato un dominio e configurato i record DNS in modo che il sottodominio "dns" punti al sottodominio "ns1" a cui è assegnato l'IP pubblico del server.

![image](https://assets.kitploit.com/production/public/readmes/5529/bdffb5de5e760905bc821adefde45ca4dcba092639c16e201c7738aa0edda53f.png)

Ciò significa che qualsiasi richiesta per "dns.edu....com" verrà indirizzata a "ns1.edu....com" a cui è assegnato l'IP 3..86. Su quell'IP configureremo un server DNS per servire i nostri record. Torneremo su questo punto più avanti.

## Trovare uno strumento lato client

La mia ricerca è iniziata con una semplice ricerca su Google per "powershell dns module", che ha restituito [questo](https://docs.microsoft.com/en-us/powershell/module/dnsclient/?view=windowsserver2022-ps) link. Di particolare interesse è stato il comando Resolve-DnsName. Sembra essere sostanzialmente un'implementazione PowerShell del noto binario Nslookup.exe. Da notare che è possibile richiedere tipi specifici di record:

![image](https://assets.kitploit.com/production/public/readmes/5529/c01a63bb351225d89be6f6f4b6636406f8c7891210b3e531f7dd71f2110fdea6.png)

Ok, quindi abbiamo un modulo PowerShell in grado di effettuare query DNS e recuperare la risposta. Funziona in Constrained Language Mode? La risposta è: più o meno.

Come puoi vedere qui, se apro una nuova finestra PowerShell, eseguo Resolve-DnsName, metto PowerShell in CLM (e lo testo con la semplice chiamata ::WriteLine), e poi eseguo di nuovo Resolve-DnsName, funziona senza problemi:

![image](https://assets.kitploit.com/production/public/readmes/5529/195e1c1284b9826d9ef63482d2bffa9d1b9928c228f38bfab0d4c1be58327758.png)

Tuttavia, se apro una nuova finestra PowerShell e la metto immediatamente in CLM e poi provo a eseguire Resolve-DnsName, fallisce:

![image](https://assets.kitploit.com/production/public/readmes/5529/ab5eb81e47ee1cdced01753af4e141fa9d074b67f1f5b0317938ef9365444867.png)

Sembra che se un modulo è stato caricato in precedenza, sia in grado di funzionare dopo che CLM viene applicato, ma CLM ne impedirà il caricamento se non è già stato fatto. Pensando a un ambiente target in cui CLM è applicato per impostazione predefinita per gli utenti (e senza sapere se determinati moduli sono pre-caricati o se DnsClient è tra questi), ho scelto a questo punto di abbandonare Resolve-DnsName e tornare al buon vecchio Nslookup.exe.

![image](https://assets.kitploit.com/production/public/readmes/5529/22e75abd325b04271ad418a00d9d84d53253901e93c3f2948dd827f8a121668f.png)

Nslookup.exe è un punto fermo del kit di strumenti IT e un binario molto noto utilizzato per scopi legittimi. Le probabilità sono a nostro favore che gli venga permesso di essere eseguito anche in ambienti in cui l'applicazione delle whitelist è una preoccupazione.

Nslookup restituirà più o meno le stesse informazioni della nostra query Resolve-DnsName, dovremo solo manipolarle in modo leggermente diverso quando sarà il momento.

## Trasformare un eseguibile in record DNS?

Ok, quindi abbiamo un mezzo per effettuare query DNS sul computer vittima. Come possiamo fornire il nostro payload in un formato che Nslookup possa recuperare?
Scarica lo strumento