Objectifs de l'Investigation :
- Identifier l'adresse IP de l'attaquant.
- Récupérer le mot de passe administrateur modifié par l'attaquant (en clair).
- Localiser l'URL de la première connexion Webshell.
- Déterminer le mot de passe utilisé pour la connexion Webshell.
- Extraire le flag 1 contenu dans un paquet réseau.
- Identifier le nom du fichier malveillant uploadé ultérieurement par l'attaquant.
- Découvrir le flag 2 caché par l'attaquant.
- Trouver le flag 3 dissimulé par l'attaquant.
Informations d'identification par défaut :root / Inch@957821.
Identification de l'IP de l'Attaquant
Pour rechercher les connexions suspectes, nous examinons les journaux d'authentification SSH :
grep "Accepted" /var/log/secure* | awk '{print $1.$2,$3,$9,$11}'
Une adresse IP suspecte, 192.168.20.1, est identifiée dans les logs.
Examen des Comptes Utilisateurs
Il est crucial de vérifier si de nouveaux comptes ont été créés ou si des privilèges ont été mal utilisés. Cela inclut la vérification des horodatages des fichiers de comptes, des journaux d'ajout d'utilisateurs et des permissions sudo (via /etc/sudoers ou /etc/sudoers.d/). L'appartenance au groupe wheel est examinée, mais il est constaté que ce groupe n'a actuellement aucun membre actif, écartant ainsi un risque immédiat d'abus de privilèges via ce groupe.
Analyse des Processus Suspects
L'observation des processus actifs révèle la présence de BT-Task (associé au panneau d'administration Baota) et du processus mysql. Cela suggère que le service MySQL a été déployé via le panneau Baota. Le mot de passe administrateur pourrait donc être stocké dans la configuration MySQL.
Récupération du Mot de Passe Administrateur
Les chemins par défaut du panneau Baota sont examinés pour localiser les fichiers de configuration :
- Panneau :
/www/server/panel - Logs du panneau :
/www/server/panel/logs - Configurations Nginx/Apache :
/www/server/panel/vhost/nginx|httpd - Répertoire racine des sites :
/www/wwwroot/[domaine](par défautdefault) - Installation MySQL :
/www/server/mysql - Données MySQL :
/www/server/data - Fichier de configuration MySQL :
/etc/my.cnf - phpMyAdmin :
/www/server/phpmyadmin,/www/wwwroot/127.0.0.1/ - Répertoire de sauvegarde :
/www/backup
Le fichier de configuration du site Web est examiné : /www/wwwroot/127.0.0.1/lib/config.inc.php.
Les informations de connexion à la base de données MySQL sont obtenues : utilisateur kaoshi, mot de passe 5Sx8mK5ieyLPb84m.
Après connexion à la base de données kaoshi et inspection des tables, la table x2_users est ciblée. En sélectionnant les utilisateurs avec usergroupid=1, les informations du compte administrateur sont récupérées. Le mot de passe, initialement sous forme de hachage MD5, est déchiffré pour révéler Network@2020.
Analyse des Connexions Webshell
Un fichier de capture de paquets est découvert dans le répertoire personnel. Avant de l'exporter, le pare-feu est désactivé :
systemctl stop firewalld
Pour transférer le fichier de capture, le protocole SCP est utilisé. Il est nécessaire que la machine virtuelle soit configurée en mode réseau ponté (bridged). En mode NAT, la connexion directe depuis l'hôte vers l'IP privée de la VM n'est pas possible sans configuration de transfert de port.
Une fois le fichier transféré (par exemple, via WinSCP), il est analysé avec Wireshark. L'analyse se concentre sur le trafic au niveau applicatif pour identifier les caractéristiques des outils de connexion shell.
Les caractéristiques de trafic d'outils comme Cobalt Strike, Bob, et AntSword sont étudiées. L'analyse des paquets révèle des signatures typiques d'AntSword :
- Caractéristiques statiques : Utilisation de
assertetevalen PHP,evalen ASP, et des classes Java avec encodage Base64 en JSP. - Caractéristiques dynamiques : Les requêtes contiennent souvent
@ini_set("display_errors","0");@set_time_limit(0)en début de corps de requête. Les réponses sont encodées en Base64 et contiennent des caractères de confusion, avec un format :aléatoire + résultat + aléatoire. - Caractéristiques des paramètres : Les noms de paramètres sont souvent de la forme
_0x.....=. - Caractéristiques de l'User-Agent : L'User-Agent par défaut est
antsword xxx, mais peut être modifié. - Caractéristique la plus notable : La présence de
@ini_set("display_errors","0");dans le corps de la requête PHP.
L'URL de la première connexion Webshell est identifiée comme /index.php?user=app-register (une interface d'enregistrement). Le mot de passe associé est Network2020.
Extraction du Flag 1
En suivant le flux de données du flag 1 dans la capture réseau, la valeur flag1{Network@_2020_Hack} est extraite.
Identification du Fichier Malveillant Uploadé
L'examen du trafic POST révèle une activité sur une page version2.php, distincte de la page d'enregistrement. Il est suspecté qu'il s'agisse du fichier malveillant uploadé ultérieurement.
Le suivi du flux de la page d'enregistrement montre un script décodé :
$F=base64_decode(substr($_POST["x0b6b31b98f31d"],2)); // Décode en Base64 la valeur du paramètre POST après avoir retiré les 2 premiers caractères → obtient le chemin du fichier cible.
$P=@fopen($F,"r"); // Ouvre le fichier.
echo(@fread($P,filesize($F)?filesize($F):4096)); // Lit et affiche le contenu du fichier.
Ce script indique que le paramètre POST, après décodage Base64 et suppression des deux premiers caractères, révèle un chemin de fichier cible.
L'examen des commandes historiques et des chemins révèle que le fichier suspect a été supprimé. Les réponses renvoyées sont souvent illisibles en raison de la compression gzip.
Pour récupérer le contenu décompressé :
- Dans Wireshark, suivre le flux TCP.
- Afficher les données brutes.
- Enregistrer le flux sous forme de fichier zip.
- Ouvrir le fichier en mode hexadécimal (avec un plugin comme HEX Editor dans Notepad++).
- Supprimer le contenu avant l'identifiant GZIP (
1f 8b) et sauvegarder. - Décompresser le fichier pour obtenir le contenu texte original.
L'analyse du contenu de version.php révèle des caractéristiques claires d'un webshell PHP de type "Behinder" (冰蝎). Ceci confirme que version2.php est le cheval de Troie ultérieurement uploadé.
Découverte des Flags Cachés
L'examen des commandes historiques révèle des modifications de fichiers dans le répertoire .api. Plus précisément, le fichier alinotify.php a été modifié, permettant de récupérer le flag 3. L'examen du contenu de ce fichier a également permis de trouver le flag 2.
Résumé de la Compromission :
- IP de l'attaquant :
192.168.20.1 - Vecteur d'attaque initial : Upload d'un Webshell via l'interface d'enregistrement
/index.php?user=app-register. Contrôle obtenu via AntSword. - Escalade / Post-Exploitation : Upload d'un second webshell (
version2.php) utilisant Behinder pour potentiellement élever les privilèges ou faciliter d'autres actions. - Modifications : L'attaquant a modifié le mot de passe administrateur de phpMyAdmin dans la base de données.
- Actions post-privilège : Désactivation du pare-feu, suppression du webshell
version2.phpet duflag1, modification du fichieralinotify.php. - Artefacts restants : Aucun autre programme malveillant persistant n'a été identifié.
Mesures de Remédiation et de Renforcement :
- Bloquer l'adresse IP de l'attaquant (
192.168.20.1) au niveau du pare-feu ou du groupe de sécurité. - Sécuriser le service SSH : changer le port par défaut (22), limiter les adresses IP autorisées à se connecter, ou le désactiver si non nécessaire.
- Restaurer les fichiers potentiellement modifiés (ex:
alinotify.php) et réinitialiser les mots de passe administrateur (base de données, panneau Baota, etc.). - Renforcer la sécurité de la fonction d'upload de fichiers : filtrer les types de fichiers dangereux (ex:
.php), restreindre les permissions des répertoires d'upload. - Valider et assainir toutes les entrées utilisateur pour prévenir les injections SQL et autres vulnérabilités.
- Réactiver le service de pare-feu et configurer des règles d'entrée/sortie appropriées.
- Désactiver les fonctions PHP dangereuses comme
evaletassertpour réduire les risques d'exécution de Webshells.