目前nmap为流行端口扫描工具,在metasploit中,nmap的输出结果可以保存在后端数据库中以备后续的使用

0x01 nmap进行端口扫描

nmap有许多特定的参数来进行端口的扫描,这里用-sS,使用它来执行一次隐蔽的TCP扫描,确定其是否开放,另一个是-Pn
这个命令事先不会用ping命令预先判断主机是否存活,而是默认都是存活状态,因网络上大部分都不允许使用Internet控制报文协议(ICMP)
通行,如果事先用ping进行判断,会漏掉实际存活的主机,内网则不用考虑此类情况

使用-sS-Pn执行一次简单扫描

1
nmap -sS -Pn [IP]

为了获取更多的信息,可以尝试-A选项,这将尝试进行深入的服务枚举和指纹获取,能提供系统更多的细节,如下

1
nmap -sS -Pn -A [IP]

0x02 在metasploit中使用数据库

在metasploit中使用数据库之前,确保PostgreSQL正常,在没有连接上数据库前需要做如下配置

启动PostgreSQL数据库服务:service postgresql start监听5432端口

初始化metasploit的数据库:msfdb init

查看数据库联接情况:msfconsole db_status,当出现Connected to msf. Connection type: postgresql.时表示连接成功

接下来我们先把nmap的扫描结果输出到一个xml文件中,需要用到-oX选项来生成

1
nmap -sS -Pn -A -oX mao.xml [IP]

XML文件生成后,使用db_import命令把文件导入到数据库中,导入完毕后使用hosts命令来查看,如下已成功将nmap的输出导入到了metasploit的数据库中

如在metasploit终端下,也可以直接使用db_nmap来进行端口扫描,nmap输出结果会直接存储在数据库中,可以运行services -u命令
查看数据库中关于系统运行服务的扫描结果

0x03 nmap扫描技巧–TCP空闲扫描

比一般扫描方式高级一点的是TCP空闲扫描,这种扫描方式是让我们冒充网络上另一台主机的IP地址,对目标发起更为隐蔽的扫描。进行
这种扫描我们需要先在网络上定位一台使用IP帧标识(IPID:用于跟踪IP包的次序)机制的空闲主机(在一段特定时间不向网络发送数据包)
有这样的一台主机后,它的IP帧标识是可预测的,利用这种特性可以计算出它下一个IP帧的标识。我们冒充这台空闲主机的IP地址对目标
主机某个端口进行探测后,如果空闲主机实际的IP帧标识与预测得出的IP真标识发生断档,那么意味着端口可能开放着

在metasploit中scanner/ip/ipidseq模块,来寻找能够满足TCP空闲扫描要求的空闲主机

发现空闲主机,在nmap中使用-sI选项指点192.168.197.171作为空闲主机对目标机器进行扫描,最终得到扫描结果如下

1
nmap -PN -sI 192.168.197.171 192.168.197.164

0x04 在metasploit中做端口扫描

在metsalpoit中不仅可以使用第三方扫描器,而且在辅助模块中也包含了几款内建的端口扫描。在metasploit中输入search portscan查看其提供的端口扫描工具

使用metasploit的SYN端口扫描器对单个主机进行一次简单扫描

1
2
3
4
5
6
7
8
9
10
11
msf5 > use auxiliary/scanner/portscan/syn
msf5 auxiliary(scanner/portscan/syn) > set RHOSTS 192.168.197.164
RHOSTS => 192.168.197.164
msf5 auxiliary(scanner/portscan/syn) > set THREADS 10
THREADS => 10
msf5 auxiliary(scanner/portscan/syn) > run

[+] TCP OPEN 192.168.197.164:80
[+] TCP OPEN 192.168.197.164:135
[+] TCP OPEN 192.168.197.164:139
[+] TCP OPEN 192.168.197.164:445

0x05 服务器消息块协议扫描

服务器消息块协议(SMB:一个通用的文件共享协议),这里要插入一段SMb协议的相关解读:

SMB(全称是Server Message Block)是一个协议名,可用于在计算机间共享文件、打印机、串口等,电脑上的网上邻居就是靠它实现的

SMB 是一种客户机/服务器、请求/响应协议。通过 SMB 协议,客户端应用程序可以在各种网络环境下读、写服务器上的文件,以及对服务器程序提出服务请求。此外通过 SMB 协议,应用程序可以访问远程服务器端的文件、以及打印机等资源

SMB一开始的设计是在NetBIOS协议上运行的,而NetBIOS本身则运行在NetBEUI、IPX/SPX或TCP/IP协议上

NetBIOS 使用下列端口:UDP/137(NetBIOS 名称服务)、UDP/138(NetBIOS 数据报服务)、TCP/139(NetBIOS 会话服务);SMB 使用下列端口:TCP/139、TCP/445(注:因此在445关闭的情况下,目标主机开了139永恒之蓝也是可以利用成功的)

SMB的工作原理:

首先客户端发送一个SMB negprot请求数据报,列出它所支持的所有SMB协议版本。服务器收到请求信息后响应请求,并列出希望使用的协议版本。
如果没有可使用的协议版本则返回0XFFFH,结束通信

协议确定后,客户端进程向服务器发起一个用户或共享的认证,这个过程是通过发送SesssetuoX请求数据报实现的客户端发送一对用户名和密码或一个简单密码到服务器
然后服务服务器通过发送一个SesssetuoX应答数据报来允许或拒绝本次连接

当客户端服和服务器完成了磋商认证之后,它会发送一个Tcon或TconX SMB数据报并列出它想访问网络资源的名称,之后服务器会发送一个TconX应该数据报以表示此次连接是否被接受或拒绝

连接到响应资源后,SMB客户端就能够通过open SMB打开一个文件,通过read SMB读取文件,通过write SMB写入文件,通过close SMB关闭文件

metasploit可以利用它的smb_versin模块来遍历一个网络,获取windwos系统的版本号,下面用一个目标主机做个简单的示例,如果是在一个大规模的网络中扫描,可以设置线程数加快扫描速度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
msf5 > use auxiliary/scanner/smb/smb_version 
msf5 > show options

Module options (auxiliary/scanner/smb/smb_version):

Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS yes The target address range or CIDR identifier
SMBDomain . no The Windows domain to use for authentication
SMBPass no The password for the specified username
SMBUser no The username to authenticate as
THREADS 1 yes The number of concurrent threads

msf5 auxiliary(scanner/smb/smb_version) > set RHOSTS 192.168.197.164
RHOSTS => 192.168.197.164
msf5 auxiliary(scanner/smb/smb_version) > run

[+] 192.168.197.164:445 - Host is running Windows 2003 SP2 (build:3790) (name:PING-88D1E517AF) (workgroup:WORKGROUP )
[*] 192.168.197.164:445 - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf5 auxiliary(scanner/smb/smb_version) >

这里扫描结果会保存在metaslpoit的数据库中,使用hosts命令来查看数据库中保存的结果

1
2
3
4
5
6
7
8
9
10
11
sf5 > hosts -u -c address,os_name,svcs,vulns,workspace

Hosts
=====

address os_name svcs vulns workspace
------- ------- ---- ----- ---------
192.168.197.1 Unknown 0 0 default
192.168.197.2 Unknown 0 0 default
192.168.197.164 Windows 2003 7 0 default
192.168.197.171 Unknown 0 0 default

0x06 搜寻配置不当的Microsoft SQL Server

在MSSQL安装后,默认监听在TCP端口1433上或者使用随机的动态TCP端口.如果在随机的TCP端口上进行MSSQL监听,只需要简单地对UDP端口1433进行查询,就可以获取这个随机的TCP端口,在metasploit中mssql_ping可以用来做这件事,在一个大量主机的网络中去查找MSSQL的监听端口,这种方法比nmap对所有主机端口开放情况进行扫描要快上很多

1
2
msf5 > use auxiliary/scanner/mssql/mssql_ping 
msf5 > show options

0x07 SSH服务器扫描

metasploit中的ssh_version模块识别目标服务器上运行的SSH版本

1
2
use auxiliary/scanner/ssh/ssh_version
msf5 > show options

0x08 FTP扫描

1
2
use auxiliary/scanner/ftp/ftp_version
msf5 > show options

0x09 简单网管协议扫描

简单网管协议(SNMP)通常用于网络设备中,用来报告带宽利用率、冲突率以及其他信息,且一些操作系统也包含SNMP服务器软件,用来提供类似CPU利用率、空闲内存以及其他系统状态信息
metasploit中内置了一个辅助模块scanner/snmp/snmp_enum,可用来做SNMP扫描,如果能够获取只读(’OR’)或读/写(’RW’)权限的团体字符串,那么可提取目标的补丁级别、运行的服务
用户名、持续运行时间、路由以及其他信息

利用metasploit中的scanner/snmp/snmp_login模块,可以尝试使用字典来猜解团体字符串

1
2
use auxiliary/scanner/snmp/snmp_login
msf5 > show options

参考链接

https://www.cnblogs.com/yuzly/p/10480438.html
metasploit渗透测试指南