背景
常常听到网络攻击有一个东西叫做端口扫描器,可以扫描指定服务器开放的端口,然后尝试连接,并寻找漏洞,最终攻破服务器。而那些使用的端口扫描器都是一个个现成的程序,看上去很厉害的样子。而实际上这些东西对于懂行的人的来说,那可就太简单了。本文就演示一下快速写一个端口扫描器,仅供参考,来揭开一下端口扫描器的神秘面纱。
分析
所谓端口扫描,就是探测服务器哪些端口被公开。如果这些端口是无意中公开了,且没有设置良好的安全策略,就存在安全漏洞。通过端口扫描,锁定端口后,利用已知的漏洞和攻击方法,然后尝试攻击。一旦攻破,就可以拿到服务器的控制权,就可以和服务器主人一样拿到最高权限。换句话说,就相当于可以随便使用这个服务器了。一般就被当作肉鸡,悄悄运行着一些程序,在必要的时候会去攻击别人。当然,如果服务器上有重要资料,就可能会被勒索。我以前不懂,服务器就被人攻击勒索过,不过也没有重要资料就没有勒索成功,然后重装了系统解决了。
在Linux上我们一般常用检测端口是否能通的工具为telnet。例如:
telnet <网址或IP> 22
不过如果不通,会等比较长的时间。而端口扫描则需要进行大量的端口的探测,所以效率不行。
在《telnet测试端口并超时后退出》一文中,我们实现了超时退出,不过不总是好用。
所以今天介绍一个很厉害的命令,即nc。这个命令被称为瑞士军刀,足见这个命令的好用强大。
nc 是一个常用的网络工具,也称为 netcat。它可以在网络中读写数据,支持 TCP、UDP 协议,同时还能监听端口、进行端口扫描等。
centos7中,nc命令位于/usr/bin/nc,这是一个软链接,指向 /usr/bin/ncat。
ncat 是 netcat 的改进版本,提供了更多的功能和选项。它可以用于监听和传输数据,支持 TCP、UDP 和 SCTP 协议。ncat 提供了更多的安全性和扩展性,支持 SSL 加密、IPv6 地址等特性。
nc的-z参数可以提供不发数据的探测,-v可以提供详细信息,-w提供超时时间,单位为秒。
nc的用法:
nc -zv {主机} {端口} -w 超时时间
如果测试端口是开放的,日志有Ncat: Connected to。如果端口没有开放,则有不会有Connected字样。所以我们可以根据这个来编写一个shell脚本,就是简易的端口扫描器了。
下面是代码scan_port.sh:
#! /bin/bash
host="110.80.135.11"
start_port=1
end_port=65536
echo -n "opened port:"
for (( port=$start_port; port<=$end_port; port++ )); do
#echo "scan port:$port"
r=$(nc -zv $host $port -w 1 2>&1 | grep "Connected")
if [ "$r" ];then
echo -n "$port,"
#else
# echo "close"
fi
done
执行脚本:
sh scan_port.sh
这个脚本会扫描1-65536个端口,这个是允许开放的所有端口。这样扫描会比较慢,所以一般我们会扫描常用的端口,比如22、80、443这样的,都扫不到之后再从头到尾扫描。这里只是演示,就不写过多的逻辑了。
然后用循环遍历65536个端口,每一个都使用nc命令检测一下,如果返回连通过,就输出一个端口,并将端口连在一起。现在是默认输出到屏幕。如果要保存结果,则可以再将结果重定向到文件,我们就可以挂在后台扫描了。扫描完再看看即可。
下面的执行的效果:
这里仅用一段简单的shell脚本,就可以实现一个端口扫描器。如果有更多需要,可以进行定制化编写。真正的黑客,不只是用别人现成的工具,大部分都是自己写脚本来实现定制化的。
所以只是简单用一些软件,都是入门级的黑客哟。高级的黑客一定有自己私人的工具库哦。
总结
端口扫描其实很简单,使用telnet就可以实现。只是nc使用更有性价比,非常好用。看着高大上的端口扫描器,其实你分分钟也可以编写一个哦。
原文地址: http://www.yu7s.com/article/20240418193923831.html