NetCat
介绍:
网络工具中的瑞士军刀—小身材(几M),大智慧(功能强大)
基本功能:
- 监听/传输
- 流媒体服务器
- 传输文本信息
- 传输文件
- 远程控制
- 远程硬盘克隆
功能实现:
帮助文档
参数: –h
举例: nc –h
显示
OpenBSD netcat (Debian patchlevel 1.130-3)
//不同的操作系统的NC有细微的差别
usage: nc [-46CDdFhklNnrStUuvZz] [-I length] [-i interval] [-O length]
[-P proxy_username] [-p source_port] [-q seconds] [-s source]
[-T toskeyword] [-V rtable] [-w timeout] [-X proxy_protocol]
[-x proxy_address[:port]] [destination] [port]
//格式
//以下为基本命令
Command Summary:
-4 Use IPv4 //默认使用IP4格式的地址
-6 Use IPv6 //如果要使用IP6格式,要加参数
-b Allow broadcast
-C Send CRLF as line-ending //不是-c(小写)
-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 secs Delay interval for lines sent, ports scanned
-k Keep inbound sockets open for multiple connects
-l Listen mode, for inbound connects //监听
-N Shutdown the network socket after EOF on stdin
-n Suppress name/port resolutions //连接IP和 端口
-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 //等待n秒后自动退出连接
-r Randomize remote ports
-S Enable the TCP MD5 signature option
-s addr Local source address
-T toskeyword Set IP Type of Service
-t Answer TELNET negotiation
-U Use UNIX domain socket
-u UDP mode //扫描UDP模式的参数
-V rtable Specify alternate routing table
-v Verbose //显示详细信息
-w secs 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]
利用nc作为聊天工具
1. A机:nc –lp 333
2. B机:nc –nv 192.168.43.74 333
3. 解释:
a) A机打开了333端口(p),并监听(l)333端口
b) B机连接(n)了192.168.43.74的333端口,并显示(v)详细信息
结果如图(注意IP地址不同)
将命令输出内容进行传送(部分nc没有-c选项)
1. A机:ls –al | nc –lp 333
2. B机:nc –nv 192.168.43.74 333 –q 1
3. 解释:
a) A机:显示详细目录(ls –al)通过管道(|)给nc的333端口
b) B机:连接用nc连接指定端口,并延时1秒(1)后断开(q)
4. 备注:出了点小意外,1秒后没有退出,后来发现-q好像是配合客户端(不是开放端口的那方)使用的
扫描模式:(扫描并不准确)
1. 扫描TCP端口:nc –nvz 192.168.43.74 1-65535
2. 扫描UDP端口:nc –nvzu 192.168.43.74 1-65535
3. 解释:
a) nc进行IP连接,并显示详细信息,进行端口扫描(z)指定端口(1-65535)
b) nc进行IP连接,并显示详细信息,进行端口扫描(z)指定端口(1-65535)的UDP连接
4. 备注:发现没有端口开放(其实是假的。。。。),如果显示详细信息可能所有端口都会显示信息
传送文件
1. A:nc –lp 333 >1.mp4
2. B:nc –nv 192.168.43.74 333 < hello.mp4 –q 1
3. 解说:
a) A开放并监听333端口,并把数据给1.mp4
b) B连接333端口,并把hello.mp4传送过去,并等待1s后自动关闭
4. 备注:这次自动退出成功
加密传文件
1. A:nc -lp 333 | mcrypt --flush -Fbqd -a rijndael-256 -m ecb > 1.mp4
2. B:mcrypt --flush -Fbq -a rijndael-256 -m ecb < a.mp4 | nc -nv 1.1.1.1 333 -q 1
3. 解说:
a) 开放端口,得到数据,通过管道,
把数据解密(mcrypt --flush -Fbqd -a rijndael-256 -m ecb),把解密后的内容给1.mp4
b) 把文件加密(mcrypt --flush -Fbq -a rijndael-256 -m ecb),通过管道符给nc传送过去
4. 备注:
mcrypt系统不一定有,--flush不保存过渡文件,-Fbq(加密)-Fbqd(解密)
rijndael-256 -m ecb(ECB的256位加密算法)
流媒体服务器
1. A: cat 1.mp4 | nc -lp 333
2. B: nc –nv 192.168.66.141 333 | mplayer -vo x11 -cache 3000 –
3. 解说:
a) A:把1.mp4的文件显示出来给333端口
b) B:把收到的文件交给mplayer用(-vo x11)解码,缓存3000(K)
4. 额,发现系统并没有mplayer
硬盘克隆(硬盘克隆是把删除的内容,哪些表面删除,实际还在盘里的被标记为删除的文件,也会被克隆)
1. A:nc -lp 333 | dd of=/dev/sda
2. B:dd if=/dev/sda | nc -nv192.168.66.141 333 –q 1
3. 解说:
a) A:把收到的内容输出到/dev/sda(硬盘)
b) B:把/dev/sda的内容进行块拷贝,输出为nc
远程控制(部分其他版本的nc可能没有-c(c小写)的选项)
1. A:nc -lp 333 -c bash
2. B:nc –nv 192.168.66.141 333
3. 解说:
a) A:把得到的内容传送给bash进行执行(-c)
b) B:连接nc,然后执行(ls)
4. 备注:
windows使用的是cmd,linux使用的是bash
nc的缺陷和改进
缺陷
- 通信的时候不能加密,也就是你开发的端口,大家都可以用
- 没有用户验证
解决
- 使用ncat
基本用法同nc
有加密通信通道 - 举例:
A:ncat -c bash --allow 192.168.20.14 -vnl 333 --ssl
B:ncat -nv 1.1.1.1 333 --ssl
备注:
ncat是nmap的一部分
- nc中可以正向也可以反向传输
比如:
正向传输
A:nc -lp 333 -c bash
B:nc –nv 192.168.66.141 333
A开放端口,把监听到的内容进行(bash)执行
反向方向:
A:nc -lp 333 -c bash
B:nc –nv 192.168.66.141 333 -c bash
A开放端口,后输入内容,让B进行执行