Aujourd'hui je m'attaque à la machine "TenTen" disponible chez HackTheBox.

Présentation de la machine

Tenten est une machine qui propose un challenge semblable à ceux qu'on trouve en CTF.
Auteur : ch4p
Difficulté : Moyen

Sans plus attendre commençons ce challenge par une énumération des services disponibles.

Énumération des services

export IP="10.10.10.10"
ports=$(nmap -p- --min-rate=1000 -T4 $IP | grep ^[0-9] | cut -d'/' -f1 | tr '\n' ',' | sed s/,$//)

nmap -p$ports -sV -sC $IP

On a donc 2 services, SSH et HTTP. Comme souvent dans les machines HTB, le port 22 (SSH) n'est pas utile pour résoudre le challenge, nous allons donc le laisser de côté pour le moment.

A l'heure actuelle cette version d'Apache est la plus récente. Pas de chance il va falloir trouver autre chose. Allons voir ce que contient ce serveur web.

Wordpress

La dernière version de Wordpress étant la version 5.2 au moment au j'écris ces lignes, nos chances de trouver un exploit digne de ce nom augmentent !

Ce site web semble être utilisé comme plateforme de recrutement. 

Cette information peut sembler anodine, mais elle permet d'avoir du contexte afin de mieux comprendre le challenge.

Afin d'affiner ma connaissance de la cible je vais utiliser wpscan.

wpscan --url http://10.10.10.10 -e --max-threads 50

Ce scan remonte beaucoup d'information. Il va falloir faire le tri.

Les informations importantes sont les suivantes:

Au moins 35 vulnérabilités pour cette version
Le thème utilisé est "twentyseventeen" et il est dépassé
Il y a un plugin vulnérable utilisé (job-manger)
Absence de fichier de configuration pour les backups
On a identifié un utilisateur

Parmi la liste des 35 vulnérabilités, j'en ai retenu 2:

wpscan --url http://10.10.10.10 -e vp  --max-threads 50 > WordpressVP.txt
cat WordpressVP.txt |grep "Title: "

Host Header Injection in Password Reset

Cette vulnérabilité permet de détourner la fonction d'envoi de mail automatique.

Cette attaque est composée de 3 parties.

1) L'attaquant va utiliser le formulaire "Lost password" pour faire un reset du mot de passe de la victime. Dans cette requête, il va injecter dans la requête un entête "Host" spéciale. Cet entête va pointer sur un domaine appartenant à l'attaquant.

2) Le système (Wordpress) va générer un mail automatique dont l'adresse de retour est l'entête injectée à l'étape 1.

3) Pour recevoir l'email l'attaquant peut utiliser plusieurs techniques :

  • Effectuer un DOS sur le compte mail de la victime afin que le mail soit automatiquement renvoyé à l'attaquant.
  • Envoyer plusieurs demandes de reset du mot de passe afin que la victime finisse par répondre à ce mail, ce qui enverra le mail à l'attaquant.

Le but étant que le mail soit envoyé à l'adresse de l'attaquant afin de pouvoir utiliser le lien de reset du password.

Malheuresement pour nous, l'envoi de mail a été desactivé.

J'aurai dû être plus malin (ou fainéant c'est selon) et commencer par vérifier le plus simple: le plugin vulnérable.

Insecure Direct Object Reference

On apprend dans cet article qu'il est possible d'énumérer les CVs présents sur la plateforme via un bruteforce sur le dossier d'uploads Wordpress.

En fouillant le site web et en jouant avec les paramètres on se rend compte que la page http://10.10.10.10/index.php/jobs/apply/X/ nous permet de lister le contenu de la base de donnée du Wordpress (Où X est le numéro d'id).

On va automatiser tout ça avec une petite commande bash.

for i in {0..20};do echo -n "$i: " ; curl -s http://10.10.10.10/index.php/jobs/apply/$i/ |grep "<title>Job Application"; done
La ressource 13 semble prometteuse !

Maintenant il faut trouver un moyen de récupérer cette ressource.
En s'inspirant du code python présent dans l'article de Evangelos Mourikis, j'ai écrit un petit script pour énumérer les ressources présentes dans ce Wordpress.

import requests

for year in range(2017, 2018):
	for month in range(12):
		if month < 10:
			month = "0" + str(month)
		for ext in {'.pdf', '.doc', '.docx', '.png', '.jpeg', '.jpg'}:
			url="http://10.10.10.10/wp-content/uploads/"+str(year)+"/"+str(month)+"/"
			url+="HackerAccessGranted"
			url+=ext
			r = requests.head(url)
	    		print r.status_code, url
		print
Après quelques ajustements, on finit par trouver le fichier !

Stéganographie

Pour faire court, tout ce qu'on a, c'est une image...
Elle doit forcément contenir plus que ce qu'on voit !
En effet en utilisant steghide avec un mot de passe vide, on obtient un fichier: id_rsa

Ce fichier est une clé privée SSH.

Le problème c'est que cette clé est protégée par un mot de passe.

Pour trouver le mot de passe de cette clé privée, je vais utiliser John The Ripper.

Le mot de passe de la clé est révélé 

Il ne reste plus qu'à se logger via le service SSH

Nous voila loggé sur la machine !

Très vite on trouve le flag user.

Premier flag !

PrivEsc

En général dans cette partie je fais appel à LinEnum.sh , pourtant cette fois-ci je n'en ai pas eu besoin.

En fouillant un peu on se rend compte que certains droits sudo nous sont accordés.

Cette console nous indique que le script /bin/fuckin peut être exécuté avec les droits root sans qu'on nous demande de password (ca tombe bien !).
C'est ce qu'on appelle une vulnérabilité NOPASSWD.

Reste plus qu'à savoir ce que fait le fameux script.

Il exécute les 4 premiers arguments qui lui sont donnés !

Reste plus qu'à imaginer une commande qui puisse nous servir...

Bingo ! Deuxième flag 

Résumé

Un petit résumé graphique

Social media stuff

RootMe: www.root-me.org/_AGS
HackTheBox: https://www.hackthebox.eu/home/users/profile/54394
Twitter: @GhostAgs

If you appreciate my work please consider make a donation
Tipeee: https://fr.tipeee.com/ags-syndrome