
Uma ferramenta simples para contornar restrições de upload de arquivos.

Upload Bypass é uma ferramenta simples projetada para auxiliar testadores de penetração e caçadores de bugs na testagem de mecanismos de upload de arquivos. Ela utiliza várias técnicas de bug bounty para simplificar o processo de identificação e exploração de vulnerabilidades, garantindo avaliações completas de aplicações web.

Esta ferramenta é restrita no exame OSCP!
Adequado para testes de penetração reais. Este modo enviará arquivos inofensivos e não tentará explorar o alvo.
Novo - Se uma pasta de destino para os arquivos enviados for fornecida, o programa determinará se o arquivo de amostra enviado é renderizado. Por exemplo, se você escolher PHP, o programa tentará determinar se um comando echo é executado e renderizado com sucesso; se sim, sugerirá entrar em um shell interativo.
Adequado quando você deseja explorar o alvo e enviar um Web-shell interativo (Se um diretório de upload de destino for fornecido). Ele enviará o arquivo com um UUID aleatório, dificultando a adivinhação por fuzzers.
Adequado para teste de presença de anti-malware. Envie um arquivo Eicar (arquivo de teste anti-malware) para o sistema e, se o usuário especificar a localização do arquivo enviado, o programa verificará se o arquivo foi enviado com sucesso e existe no sistema, a fim de determinar se um anti-malware está presente no sistema.
Confira o arquivo config.py no diretório lib; você pode adicionar novas extensões, tipos MIME, magic bytes, configurar o uso do protocolo HTTP/HTTPS, etc.
Para adicionar um novo módulo, basta adicionar uma função com a funcionalidade desejada ao modules.py e depois adicionar a função pelo nome à lista "active_modules" no config.py.
Para adicionar uma nova extensão de arquivo, adicione um arquivo sample.{ext} em assets/sample_files, depois adicione a extensão e seu tipo MIME/magic bytes ao 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/{seu_arquivo_de_requisição} -it sajibuu/upload_bypass -r request -s 'arquivo enviado com sucesso' -E php -e
Certifique-se de ouvir na porta 8080 em todas as interfaces!
sudo docker run -v $(pwd)/request:/Upload_Bypass/{seu_arquivo_de_requisição} -it sajibuu/upload_bypass -r request -s 'arquivo enviado com sucesso' -E php -e -p http://{ip_da_interface_docker}:8080
A ferramenta não funcionará corretamente nas seguintes situações:
Lembre-se de que o uso do Upload Bypass e quaisquer ações realizadas com ele são de sua inteira responsabilidade. A ferramenta é fornecida apenas para fins educacionais e de teste. O desenvolvedor do Upload Bypass não se responsabiliza por qualquer uso indevido, danos ou atividades ilegais causadas por seu uso.
O programa funciona apenas com arquivos de requisição gerados por ferramentas de proxy, como Burp Suite e ZAP OWASP.
Antes de salvar o arquivo de requisição do proxy que você está usando, por exemplo, Burp Suite, substitua os valores dos seguintes parâmetros pelos seus respectivos marcadores:
Conteúdo do arquivo: *data*
Exemplo: Substitua os dados binários da imagem pela string *data*
Nome do arquivo: *filename*
Exemplo: Substitua o nome do arquivo, incluindo sua extensão, pela string *filename*
Cabeçalho Content-Type: *mimetype*.
Exemplo: Substitua o content-type (tipo MIME) do arquivo pela string *mimetype*
Como deve ficar em uma requisição JSON:

Como deve ficar em uma requisição de dados multipart:

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 'Arquivo enviado com sucesso' -E php -D /uploads --burp --detect
python upload_bypass.py -r test -s 'Arquivo enviado com sucesso' -E php -D /uploads --burp --exploit
python upload_bypass.py -r test -s 'Arquivo enviado com sucesso' -E php -D /uploads --burp --anti_malware
Se você encontrar um problema, por favor, use o modo de depuração com um valor de flag 2 e compartilhe comigo (o arquivo de depuração é salvo com os argumentos fornecidos pelo usuário, o arquivo de requisição fornecido e o erro de rastreamento de pilha). Se o arquivo contiver informações sensíveis, você pode usar o valor de flag 1, que salva apenas o erro de rastreamento de pilha no arquivo.
Se você quiser contribuir com meu código, especifique exatamente o que adicionou ao código e por que, e certifique-se de realizar vários testes antes de enviar a solicitação de merge.