端口扫描那些事

渗透测试 2017-11-22

在渗透测试中端口扫描是非常重要的一环,不管是在外围对企业边界信息收集的过程还是在内网渗透中对内网的信息收集。如何判断主机或服务器端口的开放情况就显得尤为重要,下面就盘点一下可以作为端口扫描的工具与方式方法。

测试环境

windows:192.168.188.149

kali:192.168.88.128

扫描工具推荐

推荐几款在外围信息收集过程中使用的快速且强大的端口扫描工具。

Nmap

nmap作为一款最优秀的端口扫描利器,其功能之强大就不多说了,下面重点提几条命令,仅作端口扫描操作:

nmap -sT 192.168.88.128 -p68,80,443,8000,8080,5432 #TCP扫描

nmap -sS 192.168.88.128 -p68,80,443,8000,8080,5432 #SYN扫描

nmap -sU 192.168.88.128 -p68,80,443,8000,8080,5432 #UDP扫描

1.jpg

UnicornScan

Unicornscan 是一个新的信息收集引擎,主要用于安全研究和通讯测试,主要特点是精确、灵活而且高效。做端口扫描可以用下面的命令:

unicornscan -i eth0 -mT 192.168.188.149:1-10000

2.jpg

如需查看更多功能请使用以下命令查看帮助:

unicornscan -h

3.jpg

Masscan

Masscan号称是最快的互联网端口扫描器,最快可以在六分钟内扫遍互联网。可以使用以下命令做简单的端口扫描:

masscan -p1-1000 192.168.188.149 --rate=10000

4.jpg

软件的帮助信息如下:

5.jpg

zmap

Zmap采用了无状态的扫描技术,没有进行完整的TCP三次握手,因此扫描速度极大提升。Zmap的基本功能是扫描发现主机的开放端口。可以使用以下命令进行指定端口扫描:

zmap -p 135 -o results.csv 192.168.188.0/24

6.jpg

其他扫描方式请查看帮助。

自己开发一个端口扫描工具

在渗透测试中使用被人的工具有的时候是不能满足我们自己的所有需求的,不管是所处的环境问题还是自己的自动化脚本的实现,都需要我们自己学会如何开发,了解扫描原理来应对多变的环境。想要实现端口扫描功能,最重要的环节就是检测端口是否存在,下面就以不同的脚本来实现检测端口是否存在。

Python

使用python实现端口扫描功能,需要用到的库是socket,如下是最重要的几行代码:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(2.0)
try:
    s.connect(("192.168.188.149", 445))
    print "open"
except socket.timeout:
    print "timeout"
except socket.error as e:
    print "close"
finally:
    s.close()

端口扫描中的核心就是上面这几行代码,然后其他的功能,如:多线程、结果保存、端口列表等就需要自行添加了。

PowerShell

与Python编写端口扫描工具类似的,如何使用Powershell判断一个端口是否开放是端口扫描的关键,可以使用如下代码判断端口是否开放:

$tcp = new-object Net.Sockets.TcpClient
$tcp.Connect("192.168.88.128",80)

如果端口开放,其结果为空,如果不开放,将会报错,测试如下:

7.png

剩下的开发任务请大家自学Powershell,然后开发属于自己的小工具。

NC

netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它,利用nc也可以完成简单的端口扫描。使用下面的命令查看端口是否开启:

nc -vv 192.168.188.149 80

测试结果如图:

8.png

大家可以不管是在windows下还是linux下都可以写一点bash或者bat来调用nc来进行端口扫描。

总结

工具不在多,够用就好,工具不在神,适合自己就好。所以我只是大概的提了提,剩下如何使用就看自己的个人喜好,欢迎大家分享一些自己的喜好以及经验等。


本文由 myh0st 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论