Hacker Lab


Nous avons accès à un site web, nous sommes connecté avec un compte utilisateur.
Notre objectif dés maintenant est de reussir à déposer un fichier de backdoor qui sera éxécuté par le serveur web et nous donnera accès à la machine.

Très souvent un formulaire permet d'uploader une image pour personnaliser son profil.
Nous allons utiliser cette fonctionalité pour déposer notre backdoor.

Démarrez votre serveur dédié en cliquant sur [Start server].


Server status : stopped


1 / 6 - Upload basique avec le navigateur web
10
Dans le navigateur: http://yoloctf.org/ctf-fileupload_/upload_basic.php 

Ce site accepte n'importe quel fichier.
Télécharge les fichiers sur ta machine, puis utilise le formulaire pour les uploader.
Execute le fichier php une fois uploadé pour récupérer le flag.

2 / 6 - Upload basique avec curl
10
Dans le navigateur: http://yoloctf.org/ctf-fileupload_/upload_basic_curl.php 
Avec proxy        : http://yoloctf.org/proxy/ctf-fileupload_/upload_basic_curl.php 
Dans le shell: 
curl http://ctf-fileupload_/upload_basic_curl.php 
curl -v -F 'file=@file_cat1.jpg' http://ctf-fileupload_/upload_basic_curl.php 

Ce site accepte n'importe quel fichier uploadé avec l'utilitaire 'curl'.
Le fichier 'webshell_read_flag.php' se trouve dans le répertoire: challenges/ctf-training/ctf-fileupload/files
Mets à jour la commande et utilise curl l'uploader.
Récupère l'emplacement du fichier uploadé dans la réponse de curl.
Execute le fichier php uploadé pour récupérer le flag.

3 / 6 - Filtre de format Mime
10
Dans le navigateur: http://yoloctf.org/ctf-fileupload_/upload_mime.php 
Avec proxy        : http://yoloctf.org/proxy/ctf-fileupload_/upload_mime.php 

Avant d'envoyer le fichier, le navigateur web l'analyse, et ajoute dans l'entête HTTP un champ Content-Type, qui peut valoir:

  • Content-Type: image/png
  • Content-Type: application/x-php
  • Content-Type: text/plain
    Le Flag est le type MIME du fichier file_cat1.jpg
4 / 6 - Filtre de format Mime
10
Dans le navigateur: http://yoloctf.org/ctf-fileupload_/upload_mime.php 
Avec proxy        : http://yoloctf.org/proxy/ctf-fileupload_/upload_mime.php 

Essaye d'uploader le fichier webshell_read_flag.php.
Utilise l'interface web du proxy pour modifier le type de fichier en image/png et réenvoyer le message POST.
Regarde le code HTML de la réponse pour trouver l'url du fichier uploadé.
Execute le fichier php uploadé pour récupérer le flag.

5 / 6 - Filtre sur l'extension du fichier - Extension enrichie
10
Dans le navigateur: http://yoloctf.org/ctf-fileupload_/upload_ext.php 
Avec proxy        : http://yoloctf.org/proxy/ctf-fileupload_/upload_ext.php 

Télécharge le fichier sur ta machine, puis utilise le formulaire pour l'uploader.
L'extension .php est filtrée.
Pas de problème renomme ton fichier en webshell_read_flag.php3, ou .php4, ou .phtml...
L'interpreteur php execute aussi bien des fichier en .php qu'en .php3
Note : Il est possible de limiter les extensions en configurant php-fpm:
Fichier /etc/php7/php-fpm.d/www.conf : security.limit_extensions = .php

6 / 6 - Filtre sur l'extension du fichier - Null Byte
10

Télécharge le fichier sur ta machine, puis utilise le formulaire pour l'uploader.

Dans le navigateur: http://yoloctf.org/ctf-fileupload_/upload_ext.php 
Avec proxy        : http://yoloctf.org/proxy/ctf-fileupload_/upload_ext.php 

Utilise leproxy pour renomer le fichier en webshell_read_flag.php%00.jpg
Le moteur PHP est écrit en C qui utilise le caractère 0 pour marquer la fin d'une string.
Lors de la recopie du nom, le fichier sera sauvé avec le nom webshell_read_flag.php