Semaine 1 | Semaine 2 | Semaine 3 | Semaine 4 | Semaine 5 | Semaine 6
Les liens fonctionnent sur GitHub / VS Code Markdown Preview
⏱️ Durée : 40 min 🎯 Focus : Penetration Testing Fundamentals
- Regardé des vidéos éducatives sur les fondamentaux du pentesting
- Concepts de base du penetration testing
- Principes fondamentaux de la sécurité
⏱️ Durée : 120 min 🎯 Focus : Environment Setup
- Installé une distribution Linux fraîche
- Optimisé l'environnement de travail
- Comment poser une base solide pour les exercices de pentesting
- Bonnes pratiques système Linux
⏱️ Durée : 60 min 🎯 Focus : Web Application Security
- Installation propre d'Ubuntu
- Tutoriel sur les techniques d'exploitation React
- Configuration système pour le pentesting
- Bases de l'exploitation d'applications web (React)
⏱️ Durée : 60 min 🎯 Focus : Linux Fundamentals 📍 Plateforme : TryHackMe
- Appris les commandes Linux de base
- Complété Linux Fundamentals 1 sur TryHackMe
- Navigation dans le filesystem, recherche récursive de fichiers, redirection d'output
⏱️ Durée : 30 min 🎯 Focus : Linux Fundamentals Part 2 📍 Plateforme : TryHackMe
- Complété les Tasks 1 à 5 de Linux Fundamentals Part 2
- Pratiqué les commandes de gestion de fichiers sur la machine THM
- Appris SSH, opérations fichiers, et bases des permissions Linux
- 🔐 Connexion à une machine distante via SSH
- 📁 Gestion fichiers et répertoires :
touch,mkdir,cp,mv,rm - 📋 Différence entre fichiers et répertoires dans
ls -l - 👁️ Fichiers cachés avec
ls -a - 🔍 Identification de type avec
file - 🔒 Structure des permissions Linux (r, w, x)
- 🔢 Système numérique de permissions (777, 750)
- 👤 Changement d'utilisateur avec
su
⏱️ Durée : ~1h 🎯 Focus : Linux Fundamentals Part 2 & Part 3 (complétés) 📍 Plateforme : TryHackMe
- Complété Linux Fundamentals Part 2 et Part 3
- Pratiqué transfert de fichiers, gestion de processus, services et logging
- Revu la structure du filesystem Linux
/etc→ fichiers de configuration système/var→ données variables (logs, cache, spool)/home→ répertoires utilisateurs/root→ répertoire du superutilisateur/tmp→ fichiers temporaires
nanopour créer et éditer des fichierswgetpour télécharger des fichiersscppour transférer entre machines
psetps auxpour visualiser les processustoppour le monitoring en temps réelkillavec SIGTERM, SIGKILL, SIGSTOPCTRL+Zpour suspendre,fg/bgpour reprendre
systemctl(start, stop, enable, disable, status)
- Structure et format cron job (
* * * * *)
aptpour installer et mettre à jour depuis les dépôts
- Lecture des access logs Apache dans
/var/log/apache2/access.log - Identification : IP client, méthode HTTP, ressource demandée, status code
⏱️ Durée : ~2–3h 🎯 Focus : OverTheWire – Bandit (Level 0 → 15) 📍 Plateforme : OverTheWire
- Complété les niveaux Bandit 0 à 15
- Pratiqué l'authentification SSH et l'utilisation de clés privées
- Appliqué des techniques de manipulation, recherche et filtrage de fichiers
- Utilisé des outils réseau (
nc) - Travaillé avec des encodages et formats de compression
- 📄 Gestion de noms de fichiers piégés (tirets, espaces, fichiers cachés)
- 🔍 Recherche efficace avec
find - 🔎 Filtrage avec
grep,sort,uniq - 🔇 Compréhension stdout vs stderr (
2>/dev/null) - 🔓 Décodage Base64 et ROT13 (
tr) - 🔢 Hex dumps (
xxd -r) - 📦 Extraction d'archives (
gzip,bzip2,tar) - 🔑 Clés SSH privées (
chmod 400,ssh -i) - 🌐 Interaction TCP basique avec
nc
⏱️ Durée : ~1h 🎯 Focus : Bash Scripting – Script de backup automatisé
- Construit un script Bash de backup complet from scratch
- Implémenté variables, validation de répertoire, gestion d'erreurs
- Utilisé
date,basename,mkdir -p,cp -r
- 📜 Shebang portable :
#!/usr/bin/env bashlocalise bash viaPATH - 📝 Déclaration de variables :
VAR=value, référencé avec$VAR - 🔄 Substitution de commande :
VAR=$(command) - 🔀 Conditionnels :
if [ condition ]; then ... fi - ✅ Vérification d'existence :
[ -d "$DIR" ] - 🚪 Codes de sortie :
0= succès, non-zéro = erreur - 💬 Toujours quoter les variables (
"$VAR") pour les chemins avec espaces - 📂
cp -r "$SOURCE"copie le répertoire ;cp -r "$SOURCE"/*copie son contenu - ✂️
basename /path/to/dirretourne uniquement le dernier composant
⏱️ Durée : ~1h 🎯 Focus : Bash Scripting & Linux Shells 📍 Plateforme : TryHackMe
- Complété TryHackMe – Bash Scripting
- Complété TryHackMe – Linux Shells
- Rien de nouveau — concepts déjà couverts avec le script de backup la veille
- Différents types de shells et fonctionnalités spécifiques
- Variables d'environnement, variables shell, bases du scripting
- (Notes perdues avant sauvegarde)
⏱️ Durée : ~2h30 🎯 Focus : OverTheWire – Bandit (Level 15 → 25) 📍 Plateforme : OverTheWire
- Complété les niveaux Bandit 15 à 25
- 🔐 Connexions SSL/TLS avec
openssl s_client - 🔍 Scan de ports avec
nmappour identifier les services SSL - 🔑 Récupération et utilisation d'une clé RSA privée
- 🛡️ Bypass d'un
.bashrchostile via commande SSH directe - ⚡ Exploitation d'un binaire SUID pour lire des fichiers protégés
- 📡 Setup d'un listener
ncen background - ⏰ Analyse de cron jobs et reverse-engineering de scripts
- 💣 Brute-force d'un PIN 4 chiffres via
nc
openssl s_clientconnecte aux services SSL/TLS — contrairement ànc(plaintext)-ign_eofmaintient la connexion jusqu'à réception de la réponsenmap -p PORT_RANGE localhostscanne un range de portsdiffcompare deux fichiers (<= file1,>= file2)- SSH peut exécuter une commande sans charger un shell :
ssh user@host command - Les binaires SUID tournent avec les privilèges du propriétaire
nc -l -p PORTcrée un listener TCP —&le lance en background* * * * *en cron = chaque minute ; cron jobs dans/etc/cron.d/md5sumgénère un hash ;cut -d ' ' -f 1extrait le hashseq 0 9999+printf '%04d'pour générer toutes les combinaisons- Piper toutes les combinaisons en un seul
ncévite 10 000 reconnexions
⏱️ Durée : ~2h 🎯 Focus : Root-Me App Script + Python Scripting 📍 Plateforme : Root-Me, Python
- Résolu 4 challenges Root-Me App Script
- Construit un script Python de vérification de status de services via
systemctl - Construit un script Python d'analyse de logs SSH pour détecter le brute force
🔀 PATH Hijacking (System 1 & 2)
- Un binaire SUID appelant une commande sans chemin absolu peut être hijacké
- Créer un faux binaire avec le même nom, placer son répertoire en premier dans
$PATH - Quand le binaire a des arguments (
ls -lA),$1ne marche pas — hardcoder le chemin
📁 Sudo Path Traversal
- Un wildcard
*dans une règle sudo (/bin/cat notes/*) est abusable avec../ sudo -u user /bin/cat /allowed/path/../target/.passwdlit hors du scope prévu
📄 LaTeX Injection
- Un script compilant du
.texfourni par l'utilisateur avec des droits élevés est exploitable \openin+\read+\typeoutlit un fichier et affiche son contenu dans le log%est un caractère commentaire en LaTeX —\catcode\%=12` le désactive si nécessaire
💻 PowerShell Command Injection
- Un input non sanitisé dans un script PowerShell permet d'injecter via
; gc= alias PowerShell pourGet-Content(équivalentcat)
sys.argv— accès aux arguments CLIsubprocess.run(["cmd", "arg"], capture_output=True, text=True)— exécuter une commande shellresult.stdout.strip()— nettoyer l'outputopen(file, "r")+for line in f— lire ligne par ligneline.split()+.index("word")— parser des lignes structuréesdict.get(key, default)— compter des occurrences avec valeur par défaut
⏱️ Durée : ~45min 🎯 Focus : What Is Networking 📍 Plateforme : TryHackMe
- Complété TryHackMe – What Is Networking
- Consolidation — rien de fondamentalement nouveau, mais bon d'avoir des mémos structurés
- 🌐 Un réseau = deux appareils ou plus connectés pour partager des ressources
- 🏷️ Identification par adresse IP et adresse MAC
⏱️ Durée : ~1h 🎯 Focus : Introductory Networking (Modèle OSI) 📍 Plateforme : TryHackMe
- Étudié le modèle OSI en entier (7 couches)
- 7️⃣ Application — interface entre les apps et le réseau (navigateur, client mail, API)
- 6️⃣ Presentation — traduction de format, chiffrement/déchiffrement, compression
- 5️⃣ Session — création et gestion de sessions, connexions simultanées
- 4️⃣ Transport — sélection du protocole (TCP vs UDP), segmentation
- 🔒 TCP : fiable, vérifie les paquets, retransmet en cas de perte — segments
- ⚡ UDP : rapide, pas de vérification, streaming/VoIP — datagrams
- 3️⃣ Network — routage de paquets, adressage IP (logique)
- 2️⃣ Data Link — communication LAN, adressage MAC (physique), NIC
- 1️⃣ Physical — transmission physique, convertit les bits en signaux
🧠 Mnémonique (FR) : "Alain part servir trois nachos à des péruviens"
⏱️ Durée : ~1h 🎯 Focus : Introductory Networking (Modèle TCP/IP) 📍 Plateforme : TryHackMe
- Étudié le modèle TCP/IP et son contexte historique
- Comparé les couches TCP/IP aux couches OSI
- Application / Transport / Internet / Network Interface
- TCP/IP = le vrai standard utilisé sur Internet — OSI = modèle pédagogique
- Standardisé en 1982 par le DoD US pour remplacer les systèmes propriétaires incompatibles
- TCP : fiable, vérifie les paquets, retransmet en cas de perte, plus lent
- UDP : rapide, pas de vérification, streaming et VoIP
⏱️ Durée : ~45min 🎯 Focus : Introductory Networking (Three-Way Handshake + ports) 📍 Plateforme : TryHackMe
- Analysé le TCP Three-Way Handshake en détail
- Mappé les numéros de ports courants à leurs protocoles
- 📤 SYN — le client demande la connexion
- 📥 SYN + ACK — le serveur accepte
- 📤 ACK — le client confirme, connexion établie
| Port | Protocole |
|---|---|
| 21 | 📂 FTP |
| 22 | 🔐 SSH |
| 53 | 🌐 DNS |
| 80 | 🌍 HTTP |
| 443 | 🔒 HTTPS |
| 3389 | 🖥️ RDP |
⏱️ Durée : ~1h 🎯 Focus : Introductory Networking (DNS) 📍 Plateforme : TryHackMe
- Étudié le processus de résolution DNS et sa hiérarchie en profondeur
- Pratiqué avec
digpour requêter le DNS manuellement
- Traduit les noms de domaine en adresses IP (
www.google.com → 142.250.x.x) - 🔄 Ordre de résolution :
- Fichier hosts local (
/etc/hosts) - Cache DNS
- Serveur DNS récursif (FAI ou public comme 8.8.8.8)
- Root Name Server → TLD Server (.com / .org) → Authoritative Name Server
- Fichier hosts local (
- Indique combien de temps cacher un enregistrement DNS avant de re-requêter
- Exemple : TTL = 157 → après 157 secondes, nouvelle requête DNS nécessaire
dig domain— lookup DNS standarddig domain @8.8.8.8— requêter un serveur DNS spécifique- La section ANSWER montre l'IP résolue ; TTL montre la durée de cache
⏱️ Durée : ~1h 🎯 Focus : Introductory Networking (ping / traceroute / whois) 📍 Plateforme : TryHackMe
- Étudié
ping,tracerouteetwhois— flags et cas d'usage
- Envoie des requêtes ICMP echo pour tester l'accessibilité d'un hôte
-4force IPv4,-idéfinit l'intervalle,-voutput verbeux
- Mappe le chemin des paquets vers une destination, enregistre chaque saut
- Utilise la couche Internet par défaut
-ispécifie l'interface,-tutilise TCP SYN au lieu d'UDP
- Requête les infos d'enregistrement de domaine et propriété d'adresse IP
- Prédécesseur de la résolution DNS (ère pré-DNS)
⏱️ Durée : ~1h30 🎯 Focus : Wireshark – Capture et analyse de trafic en direct
- Installé et configuré Wireshark
- 🤝 Capturé un TCP Three-Way Handshake
- 🌐 Capturé du trafic DNS avec
dig - 🌍 Capturé du trafic HTTP avec
curl
- Analyseur de paquets open source multiplateforme
- Capture et inspecte le trafic réseau en temps réel
- Filtrage par protocole, IP, port et autres critères
- Observé la séquence SYN → SYN+ACK → ACK
- Confirme l'établissement de connexion TCP entre client et serveur
- Générée avec
dig example.com - Observé : requête standard (client → serveur DNS) + réponse
- Générée avec
curl http://example.com - Observé : requête
GET / HTTP/1.1→ réponse200 OK
⏱️ Durée : ~1h30 🎯 Focus : NMAP (types de scans & bases) 📍 Plateforme : TryHackMe
- Étudié les trois types de scans principaux (TCP Connect, SYN, UDP)
- Mémorisé la structure des 65535 ports et les ports courants
- Pratiqué les options nmap en ligne de commande
- Chaque machine possède 65535 ports
- Ports 0–1023 = well-known (protocoles réservés)
- HTTP: 80 / HTTPS: 443 / NetBIOS: 139 / SMB: 445
- Complète le Three-Way Handshake complet sur chaque port
- 🔊 Plus bruyant — laisse des traces dans les logs de la cible
- Utilisé sans accès root (quand
-sSn'est pas disponible)
- Scan le plus populaire — nécessite root/sudo
- Envoie SYN → reçoit SYN+ACK → envoie RST (handshake incomplet)
- 🤫 Plus rapide et plus discret que
-sT
- Plus lent — pas de handshake, repose sur ICMP "port unreachable" pour les ports fermés
- Aucune réponse → port marqué open|filtered
- RFC 9293 définit le comportement correct du protocole TCP
⏱️ Durée : ~1h30 🎯 Focus : NMAP (scans avancés & NSE) 📍 Plateforme : TryHackMe
- Étudié les scans NULL, FIN et Xmas
- Exploré le Nmap Scripting Engine (NSE) et ses catégories
- Pratiqué les flags d'output et de timing
- NULL (
-sN) — paquet TCP sans aucun flag ; RST si port fermé - FIN (
-sF) — flag FIN envoyé ; RST si port fermé - Xmas (
-sX) — flags PSH, URG, FIN (ressemble à un sapin en Wireshark 🎄) ; RST si fermé - Ces trois types servent à l'évasion de firewall
⚠️ Windows peut répondre RST sur tous les ports — peu fiable sur Windows
| Catégorie | Description |
|---|---|
safe |
✅ Aucun impact sur la cible |
intrusive |
|
vuln |
🔍 Scan de vulnérabilités connues |
exploit |
💣 Tentative d'exploitation |
auth |
🔓 Bypass d'authentification (ex: FTP anonyme) |
brute |
🔑 Brute-force de credentials |
discovery |
🌐 Interroge les services pour obtenir des infos |
-o— détection d'OS-sV— détection de version des services-v/-vv— verbosité (recommandé :-vv)-oA— output dans les 3 formats simultanément-oN— output normal vers fichier-oG— output au format grep-a— mode agressif-T<0-5>— timing template (+ élevé = + rapide = + bruyant)-p <port>/-p-— port spécifique ou tous les 65535--script <nom>— exécuter un script NSE spécifique--script=vuln— exécuter tous les scripts de la catégorie vuln--top-ports <n>— scanner les n ports les plus courants
⏱️ Durée : ~1h 🎯 Focus : NMAP (évasion firewall) + Passive Reconnaissance 📍 Plateforme : TryHackMe
- Complété la section évasion de firewall NMAP
- Complété le module Passive Reconnaissance
-Pn— skip le ping de découverte (utile quand ICMP est bloqué)-f— fragmente les paquets pour tromper l'IDS--mtu <n>— taille de transmission maximum personnalisée (multiple de 8)--scan-delay <n>ms— délai entre paquets (évasion de triggers temporels)--badsum— checksum invalide pour détecter la présence d'un firewall--data-length <n>— ajoute des données aléatoires aux paquets- Protocole bloqué par
-Pn: ICMP
- 🔍 Passive : aucun contact direct (DNS, offres d'emploi, articles de presse)
- 🎯 Active : contact direct (connexion aux serveurs, social engineering, accès physique)
| Type | Résultat |
|---|---|
| A | 🌐 Adresses IPv4 |
| AAAA | 🌐 Adresses IPv6 |
| CNAME | 🔗 Canonical Name |
| MX | 📧 Serveurs de mail |
| SOA | 🏛️ Start of Authority |
| TXT | 📝 Enregistrements TXT |
nslookup -type=A domain— lookup IPv4nslookup -type=MX domain 1.1.1.1— enregistrements MX via serveur spécifiquenslookup -type=TXT domain— enregistrements TXT
⏱️ Durée : ~1h 🎯 Focus : Active Reconnaissance 📍 Plateforme : TryHackMe
- Complété le module Active Reconnaissance
- Pratiqué le banner grabbing avec telnet
- Revu les options netcat et leurs cas d'usage
-s— définit la taille des données portées par la requête ICMP echo- Taille de l'en-tête ICMP : 8 bytes
⚠️ Le Firewall Windows bloque ping par défaut
- Telnet ouvre une connexion TCP brute — il faut parler le protocole du service manuellement
- Port 80 → HTTP →
GET / HTTP/1.0+ deux Entrées - Port 25 → SMTP →
EHLO,MAIL FROM:, etc. - Port 110 → POP3 →
USER,PASS - Les headers de réponse révèlent le nom et la version du service (
Server: nginx/1.6.2)
| Flag | Description |
|---|---|
-l |
👂 Mode écoute |
-p |
🔌 Spécifier le port |
-n |
🔢 Numérique uniquement, pas de résolution DNS |
-v |
📢 Output verbeux |
-vv |
📢📢 Très verbeux |
-k |
🔄 Continuer à écouter après déconnexion |
⚠️ Port < 1024 nécessite root pour écouter
⏱️ Durée : ~2h 🎯 Focus : Linux PrivEsc (énumération + exploitation shadow/passwd) 📍 Plateforme : TryHackMe
- Démarré le module Linux Privilege Escalation
- Pratiqué les techniques d'énumération système
- Exploité
/etc/shadowet/etc/passwden world-writable
| Commande | Résultat |
|---|---|
uname -a |
🖥️ Infos système (kernel, architecture) |
id && whoami |
👤 Utilisateur courant |
cat /etc/passwd |
👥 Liste des utilisateurs |
sudo -l |
🔐 Droits sudo de l'utilisateur courant |
ps aux |
⚙️ Processus en cours |
find / -perm -u=s -type f 2>/dev/null |
💎 Fichiers SUID |
cat /etc/crontab |
⏰ Tâches cron planifiées |
cat ~/.*history | less |
📜 Historique des commandes |
cat /etc/exports |
📂 Configuration NFS |
- Extraire le hash :
grep "root" /etc/shadow > hash.txt - Craquer :
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt - Afficher :
john --show hash.txt ⚠️ John doit tourner sur Kali, pas sur la cible
- Générer un hash :
mkpasswd -m sha-512 monmotdepasse - Remplacer le hash root directement dans
/etc/shadow su root
- Générer un hash :
openssl passwd monmotdepasse - Ajouter :
echo 'newroot:HASH:0:0:root:/root:/bin/bash' >> /etc/passwd su newroot
⏱️ Durée : ~1h30 🎯 Focus : Linux PrivEsc (GTFOBins sudo + LD_PRELOAD) 📍 Plateforme : TryHackMe
- Exploité des permissions sudo mal configurées via GTFOBins
- Exploité LD_PRELOAD et LD_LIBRARY_PATH pour escalader les privilèges
sudo find . -exec /bin/sh \; -quitsudo vim -c ':!/bin/sh'sudo awk 'BEGIN {system("/bin/sh")}'sudo nmap --interactivepuis!shsudo less /etc/passwdpuis!/bin/sh- 📚 Référence : https://gtfobins.github.io
- Si
env_keep+=LD_PRELOADdans sudoers → injecter une shared library avant toutsudo gcc -fPIC -shared -nostartfiles -o /tmp/preload.so preload.csudo LD_PRELOAD=/tmp/preload.so find
ldd /usr/sbin/apache2— lister les bibliothèques utilisées par un binaire- Remplacer l'une d'elles par une version malveillante compilée dans /tmp
sudo LD_LIBRARY_PATH=/tmp apache2
⏱️ Durée : ~1h30 🎯 Focus : Linux PrivEsc (cron hijacking + NFS) 📍 Plateforme : TryHackMe
- Exploité le PATH hijacking sur des cron jobs
- Exploité la misconfiguration NFS
no_root_squash
cat /etc/crontab— vérifier si le PATH commence par un répertoire inscriptible- Créer un faux script avec le même nom que le binaire cron dans ce répertoire
- Le script copie
/bin/bashvers/tmp/rootbashavec le bit SUID - Attendre 1 minute, puis exécuter
/tmp/rootbash -p - 🧹 Toujours nettoyer :
rm /tmp/rootbash && exit
cat /etc/exports— chercher les partages avecno_root_squash- Avec cette option, root sur la machine attaquante = root sur le partage NFS
- Sur Kali (en root) : monter le partage, créer un binaire SUID avec msfvenom,
chmod +xs - Sur la cible : exécuter le binaire → shell root
cat ~/.*history | grep -i 'mysql\|pass\|ssh'— chercher des credentials dans l'historique- Toujours
exitproprement après un shell root - 🧹 Nettoyer les fichiers temporaires après chaque exploit
⏱️ Durée : ~2h 🎯 Focus : Python Basics (module complet) 📍 Plateforme : TryHackMe
- Complété le module TryHackMe Python Basics en entier
- Couvert : syntaxe de base, opérateurs, variables, conditions, boucles, fonctions, fichiers, imports
print("texte")— affiche du texte à l'écran#— commentaire, non exécuté par l'interpréteur
| Opérateur | Syntaxe | Exemple |
|---|---|---|
| Addition | + |
1 + 1 = 2 |
| Soustraction | - |
5 - 1 = 4 |
| Multiplication | * |
10 * 10 = 100 |
| Division | / |
10 / 2 = 5 |
| Modulo | % |
10 % 2 = 0 |
| Exposant | ** |
5**2 = 25 |
| Symbole | Signification |
|---|---|
> |
Supérieur à |
< |
Inférieur à |
== |
Égal à |
!= |
Différent de |
>= |
Supérieur ou égal à |
<= |
Inférieur ou égal à |
- Déclaration directe (pas de
var/let/constcomme en JS) :age = 30 - Types :
str,int,float,bool,list - Conversion :
str(nombre)pour concaténer un nombre avec un string
and(équivalent JS&&),or(||),not(!)- Structure conditionnelle :
if/elif/else— l'indentation définit les blocs (pas de{})
while condition:— tourne tant que la condition est vraie (attention aux boucles infinies)for item in liste:— itère sur une listefor i in range(n):— itère de 0 à n-1 (remplace lefor (let i = 0; i < n; i++)du JS)
def nomFonction(param1, param2):— définition (pas defunctionni{})returnpour renvoyer une valeur- Une fonction = une responsabilité
- Lecture :
open("fichier.txt", "r")→.read()(tout) ou.readlines()(ligne par ligne) - Écriture :
"a"(append) ou"w"(écrase/crée) - Context manager :
with open(...) as f:— ferme automatiquement le fichier - 🎯 Use case cyber : importer une wordlist, exporter des résultats de scan
import libpuislib.methode()- Libs utiles en pentest :
requests(HTTP),scapy(paquets réseau),pwntools(CTF & exploit dev) - Installation :
pip install nom_lib
⏱️ Durée : ~3h 🎯 Focus : Python for Pentesters 📍 Plateforme : TryHackMe
- Complété la room TryHackMe Python for Pentesters
- Développé/adapté des scripts : directory enumeration, hash cracker, SSH brute force
- Pratiqué les modules requests, socket, sys, re, hashlib, paramiko, scapy
input()— saisie interactive pendant l'exécutionsys.argv[1]— argument passé directement en CLI
re.search(r'[a-f0-9]{32}', r.text)— chercher un pattern MD5 dans une réponse HTTP- Hash MD5 = 32 caractères hexadécimaux
[a-f0-9] - Hash SHA-256 = 64 caractères hexadécimaux
re.searchpour des patterns,inpour des mots exacts
hashlib.md5()/hashlib.sha256()pour générer des hashes- Hash cracking = comparer des hashes générés depuis une wordlist avec le hash cible (pas de "reverse", juste de la comparaison)
- Lateral Movement = phase où PSexec est utilisé (déjà dans le réseau, déplacement d'une machine à l'autre)
| Module | Usage |
|---|---|
| requests | 🌐 Requêtes HTTP (requests.get()) |
| socket | 🔌 Connexions TCP bas niveau (port scanner) |
| sys | ⚙️ sys.argv[], sys.stdout.flush() |
| re | 🔎 Regex pour chercher des patterns |
| hashlib | 🔐 Générer des hashes MD5/SHA-256 |
| paramiko | 🔑 Connexions SSH (brute force) |
| scapy | 📡 Créer des paquets réseau (ARP) |
| keyboard | ⌨️ Enregistrer/rejouer des frappes clavier |
| pyfiglet | 🎨 Bannières ASCII (cosmétique) |
| py2exe | 📦 Convertir scripts Python en .exe Windows |
- Charger une wordlist, construire des URLs, vérifier status 200
- Adapter la condition pour chercher du contenu spécifique :
if "username" in r.text— trouver page de login/userlistif re.search(r'[a-f0-9]{32}', r.text)— trouver un hash caché
- Lire une wordlist, hasher chaque ligne, comparer au hash cible
- Adapter
hashlib.md5→hashlib.sha256selon le type de hash
- Fonction
ssh_connect()avec paramiko - code=0 si auth réussie, code=1 si échec
- Itérer sur une wordlist jusqu'à trouver le bon password
- Typo
passwsorddans paramiko → erreur keyword argument def (password)sans nom de fonction → SyntaxErrorinput_file.close()sur une variable inexistante → NameErrorreponsevsresponse→ NameError silencieux dans le flux- Oublier de passer l'IP en argument → IndexError
sys.argv
- Toujours vérifier la cohérence des noms de variables (
responsevsreponse→ bug silencieux) count += 1≠count = 1— ne jamais réassigner un compteur- L'indentation Python = structure du code, une erreur = bug logique
- Filtrer sur status 200 (valide) plutôt que 404 (invalide)
- Penser à
| greppour filtrer un output volumineux
- 🔐 SSH → TCP 22
- 🌐 DNS → utilisable pour énumération de sous-domaines
- 📡 ARP → découverte réseau local (Scapy)
- Trouvé page privée :
private.html - Trouvé page login avec username :
tiffany - Cracké password SSH :
trustno1 - Lu
flag.txtvia SSH connecté en tant que tiffany
⏱️ Durée : ~3h 🎯 Focus : Port Scanner Python (socket, threading, argparse, banner grabbing) 📍 Plateforme : Python
- Construit un port scanner en Python avec socket, multi-threading, argparse et banner grabbing
- Module Python pour faire des connexions réseau TCP bas niveau
connect_ex(host, port)retourne0si le port est ouvert, autre chose sinon
- Permet de scanner plusieurs ports en parallèle au lieu d'un par un
Semaphore(100)limite le nombre de threads actifs pour éviter de saturer le système
- Permet de passer des arguments au script depuis le terminal (
--host,--start,--end) - Plus besoin de hardcoder les valeurs dans le code
- Après connexion sur un port ouvert, on envoie une requête et on lit la réponse du service
- Ça révèle le nom et la version du service (ex:
Apache/2.4.7 Ubuntu)
python3 scanner.py --host scanme.nmap.org --start 1 --end 1024connect.exau lieu deconnect_ex(underscore, pas un point)- Socket créé en dehors de la boucle → bug sur les connexions multiples
- Trop de threads sans Semaphore →
Too many open files banner.decode()sanserrors='ignore'→ crash sur bytes non-UTF-8
⏱️ Durée : ~1h 🎯 Focus : Burp Suite: The Basics 📍 Plateforme : TryHackMe
- Complété le module Burp Suite: The Basics sur TryHackMe
- Configuré le proxy Burp et intercepté des requêtes HTTP
- Exploré les onglets Target (Site map, Scope, Issue definitions)
⚠️ Challenge pratique sitemap (http://10.10.x.x/) non réalisé — IP interne THM inaccessible sans VPN fonctionnel
- Burp Suite est un proxy d'interception HTTP : il se place entre le navigateur et le serveur pour capturer, lire et modifier les requêtes
- Proxy → intercepte le trafic HTTP en temps réel
- HTTP History → liste toutes les requêtes capturées pendant la session
- Intercept on/off → active ou désactive l'interception manuelle
- Forward / Drop → envoie ou bloque une requête interceptée
- Site map → carte visuelle en arbre des pages visitées ; utile pour la reconnaissance et la découverte d'endpoints API
- Scope settings → définit sur quels domaines/URLs Burp doit travailler (évite de capturer du trafic inutile)
- Issue definitions → liste des vulnérabilités cherchées par le scanner Pro, accessible en lecture en Community — utile pour les rapports
- Fichier public censé indiquer aux moteurs de recherche les pages à ne pas indexer
- Problème : il est lisible par tout le monde — si une page sensible y est référencée, elle est exposée
- Concept : security through obscurity — cacher n'est pas protéger
- VPN TryHackMe (OpenVPN) requis pour accéder aux IPs internes
10.10.x.x - Labs PortSwigger accessibles directement via compte web (pas de VPN nécessaire)
- Commande VPN :
sudo openvpn ~/chemin/vers/fichier.ovpn
⏱️ Durée : ~45min 🎯 Focus : Burp Suite: Repeater 📍 Plateforme : TryHackMe
- Complété le module Burp Suite: Repeater sur TryHackMe
- Outil pour renvoyer manuellement une requête HTTP autant de fois que voulu, en la modifiant à chaque envoi
- Indispensable pour tester des paramètres, provoquer des erreurs volontaires, ou fuzzer manuellement
- Capturer une requête dans Proxy > HTTP History
- Clic droit → Send to Repeater
- Modifier la requête (paramètres, headers, body, valeurs d'ID...)
- Cliquer Send et analyser la réponse
- Tester des IDs différents dans une URL pour détecter un IDOR
- Provoquer des erreurs volontaires pour extraire de l'info sur la stack technique
- Vérifier le comportement du serveur selon différents inputs
⏱️ Durée : ~1h 🎯 Focus : PortSwigger — 3 labs Access Control & Information Disclosure 📍 Plateforme : PortSwigger Web Security Academy
- Complété 3 labs PortSwigger sans VPN (accès direct via compte)
- Lab 1 : Unprotected admin functionality
- Lab 2 : Insecure Direct Object References (IDOR)
- Lab 3 : Information disclosure in error messages
Concept : Security through obscurity
Le panel admin était référencé dans robots.txt — fichier public lisible par tout le monde.
Naviguer vers /robots.txt exposait directement le chemin du panel admin.
- Réflexe : toujours vérifier
robots.txten début de reconnaissance — c'est souvent une mine d'info sur la structure de l'app
Concept : Accès non autorisé à des ressources via manipulation d'identifiant
- Le transcript du chat était téléchargé via une URL prévisible (ex:
2.txt) - En changeant l'identifiant (
2.txt→1.txt), on accède au fichier d'un autre utilisateur - La faille est côté serveur : le serveur ne vérifie pas si l'utilisateur a le droit d'accéder à la ressource demandée
Méthode utilisée :
- Cliquer "View transcript" → pas d'URL visible directement
- Ouvrir DevTools (F12) > Network et relancer l'action
- Repérer la requête de téléchargement et l'URL du fichier
- Modifier l'identifiant dans l'URL → accès au fichier de Carlos
- Réflexe : tout identifiant prévisible dans une URL ou une requête → tester l'IDOR
Concept : Les erreurs mal gérées exposent des infos sur la stack technique
- En provoquant une erreur volontaire (ID produit invalide), le serveur retourne sa version Apache dans le message d'erreur
- Ces infos permettent de cibler des CVE connues sur cette version
Méthode utilisée :
- Proxy > HTTP History → repérer
GET /product?productId=1 - Clic droit → Send to Repeater
- Modifier
productId=1par une valeur invalide (ex:"abc") - Lire la réponse → version Apache exposée dans l'erreur
- Réflexe : provoquer des erreurs = source d'info sur la stack — ne jamais laisser des error messages verbeux en production
| Concept | Résumé |
|---|---|
| Security through obscurity | Cacher une ressource ne la protège pas — robots.txt est public |
| IDOR | Faille serveur : accès à la ressource d'un autre user en changeant un identifiant |
| Information disclosure | Erreurs verbeux exposent la version du serveur → vecteur de ciblage CVE |
| GET vs POST | GET → paramètres dans l'URL / POST → paramètres dans le body |
- Toujours checker
robots.txten recon - Tout identifiant prévisible dans une URL → tenter l'IDOR
- Provoquer des erreurs volontairement → extraire de l'info sur la stack
- DevTools > Network si une requête n'est pas visible directement dans le navigateur
- Burp Repeater = outil principal pour tester manuellement une requête
- IDOR = faille serveur (pas client) — le client exploite, mais la vulnérabilité est dans la vérification côté serveur
- POST → paramètres dans le body (pas "dans la requête HTTP" de façon vague)
- Challenge sitemap Burp (VPN stable requis) — endpoint inhabituel sur
http://10.10.x.x/ - OWASP Top 10 (~2h) — #1 : Broken Access Control