> For the complete documentation index, see [llms.txt](https://olb.gitbook.io/thm-ctf-write-ups/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://olb.gitbook.io/thm-ctf-write-ups/overpass.md).

# Overpass

{% embed url="<https://tryhackme.com/r/room/overpass>" %}

Site Gitbook : <https://olb.gitbook.io/thm-ctf-write-ups/overpass>

## Reconnaissance

```
nmap -sC -sV -oN nmap-report.txt $IP 
```

Ce qu'on obtient comme info:

* OS LINUX&#x20;
* 22/tcp open  ssh&#x20;
* 80/tcp open

le site <http://10.10.232.151/> est accessible

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2FZWIWFWvQZqBngPUVqc4P%2Fimage.png?alt=media&amp;token=d764aedb-594f-485d-906b-984ea4996f2e" alt=""><figcaption></figcaption></figure>

&#x20;Après inspection manuelle on passe au directory brute force

```
gobuster dir -u $IP -w /usr/share/wordlists/dirbuster/directory-list-1.0.txt 
```

on trouve rapidement&#x20;

`Found: /admin                (Status: 301) [Size: 42] [--> /admin/]`&#x20;

l'url <http://10.10.232.151/admin/> nous affiche un formulaire d'authentification

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2Ffnstmk9J0C6f37OCIbBl%2Fimage.png?alt=media&amp;token=af411573-8422-4e28-8371-b4b76e676cf8" alt=""><figcaption></figcaption></figure>

Le formulaire envoie le username et le password saisi a une API: `/api/login`<br>

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2FClQpnSmOxpZkU6jrTCk8%2Fimage.png?alt=media&amp;token=c71a2628-adbc-4df6-aa15-700b13a9dad0" alt=""><figcaption></figcaption></figure>

## Exploitation

Cette fois pas de user et pas de password, je tente un bruteforce Hydra de l'API `/api/login` sur les utilisateur ninja, pars, szymex etc. de cette page <http://10.10.232.151/aboutus/> mais sans succès. Un brute force user + password a partir des seclists habituelles n'aboutit pas non plus ...

En cherchant un peu, on trouve que la page login est générée par un script `login.js` qu'on peut analyser au debugger de Firefox

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2Fny0hu3Y3Vi6MDDR2K0CL%2Fimage.png?alt=media&amp;token=a6ff60ba-82de-4efd-a30d-6b724ea2ee82" alt=""><figcaption></figcaption></figure>

La fonction `login()` est volontairement mal codée. Elle appelle l'API `/api/login` et si la fonction ne renvoie pas d'erreur alors elle crée un cookie de session appelé `SessionToken`

Bien qu'on ne sache pas si le contenu (`statusOrCookie`) de ce cookie sera vérifié, créons ce cookie `SessionToken`  avec des infos bidon pour simuler un retour positif de l'API de login. Pour cela dans la console du navigateur on a juste à entrer

```
Cookies.set("SessionToken", "blabla") 
```

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2FdIwkVllah45UFCHxNoUY%2Fimage.png?alt=media&amp;token=54d0ffab-3cb8-44f1-9b51-e5a13f8c0d0b" alt=""><figcaption></figcaption></figure>

On recharge <http://10.10.232.151/admin/> et yesss!  le cookie de session nous permet d'être connecté en mode "amin"

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2F8xodkVfoWZeApxUDJw49%2Fimage.png?alt=media&amp;token=e4a10a09-b437-4a31-b408-6403a2d82283" alt=""><figcaption></figcaption></figure>

* on a un utilisateur nommé `james`
* on obtient sa clé RSA privée&#x20;

On copie la clé de james dans un fichier `jameskey` et on tente de se connecter en SSH au serveur avec cette clé (`ssh-i jameskey james@IP_cible)`

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2F5SZGGAg51xjhfbWczitG%2Fimage.png?alt=media&amp;token=9acccb13-c6fd-444f-9542-6654e77f62c7" alt=""><figcaption></figcaption></figure>

On s'en doutait la clé est protégée par une passphrase. On va la brute forcer avec johnTheRipper

```
ssh2john jameskey > jameskeypass.hash
```

```
john --wordlist=/usr/share/wordlist/rockyou.txt jameskeypass.hash
```

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2FJFa0vzRxY3WF7lUlcIoQ%2Fimage.png?alt=media&amp;token=ce54e5f3-f4eb-4c4b-84d1-3c7b80164aff" alt=""><figcaption></figcaption></figure>

* la passphrase est `james13`

On se connecte a nouveau avec désormais la passphrase et cette fois c'est bon on se connecte et on peut récupérer le flag de james.

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2FKymRY8GB9fhRUQL5eXJD%2Fimage.png?alt=media&amp;token=f0e8c511-5e3a-4c5d-aee0-66c8aa309bde" alt=""><figcaption></figcaption></figure>

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2F9FH9huoulmErV0ZlrEaW%2Fimage.png?alt=media&amp;token=f5374a07-922f-4ff7-ae0f-3b07101d13fe" alt=""><figcaption></figcaption></figure>

## Escalade de Privilège

* pas de `sudo -l`  possible
* pas de etc/password ou /etc/shadow vulnérables
* pas de permissions suid/guid exploitables
* on regarde la crontab:

```
cat /etc/crontab
```

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2Fac9q8q00sBG0V2kGGlE2%2Fimage.png?alt=media&amp;token=84a3aefc-86dd-4c7d-8f84-d8720dc94a0d" alt=""><figcaption></figcaption></figure>

* Il ya un curl qui récupère un script shell et qui l'envoie à bash pour exécution (en root mode) toutes les minutes !
* le domaine du site est overpass.thm
* Il faudrait pouvoir pour exploiter ce cron remplacer le domaine overpass.thm par un domaine ou une ip qu'on maîtrise pour y placer un script custom ... Genre manipulation de DNS par exemple...

Regardons si par hasard on aurait accès au fichier hosts de la VM

```
cat /etc/hosts
```

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2F5nkPivNWwASJHIh8RdgK%2Fimage.png?alt=media&amp;token=bfee9efb-b6ec-448b-9dd8-785126283bf8" alt=""><figcaption></figcaption></figure>

On y a surtout accès en écriture ce qui nous permet de remplacer `overpass.thm` par notre IP.

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2FRtDH5IWUMomjNQlO9cjy%2Fimage.png?alt=media&amp;token=8056b4c8-e7c9-4bf5-88ba-3a7d3bac618d" alt=""><figcaption></figcaption></figure>

Il ne reste plus qu'à créer l'arborescence du serveur initial sur notre Kali

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2FrlQmXiTlXyIspkQDWscS%2Fimage.png?alt=media&amp;token=c378f1d9-8173-4738-949f-0cc80b99ebc4" alt=""><figcaption></figcaption></figure>

Et créer un script `buildscript.sh` custom comme par exemple un bon vieux reverseshell en bash:

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2FJGDYifGpcYl8AfkEIuyS%2Fimage.png?alt=media&amp;token=a07d0204-988f-4587-9296-f696170418e7" alt=""><figcaption></figcaption></figure>

NB: ne pas oublier le shebang  au début du fichier : `#!/bin/bash`

Vous devez avoir cette arborescence

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2FIAAIdmKy8shOm8tOrn4e%2Fimage.png?alt=media&amp;token=0fa4d5ec-0b4e-4764-a4d3-93bd17d47956" alt=""><figcaption></figcaption></figure>

A partir du même niveau d'arborescence que le répertoire downloads vous pouvez lancer un serveur python qui répondra à l’URL appelée par le cron de la VM cible

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2FptLh3vnEVOt1Oc3jfwZJ%2Fimage.png?alt=media&amp;token=c6b344d5-c4ec-4418-8679-82663c722ecf" alt=""><figcaption></figcaption></figure>

On lance le netcat en écoute sur sa Kali et on attends que le cron passe ...

```
nc -lvnp 1234
```

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2F2mz3XRGHRmjyQfruExpZ%2Fimage.png?alt=media&amp;token=ea917a91-8e96-4efc-bde4-34ad96307575" alt=""><figcaption></figcaption></figure>

Si tout se passe bien on se retrouve avec un reverse shell en tant que root et on récupère le flag final

<figure><img src="https://100368042-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9atCPHvlQFB0GlCVKzJB%2Fuploads%2FPttXIivA76UfoMv7Sdhd%2Fimage.png?alt=media&amp;token=5df84bab-892d-4e59-80ce-319754555c62" alt=""><figcaption></figcaption></figure>
