- Копирование файлов через SSH
- Копирование файлов по SSH на Linux
- Как скопировать файл по SSH с локальной машины на удалённый сервер
- Как скопировать файлы с удалённого сервера на локальный компьютер
- Как скопировать файл по SSH с одного удалённого сервера на другой
- Как скачать папку со всеми файлами и подпапками
- Как подключиться к серверу по нестандартному порту
- Как передать и скачать файлы по SSH на Windows
- Как скачивать файлы по SSH
- Графический интерфейс SFTP
- SFTP в FileZilla
- SFTP в Double Commander
- SFTP в менеджере файлов: управление файлами на удалённом хосте через стандартный файловый менеджер
- Как в curl работать с протоколами SCP и SFTP
- cURL и SCP
- cURL и SFTP
- Заключение
- HackWare.ru
- Этичный хакинг и тестирование на проникновение, информационная безопасность
- Как скачать файл с сервера
- 1. cat + копирование с экрана/браузера
- 2. base64 + копирование с экрана/браузера
- 3. Помещение файла в директорию сайта и скачивание с веб-сервера
- 4. cURL + POST
- 5. ngrok
- 6. Встроенный сервер PHP
- 7. SSH и перенаправление вывода на текущую систему
- 8. scp
- 9. Сетевая файловая система SSHFS
- 10. Ncat, Netcat, nc
- 11. Бэкдоры
- Заключение
Копирование файлов через SSH
В статье мы расскажем, как копировать файлы в Windows и Linux-системах, и покажем основные команды, с помощью которых происходит передача файлов по SSH.
Для копирования файлов по SSH в Linux-системах и Windows используют разные инструменты:
- scp (Secure CoPy) — утилита для безопасного копирования данных между Linux-системами по протоколу SSH. Она входит в состав OpenSSH, поэтому для работы с утилитой не нужно устанавливать дополнительное ПО;
- pscp.exe — утилита для загрузки файлов по SSH в ОС Windows. Она обладает теми же возможностями, что и scp. Утилита входит в состав программы Putty — SSH-клиента для Windows. Скачать программу можно по ссылке.
Копирование файлов по SSH на Linux
Для Linux копирование файлов по SSH происходит с использованием команды scp. С её помощью можно копировать файлы:
- с локального компьютера на удалённый сервер,
- с удалённого сервера на локальный компьютер,
- с одного удалённого сервера на другой.
Общий вид команды:
Как скопировать файл по SSH с локальной машины на удалённый сервер
Как загрузить файл на сервер по SSH? Для этого используйте команду вида:
Файл test.txt будет скопирован на хост 123.123.123.123 в директорию «/directory».
Как скопировать файлы с удалённого сервера на локальный компьютер
При подключённом SSH скачать файл на локальный компьютер с удалённого сервера можно с помощью команды:
Файл test.txt будет загружен с сервера 123.123.123.123 на локальный компьютер в папку «/directory».
Как скопировать файл по SSH с одного удалённого сервера на другой
Подключитесь по SSH к серверу, на котором расположен файл. Затем выполните команду:
Файл test.txt будет скопирован на хост 123.123.123.123 в директорию «/directory».
Как скачать папку со всеми файлами и подпапками
Если вы хотите скачать папку со всеми файлами и подпапками, используйте ключ -r:
Как подключиться к серверу по нестандартному порту
Бывает, что для подключения по SSH нужно указать нестандартный порт. Без указания порта команда подключается к серверу по стандартному 22 порту. Чтобы указать нестандартный порт, введите команду с ключом -P:
Эта команда подключается по порту 12345 к серверу 123.123.123.123 и копирует на него файл «test.txt» с локального компьютера в директорию «/directory».
Как передать и скачать файлы по SSH на Windows
Скопировать файл по SSH на сервер можно командой:
Скачать файл по SSH с сервера командой:
Увидеть список папок и файлов на сервере можно через pscp.exe. Для этого введите:
Если в пути или в названии файла есть пробелы, используйте кавычки:
Как скачивать файлы по SSH
Графический интерфейс SFTP
Если на сервере или просто удалённом компьютере запущен SSH, то для передачи файлов на этот компьютер или скачивания файлов с него не нужно устанавливать FTP или любое другое дополнительное программное обеспечение.
SSH из коробки поддерживает протоколы SCP и SFTP. Причём в пакете ssh поставляются одноимённые утилиты scp и sftp для обмена файлами. Подробности о них вы найдёте в статье «SSH (ч.5): Копирование файлов с помощью scp и sftp». Но это утилиты с интерфейсом командной строки, что не всем может быть удобно.
Протокол SFTP поддерживается несколькими кроссплатформенными программами с графическим интерфейсом. То есть, вы можете закачивать и управлять файлами на сервере через программу с графическим интерфейсом. Причём на сервере кроме запущенного SSH больше ничего не требуется.
SFTP в FileZilla
FileZilla — это не только FTP клиент, эта программа также поддерживает FTP через TLS (FTPS) и, главное для нас сейчас, эта программа поддерживает тот самый протокол SFTP. Программа является бесплатной, у неё открыт исходный код, она работает под Linux и Windows.
Использование программы элементарное — нужно указать хост (IP), имя пользователя и порт. Предположим, я хочу подключиться к хосту 192.168.1.68, под пользователем root. В качестве порта нужно указать порт, на котором работает SSH на этом удалённом сервере, по умолчанию это 22.
Можно просто ввести данные в поля, но мне нравится составлять такие URI адреса, которые начинаются на sftp:// — дело в том, что они нам ещё пригодяться!
Итак, я составил адрес
вставляю его в поле «Хост» и нажимаю кнопку «Быстрое подключение»:
Если вы когда-либо работали с SSH, то вы знаете, что перед каждым первым подключением к новому хосту, нужно согласиться добавить его в список известных хостов:
В этом нет ничего страшного — это сделано для дополнительной защиты (если кто-то подменит хост, то мы об этом узнаем сразу при попытке подключения).
Нажимаем «ОК» и получаем список файлов директории, к которой мы подключились:
Теперь мы можем бродить по каталогам, скачивать файлы с удалённого компьютера и закачивать туда файлы с локальной машины.
SFTP в Double Commander
Double Commander, как и его прототип Total Commander, умеют работать с SFTP с помощью плагина. Но в Double Commander плагин нужно установить, прежде чем эта программа начнёт понимать SFTP.
Я покажу на примере Double Commander в Linux. Если у вас Windows и показанный способ не сработает, то напишите в комментариях, попробуем вместе найти решение (вероятные пути — пробовать плагины Total Commander для SFTP, поскольку Double Commander совместим с ними).
Итак, нам нужен плагин gvfs, скачиваем его.
Распаковываем скаченный архив.
Теперь открываем Double Commander, в меню переходим в «Настройки» → «Параметры» → Вкладка «Плагины» → Плагины WFX.
Нажимаем кнопку «Добавить» и указываем скаченный файл:
Сохраняем, закрываем меню настроек, на всякий случай перезапускаем Double Commander.
Теперь нажимаем на эту кнопку и затем выбираем Network:
Можно нажать и ввести уже знакомый нам URI (если честно, мне просто лень расписывать данные по полям):
Можно указать целевой путь, то есть папку, которая будет открыта на сервере после подключения. Кстати, ведь его можно было указать прямо в URI (об этом чуть ниже):
Имя пользователя мы уже указали в URI, поэтому можно пропустить:
У меня для SSH настроен вход без пароля (аутентификация по ключу), поэтому ничего не ввожу:
Попадаю на удалённый хост, здесь я могу переходить по папкам, делать различные операции с файлами на удалённом компьютере в двухфайловом менеджере:
Прямо в URI можно указывать папку, которая должна быть открыта после подключения. Предположим, я хочу, чтобы открывалась папка /var/www/html, тогда URI будет иметь следующий вид:
В Double Commander и FileZilla можно настроить подключения, чтобы соединение с сервером происходило сразу при выборе желаемого подключения.
SFTP в менеджере файлов: управление файлами на удалённом хосте через стандартный файловый менеджер
SFTP протокол поддерживается многими графическими файловыми менеджерами, которые можно найти в дистрибутивах Linux. Используя как Nemo (Cinnamon), Nautilus (GNOME), так и Konqueror (KDE), мы можем вводить URI (ссылки) начинающиеся на sftp:// в строку перехода и работать с файлами, расположенными на удалённой системе с запущенным SSH сервером.
К примеру, пользователем на удалённой системе является root, IP адрес удалённого хоста 192.168.1.68 и на нём запущен SSH сервер на 22 порту и я хочу открыть папку /root/bin/. Тогда я открываю стандартный менеджер файлов Linux и ввожу туда адрес:
Теперь я могу работать с файлами как если бы они были в локальной системе: перетаскивать, смотреть их свойства, загружать на локальный компьютер.
Кстати, желаемое соединение до удалённой системы можно добавить в закладки стандартного менеджера файлов и открывать его одним кликом. И уже несколько лет как стандартный менеджер файлов Linux поддерживает дополнительную вкладку — в настройках вы можете включить вторую панель для файлового менеджера Linux.
Как в curl работать с протоколами SCP и SFTP
В отличие от всех рассмотренных ранее, cURL — это программа с интерфейсом командной строки. Но всё равно рассмотрим и вариант с cURL — возможно, кому-то пригодиться.
На мой взгляд, работать с протоколами SCP и SFTP в командной строке удобнее через родные утилиты, поэтому я бы в первую очередь порекомендовал изучить «SSH (ч.5): Копирование файлов с помощью scp и sftp» — там подробно описано как пользоваться этими программами.
cURL и SCP
Протокол SCP предназначен в первую очередь для скачивания и закачки файлов. Для скачивания используется команда вида:
Файл oneshot.py из папки /root/bin/ будет скачен в текущую рабочую директорию с исходным именем. Чтобы сохранить файл в другое место и/или с другим именем, добавьте опцию -o, —output — в качестве укажите путь в локальной системе.
Мы используем опцию -k которая предназначена для разрешения небезопасных соединений, то есть когда невозможно валидировать (проверить) ключи. Ключи для SSH генерируются пользователями, поэтому проверить их с помощью третьей стороны невозможно. При этом данные соединения не стоит считать небезопасными — они такие же, как и при подключении по SSH, то есть надёжные.
Если приватный ключ для подключения находится по другому пути, то используйте опцию —key
/.ssh/id_rsa. В современных версиях cURL указывать публичный ключ не нужно — программа сама извлечёт его из приватного ключа. Если вход по ключу не настроен, то используйте опцию —user «testuser:testpassword» или -u user.
Для закачки файла на удалённый сервер используйте опцию -T, —upload-file , где вместо укажите файл, который нужно выгрузить. Пример команды:
cURL и SFTP
При работе с протоколом SFTP, также применяются опции:
- -k (разрешить подключения при неудачной валидации ключа)
- —key
/.ssh/id_rsa — указать другое расположение приватного ключа
Для листинга списка файлов файлов в директории /root/bin/ пользователя root на хосте 192.168.1.68, порт 22:
- Выгрузка используя curl на SFTP
- Загрузка используя curl на SFTP
- Переименование используя curl на SFTP
- Удаление используя curl на SFTP
- Создание директории используя curl на SFTP
- Удаление директории используя curl на SFTP
Как можно догадаться, -Q — это опция для отправки команд на SFTP сервер. Дефис перед командой (префикс) также имеет значение (имеются разные префиксы). Нужно знать, что cURL поддерживает не все команды SFTP — подробности в документации по cURL:
Опция —ftp-create-dirs означает создать необходимую директорию, если она отсутствует (в противном случае работа cURL завершится ошибкой).
Заключение
Итак, если на сервере (удалённом компьютере) запущен SSH, то не нужно устанавливать какие-либо дополнительные программы чтобы загрузить на него файлы или скачать с него файлы. Можно воспользоваться различными вариантами с удобным графическим интерфейсом, либо утилитами командной строки, которые можно задействовать в скриптах.
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Как скачать файл с сервера
Это небольшая шпаргалка, как скопировать файлы с уже скомпрометированной системы. Типичные ситуации:
- на веб сайте найдена уязвимость Удалённое выполнение кода
- получены учётные данные пользователя, позволяющие подключиться по SSH (например, с помощью брут-форса)
Я перечислю несколько способов, как скопировать файл с сервера, я не сомневаюсь, что вы сможете придумать ещё столько же или больше (кстати, делитесь ими в комментариях), выбор конкретного способа зависит от условий и от личных предпочтений.
Условия могут быть разные:
- по уровню привилегий:
- мы пользователь www-data или http (если команды выполняются через уязвимый веб-сайт), в этом случае у нас есть права на запись в директорию веб-сервера
- мы пользователь без sudo, в этом случае мы можем записывать файлы в свою домашнюю директорию, а также в /tmp
- мы пользователь с sudo, мы можем делать что угодно
- по способу выполнения команд:
- выполняется через уязвимое веб-приложение, в этом случае запуск сложных команд может быть затруднён из-за фильтрации кавычек и других специальных символов
- команды выполняются при подключении по SSH, удобный способ, можно выполнять команды с любыми символами
1. cat + копирование с экрана/браузера
Простейший способ, с помощью команды cat выводится содержимое файла. Он подходит только для текстовых файлов. При выполнении команды по SSH, содержимое файла выводится в консоли, при выполнении через уязвимое веб-приложение, содержимое файла выводится на странице сайта:
Если делаете через выполнение команд в веб-браузере, то для нормального отображения откройте исходный код веб-страницы:
2. base64 + копирование с экрана/браузера
Этот способ похож на предыдущий, его можно применять для скачивания бинарных файлов, если другой возможности нет.
Для понимания сути, изучите следующие команды:
Содержимое исполнимого файла /usr/bin/ls (команда ls) кодируется в Base64 и сохраняется в файл ls.txt:
Можно посмотреть, что в файле ls.txt размещён текст, который можно скопировать/вставить:
Теперь этот текст декодируем и сохраняем в файл ls.bin:
С помощью команды chmod делаем файл ls.bin исполнимым:
Проверяем работоспособность этого файла:
Суть в том, что с помощью base64 можно копированием-вставкой передавать бинарные файлы без возможности выгрузить их с сервера другим способом.
3. Помещение файла в директорию сайта и скачивание с веб-сервера
Допустим у нас есть право записи в директорию веб-сайта (мы выполняем команды через уязвимое веб-приложение). Адрес сайта not-secure-site.org. Тогда мы можем скопировать файл в директорию сайта и скачать его веб-браузером.
Допустим, папка сайта это /var/www/html/, тогда копируем нужный нам файл в неё следующей командой:
Теперь этот файл будет доступен по ссылке http://not-secure-site.org/passwd.txt
Чтобы узнать текущую папку, где выполняется уязвимый скрипт, выполните команду pwd:
Типичные папки с сайтами:
- /srv/http/ — некоторые дистрибутивы (например, Arch Linux) хранят здесь файлы веб-сервера.
- /var/www/html/ — директория с файлами веб-сайтов веб-сервера Apache в Debian и производных дистрибутивах.
/etc/apache2/ — директория с настройками веб-сервера (когда служба называется apache2 — то есть в таких системах как Debian и производных)
Если неизвестно где папки сайтов, то нужно смотреть конфигурационные файлы Apache, там же можно узнать адрес сайта, если вдруг вы его не знаете (такое может быть, если сервер скомпрометирован по SSH):
- /etc/apache2/conf/httpd.conf — главный конфигурационный файл Apache
- /etc/apache2/conf/sites-enabled/ — включённые виртуальные хосты Apache
/etc/httpd/ — директория с настройками веб-сервера (когда служба называется httpd — то есть в таких системах как Arch Linux и производных)
- /etc/httpd/conf/httpd.conf — главный конфигурационный файл Apache
- /etc/httpd/conf/sites-enabled/ — включённые виртуальные хосты Apache
Чтобы посмотреть, запущен ли вообще веб-сервер:
Если файлов много, то их можно заархивировать:
Если программа zip недоступна, то используйте tar:
Или другие программы для архивации, для этого смотрите также «Работа с архивами в Linux».
4. cURL + POST
Этот способ не требует наличия веб-сервера и, по идее, должен работать также и на Windows, поскольку там cURL предустановлена по умолчанию.
Суть очень проста. Каждый из нас множество раз выгружал файлы с компьютера на сайт, например, фотографию для профиля или файл в файлообменник. Мы используем веб-браузер, который методом POST отправляет файл. Вместо браузера можно отправлять файл с помощью команды curl, которая также умеет использовать метод POST.
На сервере создайте файл uploader.php:
С компьютера, с которого нужно выгрузить файл, запустите команду вида:
Обратите внимание на символ @ — он нужен для того, чтобы параметру file было присвоено не значение строки «/путь/до/файла», а содержимое того самого файла, который находится по пути /путь/до/файла.
Если у вас серый IP адрес (к которому невозможно подключиться из Интернета), то в этой ситуации поможет программа ngrok. То есть в предыдущей команды вместо СЕРВЕР/uploader.php можно указать домен третьего уровня ngrok, от которого идёт туннель к вашему локальному веб-серверу.
5. ngrok
Программа ngrok отсутствует по умолчанию, поэтому нужно начать с установки:
Не забудьте заменить ВАШ_AUTHTOKEN на настоящее значение.
Эта долгая установка точно стоит своих усилий, дело в том, что теперь можно сделать сетевой абсолютно ЛЮБУЮ папку на компьютере Linux! Например:
6. Встроенный сервер PHP
У PHP есть встроенный веб сервер. Сам PHP довольно часто присутствует на компьютерах Linux, а если это веб-сервер, то присутствует практически всегда.
Особенность использования веб-сервера PHP от использования веб-сервера системы в том, вы запускаете PHP от своего текущего пользователя, а не от www-data или http, т. е. у вас другие права на доступ к файлам.
Нужно запускать командой вида:
В качестве IP нужно указать IP адрес удалённого компьютера, узнать его можно командой:
PORT можно указать любой, но для использования портов ниже 1024 нужны привилегии суперпользователя.
Обратите внимание, что листинг файлов в директории отсутствует, то есть открывая в веб-браузере ссылку нужно указать имя конкретного файла, который присутствует в директории /путь/до/папки, пример ссылки http://192.168.0.89:8484/файл
7. SSH и перенаправление вывода на текущую систему
SSH можно использовать для копирования текстовых файлов:
А также и для копирования бинарных файлов:
8. scp
Программа scp является частью SSH и предназначена специально для копирования файлов в любом направлении. То есть если у вас есть возможность подключиться по SSH, то намного удобнее воспользоваться scp.
Вид команды для копирования с удалённого компьютера на локальный компьютер:
Больше подробностей смотрите в разделе «Как пользоваться утилитой scp».
9. Сетевая файловая система SSHFS
Если у вас есть возможность подключиться по SSH, то вы можете смонтировать удалённую файловую систему как свою локальную командой вида:
10. Ncat, Netcat, nc
Чтобы отправить файл через TCP порт 9899 с HOST2 (клиент) на HOST1 (сервер):
На HOST1 выполните:
Чтобы отправить в другом направлении (с HOST1 на HOST2), превратив Ncat в сервер «одного файла»:
На HOST1 запустите:
И на HOST2 выполните:
11. Бэкдоры
Самый распространённый вариант для веб-серверов. Можно скачать бэкдор с веб-интерфейсом:
А можно использовать более привычные шеллы с обфускацией и сокрытием передаваемых запросов от логов веб-сервера.
Больше подробностей смотрите по ссылкам:
Заключение
Конечно, способов скачать файл с удалённого компьютера через шелл или уязвимость веб сайта намного больше. Пишите в комментариях свои любимые способы!