Tests d'intrusion complet sur la machine Basic Pentesting 2

  • 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

  1. 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.

  1. 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.

  1. 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

  1. 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.

  1. 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 !!!

  1. 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"

Étiquettes: pentest Samba SSH enum4linux hydra

Publié le 12 juin à 19h35