Как скопировать с сервера на компьютер
Передача файлов на удаленный сервер невозможна при помощи обычной физической флешки или другого устройства хранения данных, поэтому пользователям приходится использовать сетевые методы копирования и перемещения объектов. При этом важно выбрать безопасный вариант, реализация которого не займет много времени.
Один из самых надежных способов – использование консольной утилиты SCP в Linux, о которой и пойдет речь далее.
Необходимость в SSH-сервере
Перед началом разбора необходимо остановиться на таком понятии, как SSH-сервер. Он необходим для работы SCP в Linux, поскольку утилита использует именно этот протокол. Вам понадобится установить SSH-протокол и настроить его. Кроме того, важно знать пароль или ключ для подключения, о чем более детально читайте в статье по следующей ссылке.
Синтаксис и использование утилиты SCP
Это общий синтаксис утилиты, который необходимо использовать при вводе команды в Терминале, чтобы она выполнилась успешно и обработала ваш запрос. Как видно, ничего в этом трудного нет, однако нужно подробнее разобрать доступные опции (они же options в строке синтаксиса):
-1 – в этом случае используется протокол SSH1;
-2 – то же самое, но с версией SSH2;
-B – активация пакетного режима, когда нужно передать сразу пачку файлов;
-C – использовать сжатие при отправке;
- l – установка ограничения в кбит/сек (значение задается пользователем вручную);
-o – добавление опций SSH;
-p – сохранение времени изменений файлов;
-r – использование рекурсивного копирования папок;
-v – переход в более развернутый режим.
Некоторые из перечисленных опций, возможно, пригодятся вам в работе, поэтому рекомендую запомнить их или где-то сохранить с понятными для вас пометками, чтобы знать, когда и что использовать. Далее я развернуто расскажу о популярных опциях и их практическом применении.
Выбор пользователя
Так выглядит стандартное копирование файлов SCP без применения дополнительных опций. То есть вы указываете путь к файлу (user замените на свое имя пользователя), затем добавляете путь назначения. Одно важное замечание: у пользователя должно быть разрешение на запись в указанную папку, иначе операция прервется.
Копирование директории
Если вы ознакомились с описанным выше списком опций, то уже знаете, что SCP предлагает передачу целых директорий с использованием опции -r. В таком случае строка в Терминале обретает вид:
Если нужно передать все файлы из определенной папки, замените строку на следующую:
Только не забудьте изменить путь к файлу и место назначения. Как видно, добавилась только косая черта после последней директории и значок *, обозначающий копирование всех элементов.
Копирование с сервера на компьютер
Предыдущие три команды позволяли передавать файлы с локального компьютера на удаленный сервер, однако утилита поддерживает и обратное направление. В таком случае написание команды в консоли немного меняется и обретает примерно такой вид:
Мы просто поменяли местами пути в команде. Вы можете использовать все те же опции, осуществляя копирование с разными атрибутами или передавая целые каталоги.
Если файлы передаются с одного удаленного сервера на другой, то их адреса указываются следующим образом:
При вводе команд обращайте внимание на одну деталь: путь к директории, в которую вы копируете данные, обязательно должен заканчиваться косой чертой, иначе произойдет перезапись файлов, и вы потеряете данные, хранящиеся в конечной папке.Это была общая информация об утилите SCP, которая поможет скопировать файлы с компьютера на удаленный сервер либо перенести их между удаленными серверами. Используйте опции и не забывайте проверять пути, чтобы случайно не перезаписать важные файлы.
В статье мы расскажем, как копировать файлы в Windows и Linux-системах, и покажем основные команды, с помощью которых происходит передача файлов по SSH.
В Linux и Windows-системах используют разные инструменты для копирования файлов по SSH.
В Linux для копирования данных по протоколу SSH используется утилита scp (Secure CoPy). Она входит в состав OpenSSH, поэтому для работы с утилитой устанавливать дополнительное ПО не нужно.
В Windows для загрузки файлов по SSH используется утилита pscp.exe. Её функционал схож с scp. Утилита входит в состав программы Putty (SSH-клиент для Windows). Putty не входит в стандартный набор Windows-программ, поэтому её нужно будет скачать с официального сайта.
Обратите внимание! Если файл, который вы хотите скопировать, уже существует на целевом хосте, при копировании он будет перезаписан.
Копирование файлов по SSH на Linux
Как скачать файл с сервера через SSH? На Linux копирование файлов по SSH делается с помощью команды scp. Команда может копировать файлы как с локального компьютера на удалённый сервер, так и с удалённого сервера на локальный компьютер.
Обратите внимание! Для подключения к удалённому серверу вам понадобится логин и пароль.
В общем виде команда выглядит так:
Как скопировать файл по SSH с локальной машины на удалённый сервер
Как загрузить файл на сервер по SSH? Для этой операции используется команда вида:
Например, команда может выглядеть так:
То есть файл test.txt будет скопирован на хост 123.123.123.123 в директорию «/directory».
Как скопировать файлы с удалённого сервера на локальный компьютер
При подключённом SSH скачать файл на локальный компьютер с удалённого сервера можно с помощью команды:
То есть файл test.txt будет загружен с сервера 123.123.123.123 на локальный компьютер в папку “/directory”.
Как скачать папку со всеми файлами и подпапками
При необходимости можно скачать папку со всеми файлами и подпапками, для этого используйте ключ -r:
Как подключиться к серверу по нестандартному порту
Если не указывать порт, команда подключается к серверу по стандартному 22 порту. Но бывает, что для подключения по SSH нужно указать нестандартный порт. Чтобы это сделать, введите команду с ключём -P:
Этичный хакинг и тестирование на проникновение, информационная безопасность
Это небольшая шпаргалка, как скопировать файлы с уже скомпрометированной системы. Типичные ситуации:
- на веб сайте найдена уязвимость Удалённое выполнение кода
- получены учётные данные пользователя, позволяющие подключиться по SSH (например, с помощью брут-форса)
Я перечислю несколько способов, как скопировать файл с сервера, я не сомневаюсь, что вы сможете придумать ещё столько же или больше (кстати, делитесь ими в комментариях), выбор конкретного способа зависит от условий и от личных предпочтений.
Условия могут быть разные:
1. cat + копирование с экрана/браузера
Простейший способ, с помощью команды cat выводится содержимое файла. Он подходит только для текстовых файлов. При выполнении команды по SSH, содержимое файла выводится в консоли, при выполнении через уязвимое веб-приложение, содержимое файла выводится на странице сайта:
Если делаете через выполнение команд в веб-браузере, то для нормального отображения откройте исходный код веб-страницы:
2. base64 + копирование с экрана/браузера
Этот способ похож на предыдущий, его можно применять для скачивания бинарных файлов, если другой возможности нет.
Для понимания сути, изучите следующие команды:
Содержимое исполнимого файла /usr/bin/ls (команда ls) кодируется в Base64 и сохраняется в файл ls.txt:
Можно посмотреть, что в файле ls.txt размещён текст, который можно скопировать/вставить:
Теперь этот текст декодируем и сохраняем в файл ls.bin:
С помощью команды chmod делаем файл ls.bin исполнимым:
Проверяем работоспособность этого файла:
Суть в том, что с помощью base64 можно копированием-вставкой передавать бинарные файлы без возможности выгрузить их с сервера другим способом.
3. Помещение файла в директорию сайта и скачивание с веб-сервера
Допустим, папка сайта это /var/www/html/, тогда копируем нужный нам файл в неё следующей командой:
Чтобы узнать текущую папку, где выполняется уязвимый скрипт, выполните команду pwd:
Типичные папки с сайтами:
/etc/apache2/ — директория с настройками веб-сервера (когда служба называется apache2 — то есть в таких системах как Debian и производных)
Если неизвестно где папки сайтов, то нужно смотреть конфигурационные файлы Apache, там же можно узнать адрес сайта, если вдруг вы его не знаете (такое может быть, если сервер скомпрометирован по SSH):
Чтобы посмотреть, запущен ли вообще веб-сервер:
Если файлов много, то их можно заархивировать:
Если программа 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, а если это веб-сервер, то присутствует практически всегда.
Нужно запускать командой вида:
В качестве IP нужно указать IP адрес удалённого компьютера, узнать его можно командой:
PORT можно указать любой, но для использования портов ниже 1024 нужны привилегии суперпользователя.
7. SSH и перенаправление вывода на текущую систему
SSH можно использовать для копирования текстовых файлов:
А также и для копирования бинарных файлов:
8. scp
Программа scp является частью SSH и предназначена специально для копирования файлов в любом направлении. То есть если у вас есть возможность подключиться по SSH, то намного удобнее воспользоваться scp.
Вид команды для копирования с удалённого компьютера на локальный компьютер:
9. Сетевая файловая система SSHFS
Если у вас есть возможность подключиться по SSH, то вы можете смонтировать удалённую файловую систему как свою локальную командой вида:
10. Ncat, Netcat, nc
На HOST1 выполните:
На HOST1 запустите:
И на HOST2 выполните:
11. Бэкдоры
Самый распространённый вариант для веб-серверов. Можно скачать бэкдор с веб-интерфейсом:
А можно использовать более привычные шеллы с обфускацией и сокрытием передаваемых запросов от логов веб-сервера.
Больше подробностей смотрите по ссылкам:
Заключение
Конечно, способов скачать файл с удалённого компьютера через шелл или уязвимость веб сайта намного больше. Пишите в комментариях свои любимые способы!
В статье мы расскажем, как копировать файлы в Windows и Linux-системах, и покажем основные команды, с помощью которых происходит передача файлов по SSH.
Для копирования файлов по SSH в Linux-системах и Windows используют разные инструменты:
Обратите внимание! Если файл, который вы хотите скопировать, уже существует на целевом хосте, при копировании он будет перезаписан.Копирование файлов по SSH на Linux
Для Linux копирование файлов по SSH происходит с использованием команды scp. С её помощью можно копировать файлы:
- с локального компьютера на удалённый сервер,
- с удалённого сервера на локальный компьютер.
Общий вид команды:
scp [опция] [источник] [получатель]
Обратите внимание! Для подключения к удалённому серверу вам понадобится логин и пароль пользователя.Как скопировать файл по SSH с локальной машины на удалённый сервер
Как загрузить файл на сервер по SSH? Для этого используйте команду вида:
scp [путь к файлу] [имя пользователя]@[имя сервера/ip-адрес]:[путь к файлу]
scp /home/test.txt [email protected]:/directory
Файл test.txt будет скопирован на хост 123.123.123.123 в директорию «/directory».
Как скопировать файлы с удалённого сервера на локальный компьютер
При подключённом SSH скачать файл на локальный компьютер с удалённого сервера можно с помощью команды:
scp [имя пользователя]@[имя сервера/ip-адрес]:[путь к файлу] [путь к файлу]
scp [email protected]:/home/test.txt /directory
Файл test.txt будет загружен с сервера 123.123.123.123 на локальный компьютер в папку «/directory».
Как скачать папку со всеми файлами и подпапками
Если вы хотите скачать папку со всеми файлами и подпапками, используйте ключ -r:
scp -r [источник] [получатель]
Как подключиться к серверу по нестандартному порту
Бывает, что для подключения по SSH нужно указать нестандартный порт. Без указания порта команда подключается к серверу по стандартному 22 порту. Чтобы указать нестандартный порт, введите команду с ключём -P:
scp -P [источник] [получатель]
scp -P 12345 /home/test.txt [email protected]:/directory
Эта команда подключается по порту 12345 к серверу 123.123.123.123 и копирует на него файл «test.txt» с локального компьютера в директорию «/directory».
Как передать и скачать файлы по SSH на Windows
Скопировать файл по SSH на сервер можно командой:
pscp [путь к файлу] [имя пользователя]@[имя сервера/ip-адрес]:[путь к файлу]
pscp [имя пользователя]@[имя сервера/ip-адрес]:[путь к файлу] [путь к файлу]
Читайте также: