Авторизоваться
Виталик Коростелёв 17.11.2020 Опубликована

Начальный гайд по NetCat

Netcat крайне полезная утилита, используемая для дебага и реверс-инжиниринга.

Обычно утилита вызывается через команду nc

К любому серверу можно подключиться используя следующий синтаксис:
nc $DOMAIN $PORT

Например:

nc localhost 8000

После подключения вы можете отправить на сервер любое сообщение, просто напечатав его, и затем вы получите ответ от сервера.

Примерно так же как в диалоге на двоих, с учётом того что вы можете работать с протоколами уровня приложения ( таких как HTTP, FTP, SMTP и т.п. )

Используя NetCat вы можете эмулировать любой протокол уровня приложения, на которых строится интернет.

Например вы можете подключиться к Web-серверу и посылать на него HTTP-инструкции.

Вы можете попробовать это с моим web-сервером с помощью команды nc dev-ops.zone 80

Далее нам необходимо ввести команды, которые мы отправим серверу:

GET / HTTP/1.1
Host: dev-ops.zone

Последняя пустая строка нужна для того чтобы сервер понял окончание последовательности команд.

После ввода пустой строки сервер ответит нам 301й ошибкой, так как у меня включен редирект на https.

С помощью NetCat мы также можем и слушать порт:

Запустим сервер выполнив команду nc -l -p 2000 Сервер будет печатать каждое полученное сообщение.

Затем подключимся к серверу используя команду nc localhost 2000

И отправим сообщение.

Клиент
Клиент
Сервер
Сервер

Также мы можем сделать эхо-сервер.
Сначала запустим сервер:
nc -l -p 2000 -c 'xargs -n1 echo "recieved:"'

-l говорит nc слушать входящие подключения
-p 2000 указывает что слушать надо на порту 2000
позволит нам вызвать shell-команду.
В нашем случае -c 'xargs -n1 echo "recieved:"'  вызывает при каждом получении сигнала /bin/sh -c 'xargs -n1 echo "recieved:"' {$RECIEVED_MESSAGE} . Стоит использовать с большой осторожностью!

Сам же сервер при этом ничего не выводит.

Сервер
Сервер

Теперь можно подключиться к нашему серверу и отправить ему пару сообщений:

Клиент
Клиент

Таким образом, например, можно протестировать возможность подключения к порту на целевом сервере.

Также добавив флаг -u мы можем перевести сервер и клиент в режим UDP ( по умолчанию используется TCP )

Ещё Netcat можно использовать для сканирования портов в заданном диапазоне:
nc -v -z localhost 1-10000

Скомбинировав команду с grep возможно получить список только открытых портов
nc -v -z localhost 1-100 2>&1 | grep open

Также мы может отправить файл первому подключившемуся клиенту:
nc -l $PORT < $FILENAME

И подключиться клиентом: nc localhost 2000

Сервер
Сервер
Клиент
Клиент

После того как клиент отключится сервер тоже завершит работу.
Дабы этого не происходило мы можем обернуть сервер простеньким скриптом:

while true; do nc -l PORT < FILENAME; done

Если в качестве файла отдавать html-страничку то мы получим простейший web-сервер.

Также мы можем отправить файл на сервер:

nc DOMAIN PORT < FILENAME

На этом на сегодня всё, спасибо за внимание.

Коментарии
Авторизоваться что-бы оставить комментарий
Присоединяйся в тусовку
Наш сайт использует файлы cookie для вашего максимального удобства. Пользуясь сайтом, вы даете свое согласие с условиями пользования cookie