
Un outil simple pour contourner les restrictions de téléchargement de fichiers.

Upload Bypass est un outil simple conçu pour aider les testeurs d'intrusion et les chasseurs de bugs à tester les mécanismes de téléversement de fichiers. Il exploite diverses techniques de bug bounty pour simplifier le processus d'identification et d'exploitation des vulnérabilités, garantissant des évaluations approfondies des applications web.

Cet outil est interdit lors de l'examen OSCP !
Adapté aux tests d'intrusion réels. Ce mode téléverse des fichiers inoffensifs et ne tentera pas d'exploiter la cible.
Nouveau - Si un dossier de destination pour les fichiers téléversés est fourni, le programme déterminera si le fichier échantillon téléversé est rendu. Par exemple, si vous choisissez PHP, le programme tentera de déterminer si une commande echo est exécutée et rendue avec succès ; si c'est le cas, il suggérera d'entrer un shell interactif.
Adapté lorsque vous souhaitez exploiter la cible et téléverser un shell web interactif (si un répertoire de destination pour le téléversement est fourni). Il téléversera le fichier avec un UUID aléatoire, ce qui rendra plus difficile la devinette par des fuzzers.
Adapté pour un test de présence anti-malware. Téléversez un fichier Eicar (fichier de test anti-malware) sur le système, et si l'utilisateur spécifie l'emplacement du fichier téléversé, le programme vérifiera si le fichier a bien été téléversé et existe dans le système afin de déterminer si un anti-malware est présent.
Consultez config.py dans le répertoire lib, vous pouvez ajouter de nouvelles extensions, types MIME, magic bytes, configurer l'utilisation du protocole HTTP/HTTPS, etc.
Pour ajouter un nouveau module, ajoutez simplement une fonction avec la fonctionnalité souhaitée dans modules.py, puis ajoutez le nom de la fonction dans la liste "active_modules" dans config.py
Pour ajouter une nouvelle extension de fichier, ajoutez un fichier sample.{ext} dans assets/sample_files, puis ajoutez l'extension et son type MIME/magic bytes dans config.py
git clone https://github.com/sAjibuu/Upload_Bypass.git
pip install -r requirements.txt
sudo docker pull sajibuu/upload_bypass
sudo docker build -t sajibuu/upload_bypass .
sudo docker run -v $(pwd)/request:/Upload_Bypass/{your_request_file} -it sajibuu/upload_bypass -r request -s 'file was uploaded successfully' -E php -e
Assurez-vous d'écouter sur le port 8080 sur toutes les interfaces !
sudo docker run -v $(pwd)/request:/Upload_Bypass/{your_request_file} -it sajibuu/upload_bypass -r request -s 'file was uploaded successfully' -E php -e -p http://{docker_interface_IP}:8080
L'outil ne fonctionnera pas correctement dans les cas suivants :
Veuillez noter que l'utilisation d'Upload Bypass et toute action entreprise avec celui-ci sont à vos propres risques. L'outil est fourni uniquement à des fins éducatives et de test. Le développeur d'Upload Bypass n'est pas responsable de toute utilisation abusive, des dommages ou des activités illégales causées par son utilisation.
Le programme ne fonctionne qu'avec des fichiers de requête générés par des outils proxy, tels que Burp Suite et ZAP OWASP.
Avant d'enregistrer le fichier de requête depuis le proxy que vous utilisez, par exemple Burp Suite, remplacez les valeurs de paramètres suivantes par leurs marqueurs correspondants :
Contenu du fichier : *data*
Exemple : Remplacez les données binaires de l'image par la chaîne *data*
Nom du fichier : *filename*
Exemple : Remplacez le nom du fichier, y compris son extension, par la chaîne *filename*
En-tête Content-Type : *mimetype*.
Exemple : Remplacez le type de contenu (MIME) du fichier par la chaîne *mimetype*
À quoi cela devrait ressembler dans une requête JSON :

À quoi cela devrait ressembler dans une requête multi-parties :

Usage: Upload Bypass [OPTIONS]
Options:
-h, --help Print help (see more with '--help')
-U, --usage Print the how to save the request file instructions.
-v, --version Print version
Required Arguments:
-r, --request_file <REQUEST_FILE> Provide a request file to be proccessed
-E, --extension <EXTENSION> Forbidden extension to check (ex: php)
-A, --allowed <EXTENSION> Allowed extension (ex: jpeg) - Optional - if not set the program will auto-detect the extension
Choose only one from the options below:
-s, --success <MESSAGE> Provide a success message when a file is uploaded (ex: File was uploaded successfully)
-f, --failure <MESSAGE> Provide a failure message when a file is uploaded (ex: File is not allowed!)
-S, --status_code <STATUS_CODE> Provide a status code for a success upload (ex: 200)
Mode Settings:
-d, --detect Upload harmless sample files (Suitable for a real penetration test)
-e, --exploit Upload Web-Shells files when testing
-a, --anti_malware Upload Anti-Malware Test file (Eicar) when testing
I. If set with -E flag the program will test with the Eicar string along with the choosen extension
II. If set without the -E flag the program will test with Eicar string and a com extension
Modules Settings:
-l, --list List all modules
-i, --include_only <MODULES> Include only modules to test from (ex: extension_shuffle, double_extension)
-x, --exclude <MODULES> Exclude modules (ex: svg_xxe, svg_xss)
Request Settings:
--base64 Encode the file data with Base64 algorithm
--allow_redirects Follow redirects
-P, --put Use the HTTP PUT method for the requests (Default is POST)
-Pa, --patch Use the HTTP Patch method for the requests (Default is POST)
-R, --response Print the response to the screen
-c, --continue Continue testing all files, even if a few uploads encountered success
-t, --time_out <NUM> Set the request timeout (Default is 8)
-rl, --rate_limit <NUMBER> Set a rate-limit with a delay in milliseconds between each request
Proxy Settings:
-p, --proxy <PROXY> Proxy to use for requests (ex: http(s)://host:port, socks5(h)://host:port)
-k, --insecure Do not verify SSL certificates
--burp_http Set --proxy to 127.0.0.1:8080 and set --insecure to true (For HTTP requests)
--burp_https Set --proxy to 127.0.0.1:8080 and set --insecure to false (For HTTPs requests)
Optional Settings:
-D, --upload_dir <UPLOAD_DIR> Provide a remote path where the Web-Shell should be uploaded (ex: /uploads)
-o, --output <OUTPUT_PATH> Output file to write the results into - Default current directory (ex: ~/Desktop/results.txt)
--debug <NUM> Debug mode - Print the stack trace error to the screen and save it to a file (ex: --debug 1)
I. Level 1 - Saves only the stack trace error (default).
II. Level 2 - Saves the stack trace error and user's arguments along with the request file.
Resume settings:
--resume <STATE_FILE> State file from which to resume a partially complete scan
Update settings:
-u, --update Update the program to the latest version
python upload_bypass.py -r test -s 'File uploaded successfully' -E php -D /uploads --burp --detect
python upload_bypass.py -r test -s 'File uploaded successfully' -E php -D /uploads --burp --exploit
python upload_bypass.py -r test -s 'File uploaded successfully' -E php -D /uploads --burp --anti_malware
Si vous rencontrez un problème, veuillez utiliser le mode débogage avec une valeur de drapeau 2 et partagez-le avec moi (le fichier de débogage est enregistré avec les arguments fournis par l'utilisateur, le fichier de requête fourni et l'erreur de trace de la pile). Si le fichier contient des informations sensibles, vous pouvez utiliser la valeur de drapeau 1, qui enregistre uniquement l'erreur de trace de la pile dans le fichier.
Si vous souhaitez contribuer à mon code, veuillez spécifier exactement ce que vous avez ajouté au code et pourquoi, et assurez-vous d'effectuer plusieurs tests avant de soumettre la demande de fusion.