File Upload (Easy)
Consignes
Le flag se trouve à la racine !
Réalisation
En accédant au site, nous arrivons sur une page sur laquelle nous pouvons upload un fichier (comme l'indique le nom du challenge mais bon).
Le site me propose de charger une image.
Je pars donc du principe que nous pouvons acceder aux fichiers qui sont upload, ou su mons que ces dernier sont stockés à un endroit.
Je choisis donc de réaliser une recherche des répertoires présents sur le site à l'aide de dirsearch
dirsearch -r -w /usr/share/wordlists/seclists/Discovery/Web-Content/quickhits.txt -u "http://$TARGET/"Voici ce qui m'est retourné suite à l'eecution de cette commande :
[18:48:18] Scanning:
[18:48:22] 403 - 292B - /server-status/
Added to the queue: server-status/
[18:48:22] 403 - 292B - /uploads/
Added to the queue: uploads/
Je sais maintenant qu'il existe les répertoires /server-status et /uploads comme souhaité.
J'essaie d'accéder aux liens, cependant le message "You don't have permission to access this resource." apparaît.
Afin de voir si je peux accéder au contenu de ce répertoire, j'upload une image nommée cat.jpeg pour essayer d'y accéder plus tard.
Une fois le fihcier upload, le site me retourne "Fichier uploadé : /uploads/cat.jpeg".
Je me rends donc dans le répertoire /uploads/cat.jpeg afin de vérifier que j'y ai bien accès.
J'ai bien accès à mon image.
Le but maintenant est d'introduire un code qui me permettrait soit de me balader dans la machine via l'URL soit qui ouvre un reverse shell mais plus chiant à mettre en place étant donné que la machine cible n'est pas dans mon propre réseau.
Je choisi de réaliser un reverse shell pour avoir une vue depuis mon pc. J'active donc mon extension FoxyProxy avec le lien vers burp d'effectué et le lance l'interception des données sur BurpSuite.
Je choisi d'intercepter mon image de chat que je renvoi une nouvelle fois sur le site pour effectuer un test.

On retrouve ici le nom de notre fichier cat.jpeg et on observe également que le "Content-Type" retourné dans la requête est image/jpeg . Le site capte donc bien le fichier comme une image.
Pour le reste du texte en bas de page, il s'agit des métadonnées de l'image.
Le but va donc être ici de changer le nom du fichier uploadé pour ensuite exécuter du code php pour effectuer le reverse shell tant attendu.
Dans un premier temps, on lance dans un premier terminal la commande suivante :
Important :
Pour utiliser ngrok, il faut créer son compte sur https://ngrok.com/.
Une fois le compte créé, il va falloir renseigner sur notre machine le token d'authentification de votre compte à l'aide de la commande suivante :
ngrok config add-authtoken https://dashboard.ngrok.com/get-started/your-authtoken
⚠️Il faut bien évidement remplacer "https://dashboard.ngrok.com/get-started/your-authtoken" par le token retourné à cette même adresse.
La commande ngrok étant lancée, nous devons retenir 2 choses importantes :
Adresse = 6.tcp.eu.ngrok.io
Port = 14016
Ces 2 éléments vont nous permettre de construire notre reverse shell.
Nous exécutons dans un second terminal la commande suivante :
Notre machine est donc maintenant en écoute sur le port 4444, donc toute personne se connectant à l'adresse ngrok sur le port 444 sera retransmise dans l'invite de commande utilisé avec netcat. Nous retournons maintenant sur Burpsuite et modifions les valeurs nommées plus tôt pour injecter notre reverse shell en prenant en compte l'adresse et le port retourné par ngrok :

Après avoir modifié le nom du fichier, on change sa valeur par notre reverse shell :
Une fois le reverse shell écrit, on envoi la requête pour obtenir le résultat présent sur la droite de l'image ci-dessus.
Une fois envoyé, la page nous informe que notre fichier shell.php est bien upload à /uploads/shell.php
Nous avons donc ici trouvé un moyen d'importé un fichier autre qu'une image.
Maintenant on accède à l'URL http://ctf/uploads/shell.php
Une connexion s'effectue donc et est visible sur notre commande netcat :
Nous observons donc que je suis bien connecté à la machine. Maintenant je suis l'énoncé du challenge et je me rend à la racine de la machine pour lire le FLAG :
Nous obtenons donc le FLAG :
Last updated