msf中的情报搜集
被动的信息搜集
使用被动的、间接的信息搜索技巧,可以在目标不察觉的情况下挖掘目标的相关信息。
- 公开渠道情报搜集
- 对公开的和已知的信息进行检索筛选,获取到目标的情报集合,一系列的工具可以让被动信息搜集更加的方便,包括Yeti和Whois等方法。
- 注意:测试中的目标主要是一个非公开的网站和192.168.2.158 是本地搭建的一个测试系统环境
Whois查询
msf > whois baidu.com
- Whois查询后,会出现诸如以下的内容信息
Netcraft网站
Netcraft是一个Web页面工具,它可以发现某个网站的具体服务器IP地址和其他信息
除上以外,还有其他信息!https://searchdns.netcraft.com/
从挖掘到的数据信息,我们得知目标的IP地址为:104.193.88.77;如此我们就可以进一步的使用Whois查询该IP地址的信息。【如下图】
- 从上述的搜集信息中可以看出了该网站的注册结构、地理位置等信息。
nslookup命令
nslookup命令可以获得服务器的附加信息,
主动的信息搜集
Nmap端口扫描
确定目标的IP范围后,就可以启动Nmap对目标的IP端口开放情况进行扫描,得知对方的开放端口有哪些。
Nmap是目前最流行的端口扫描工具,Nmap的扫描结果可以输出在后端数据库中供后续使用。
:[Nmap使用思维导图]((F:\Metasploit\Nmap使用思维导图.png)
root > nmap -sS -Pn [IP]
-sS:TCP SYN扫描(可以执行一次隐藏的TCP SYN扫描)
-Pn:禁用Ping操作(nmap则不会使用ping命令预判主机是否存活)
我们使用Nmap完成了对192.168.2.158目标主机IP的端口扫描,结果中显示了现在开启的端口和服务。
root > nmap -sS -Pn -A [IP]
-A:对目标IP主机进行全面的扫描(耗时较长)
上图就是对目标的全面深入的扫描结果:
- 不仅显示了端口、状态,还显示了具体的正在进行的服务名称(VERSION)
- 还显示了目标使用的操作系统的类型和版号(OS CPE/OS details)
- 如果目标是真正的在生产的服务器还会有更多的信息
Metasploit与数据库连接使用
在面对大量目标的时候,非常的繁杂,此时就需要使用数据库,记录所有的操作过程;Metasploit支持对数据库的兼容,并且默认支持PostgreSQL数据库。
- 启动PostgreSQL数据库
apt-get install postgresql # 安装数据库
service postgresql start # 启动数据库
apt-get install metasploit-framework #安装msf
msf控制数据库
msf > msfdb init #初始化数据库
登陆PostgreSQL数据库
msf > switch user[/su] postgres #登陆数据库
- 连接数据库/数据表
msf > db_connect postgres:[user]@[IP]/[库名]
- 确认数据库和表的MSF之间的连接
msf > db_status #确认连接状态
- MSF-help中的数据库操作方法
analyze:分析特定地址或地址范围的数据库信息
db_connect:连接数据库服务
db_disconnect:断开数据库服务
db_export:导出包含数据库内容的文件
db_import:导入扫描结果文件(将自动检测文件类型)
db_nmap:执行nmap并自动记录输出
db_rebuild_cache:重建数据库存储模块缓存
db_remove:删除保存的数据服务条目
db_save:将当前数据服务连接保存为启动时重新连接的默认值
db_status:显示当前数据服务状态
hosts:列出数据库中的所有主机
loot:列出数据库中的所有数据表
services:列出数据库中的所有服务
vulns:列出数据库中的所有漏洞
workspace:在数据库工作区之间切换
Nmap扫描结果写入Metasploit的数据库中
- 执行Nmap并保存为.xml文件
root > nmap -sS -Pn -A -oX [文件名] [目标IP]
-oX:表示存储为xml文件
- 打开DB并确认连接、导入XML文件到数据库中
msf > db_status #确认连接
msf > db_import [文件名] #向数据库中导入文件
msf > db_hosts -c address #显示库中的所有主机address列
高级的Nmap扫描技巧:TCP空闲扫描
TCP空闲扫描相当于网络上”冒充“另一台IP主机,对目标进行更加”秘密“的扫描。我们需要在网络上定位一台使用递增IP帧标识(IP ID:用于跟踪IP包的次序的一种技术方法)机制的空闲主机(空闲主机指主机在一段特定的时间内不想网络发送数据包)
MSF中的scanner/ip/ipidseq模块,来寻找满足TCP空闲扫描要求的空闲主机
这个列表显示的是ipidseq模块扫描所需的的所有参数;
- RHOSTS:参数表示说明使用的IP地址段,如192.168.1.0/24;可以使用逗号分隔多个地址块以及每行包含一个IP地址的IP列表文本文件(引用路径)
- THREAD:参数表示设定扫描的线程数,线程数越大扫描速度越快,但是取决于机器的性能。
- 执行扫描任务
msf auxiliary(ipidseq) > set RHOSTS 192.168.2.0/24 #[IP]
msf auxiliary(ipidseq) > set THREAD 50 #[线程]
msf auxiliary(ipidseq) > run #执行
通过ipidseq模块的扫描得出该IP地址段中有三个空闲的主机
- Nmap-TCP空闲扫描
我们利用ipidseq模块扫描得出的三个空闲主机(有一个也是我们的目标主机,所以执行的过程中忽略它)
msf auxiliary(ipidseq) > nmap -PN -sI [空闲主机的IP] [目标主机的IP]
-sI:指定一个IP(空闲主机的IP)对目标进行扫描
使用空闲扫描,本机的IP地址不会向目标主机发送任何的数据包,但是空闲扫描方法就是这样利用被的主机IP访问,本机获得目标IP主机上开放的端口信息。
在MSF终端运行Nmap
将Nmap和Metasploit结合起来使用>>>>连接到数据库
msf > db_connect postgres:root@127.0.0.1/msfbook
成连接数据库后,在msf中的nmap扫描结果都会被数据库所记录在表中;之后在msf中nmap想被存进库中,则可以使用”db_nmap“命令进行nmap扫描。
msf > db_nmap -sS -A [目标ip]
在扫描结果中,我们发现了目标的开放端口、服务名称、软件版本、目标操作系统的类型猜测等……
- 查看数据库中的结果
msf > db_services
至此我们对目标的端口和服务扫描结果结束了。
Metasploit进行端口扫描
在MSF中,除了Nmap等众多的第三方端口扫描以外,MSF自家也带有几款不错的端口扫描器。
举例:假设攻陷一个位于防火墙之后使用网络地址转换NAT协议的主机,这台主机没有办法从Internet中获得连接的私有IP地址,只有内网的地址;如果想要使用MSF对位于NAT之后的主机进行攻击,那么就需利用已被攻陷的主机作为跳板,将流量传送到网络内部的主机上。使用msf内建的端口扫描工具:
msf > search portscan
使用msf的SYN端口扫描器对单个主机进行一次简单的扫描
msf > use scanner/portscan/syn
msf auxiliary(syn) > set RHOSTS [目标主机IP]
msf auxiliary(syn) > set THREADS [线程数<=128]
msf auxiliary(syn) > run # 执行
从结果中看出(未完全完成扫描任务),80、135、139等端口是开放的
针对性的扫描
服务器消息块协议扫描
Metasploit可以利用它的smb_version模块来遍历一个网络,并获取系统的版本号。
msf > use scanner/smb/smb_version
msf auxiliary(smb_version) > show options
msf auxiliary(smb_version) > set RHOSTS 192.168.2.158
msf auxiliary(smb_version) > run
如上图所示;smb_version模块扫描结果显示了目标IP主机的系统类型。
SMB协议是一种通用的文件共享协议,
搜索配置不当的SQL Server
配置不当的SQL Server通常是一个进入目标系统的第一个后门;安装后默认是在监听TCP-1433或使用动态端口,如果是随机的端口号,只需要简单的对UDP端口1433进行查询,便可以获得随机的TCP端口号。(msf中的mssqp_ping模块就是用来查询随机tcp端口的)
msf > use scanner/mssql/mssql_ping
msf auxiliary(mssql_ping) > show options
msf auxiliary(mssql_ping) > set RHOSTS [IP]
msf auxiliary(mssql_ping) > set THREADS [线程]
msf auxiliary(mssql_ping) > run
由于本地的虚拟目标中并未安装mssql,所以查询无果
如果目标中有MSSQL,查询结果会显示 MSSQL服务器的IP地址,确定sql的实例名,服务器版本号以及TCP的监听端口号
这是最为快捷的在一个大的子网中查找一个MSSQL监听的端口。
SSH服务[器]扫描
如果相对一些主机运行着SSH服务扫描发现,对版本号进行识别。SSH是一种非常安全的协议,但任何协议都是必有漏洞的。msf的ssh_version模块可以来识别目标上运行的SSH版本。
msf > use scanner/ssh/ssh_version
msf auxiliary(ssh_version) > set RHOSTS [IP]
msf auxiliary(ssh_version) > set THREADS [线程]
msf auxiliary(ssh_version) > run
扫描结果告诉我们 192.168.2.248主机的SSH版本号;
FTP扫描
msf > use scanner/ftp/ftp_version
msf auxiliary(ftp_version) > show options
msf auxiliary(ftp_version) > set RHOSTS [ip]
msf auxiliary(ftp_version) > set THREADS [线程]
msf auxiliary(ftp_version) > run
因为目标网段没有主机开启FTP服务,所以没有扫描出结果;
成功扫描出ftp服务,可以使用anonymous模块来检查FTP服务是否允许匿名用户登录;
如果目标的FTP允许匿名用户的默认登录,意味着我们具备了默认的文件读写的权限
简单网络管理协议扫描
简单网络管理协议SNMP,用来报告带宽利用率、冲突率以及其他信息。
SNMP是渗透测试者的金矿,可访问的SNMP服务器能够泄露关于特定系统的更多信息,甚至会导致设备被远程攻陷。(得到具有读写权限的Cisco路由器的SNMP团体字符串,便可以下载整个路由器的配置,对其进行修改并回传到路由器中)
MSF中snmp_enum模块,是为了SNMP扫描专门设计的:
msf > use scanner/snmp/snmp_enum
msf auxiliary(snmp_enum) > show options
msf auxiliary(snmp_enum) > set RHOSTS [IP]
msf auxiliary(snmp_enum) > set THREADS [线程]
msf auxiliary(snmp_enum) > run
猜解:
msf中的snmp_login模块,可以尝试对一个IP或一段IP使用字典来猜解SNMP团体字符串。
开始扫描前要留意,如果能够获得只读RO或读写RW权限的团体字符串,将是非常的有价值的!
基于Windows系统的SNMP,通常可以使用RO或RW权限的团体字符串,提取目标的补丁级别、运行的服务、用户名、持续运行时间、路由以及其他信息(团体字符串等同于查询设备信息或写入设备配置的参数所需要的口令)
猜解出字符串后,SNMP在范围内可以允许你做任何事,v1,v2版本有天生的缺陷,而v3版本后添加了加密功能机制,为了获取管理一台交换机的权限,首先需要找到SNMP团体字符串,利用snmp_login模块调用字典来采集被加密的SNMP团体字符串。
互联网中存在大量的不变更出厂设置就投入生产的设备。
自编扫描器
在MSF中拥有自定义扫描器的功能,自定义的扫描器可以使用msf框架中的全部类和方法,内建了代理服务器、安全套接字层SSL支持、报告生成以及线程设置等。
msf框架软件的扫描器模块包括各种mixin(混入类),如用作TCP、SMB的mixin,以及集成在MSF中的辅助扫描mixin;Mixin预定义的函数和调用的代码模块。