网络对抗技术课程学习 chapter1 渗透测试与metasploit
一、读书笔记
二、渗透测试
通过模拟恶意攻击者的技术与方法进行攻击,挫败目标系统安全控制措施,取得访问控制权,并发现具备业务影响后果安全隐患的一种安全测试与评估方式。
- 操作:对目标系统进行主动探测分析,对大量发现安全漏洞的主动渗透与入侵攻击。
- 目标:发现潜在的系统漏洞。
1. 基本类型
渗透测试的两种基本类型:
- 黑盒测试
- 白盒测试
(1)黑盒测试
模拟对目标系统一无所知的攻击者所进行的渗透攻击。
- 真实:从一个远程网络位置来评估目标网络基础设施,完全模拟真实网络环境中的外部攻击者。对目标组织内部安全团队的检测与响应能力做出评估。
- 优点:能更逼真地模拟一次真正的攻击过程。
- 代价:比较费时费力,同时需要渗透测试者具备较高的技术能力。
(2)白盒测试
渗透测试者在拥有目标所有知识的情况下进行的渗透测试。
- 优点:无须进行目标定位与情报搜集,可以让渗透测试者以最小的代价发现和验证系统中最严重的安全漏洞。
- 应用:在一次常规的开发与部署计划周期中集成,使得能够在早期就消除掉一些可能存在的安全问题,从而避免被入侵者发现和利用。
- 问题:无法有效地测试客户组织的应急响应程序,也无法判断出他们的安全防护计划对检测特定攻击的效率。
(3)灰盒测试
灰盒测试 = 黑盒测试 + 白盒测试
- 提供对目标系统更加深入和全面的安全审查。
- 目标网络底层拓扑与架构将有助于在外部渗透场景中更好地决策攻击途径与方法,从而达到更好的渗透测试效果。
2. 规范化测试阶段与流程
(1)前期交互阶段
- 确定渗透测试的范围、目标、限制条件以及服务合同细节。
(2)情报搜集阶段
- 获取更多关于目标组织网络拓扑、系统配置与安全防御措施的信息。
- 方法:公开来源信息查询、Google Hacking、社会工程学、网络踩点、扫描探测、被动监听、服务查点等。
(3)威胁建模阶段
- 针对获取的信息进行威胁建模与攻击规划。
- 目标:从大量的信息情报中理清头绪,确定出最可行的攻击通道。
(4)漏洞分析阶段
- 考虑该如何取得目标系统的访问控制权。
- 操作:通过搜索可获取的渗透代码资源,找出可以实施渗透攻击的攻击点,并在实验环境中进行验证。进一步,可以针对攻击通道上的一些关键系统与服务进行安全漏洞探测与挖掘。
(5)渗透攻击阶段
- 利用所找出的目标系统安全漏洞,来真正入侵系统当中,获得访问控制权。
(6)后渗透攻击阶段
- 渗透测试团队根据目标组织的业务经营模式、保护资产形式与安全防御计划的不同特点,自主设计出攻击目标,识别关键基础设施,并寻找客户组织最具价值和尝试安全保护的信息和资产,最终达成能够对客户组织造成最重要业务影响的攻击途径。
(7)报告阶段
- 一份凝聚了之前所有阶段之中渗透测试团队所获取的关键情报信息、探测和发掘出的系统安全漏洞、成功渗透攻击的过程、造成业务影响后果的攻击途径以及站在防御者的角度帮助他们分析安全防御体系中的薄弱环节、存在的问题和修补升级技术方案的报告。
3. 渗透测试核心——安全漏洞
-
安全漏洞的生命周期
- 安全漏洞研究与挖掘
- 渗透代码开发与测试
- 安全漏洞和渗透代码在封闭团队中流传
- 安全漏洞和渗透代码开始扩散
- 恶意程序出现并开始传播
- 渗透代码/恶意程序大规模传播并危害互联网
- 渗透攻击代码/攻击工具/恶意程序逐渐消亡 渗透测试的底层基础:目标系统中存在的安全漏洞。
渗透代码:利用安全漏洞来造成入侵或破坏效果的程序。
0day漏洞:从安全漏洞被发现到厂商发布补丁程序用于修补该漏洞之前,黑客们攻击存有该安全漏洞的目标可以达到百分之百的成功率,同时也可以躲避检测。
三、MSF框架与应用基础
1. msf简介
(1)目录组织结构
在不同的操作系统版本中,metasploit的目录组织结构有所区别。
-
BackTrack5R1
-
BackTrack5R3
-
kali
(2)文件系统
- config:metasploit的环境配置信息,数据库配置信息。
- data:使用metasploit编辑的文件。
- documentation:为框架提供的用户说明及开发文档。
- external:源码和第三方库。
- lib:框架代码基于的库文件。
- modules:metasploit的系统工具模块。
- plugins:可以被运行时加载的插件。
- scripts:meterpreter和其它脚本(常用的后渗透模块部分)
- tools:各种有用的命令行工具。
2. 基本框架
(1)基础库文件
位于源码根目录路径下的libraries目录。
-
Rex
- msf框架所依赖的最基础的一些组件,为Metasploit开发者进行框架和模块开发提供了一些基础功能的支持
- 例:套接字处理、网络应用协议客户端与服务端实现、日志子系统、渗透攻击支持例程、PostgreSQL及MySQL数据库支持等。
-
framework-core
- 负责实现所有与各种类型的上层模块及插件的交互接口。
-
framework-base
- 提供友好的API和简化的API使用框架,用于支持用户接口与功能程序调用框架本身功能及框架集成模块。
(2)模块
The Metasploit Framework is composed of modules.
- 模块是通过Metasploit框架所装载、集成并对外提供的最核心的渗透测试功能实现代码。
- 按照在渗透测试过程各个环节中所具有的不同用途,分为:
- 辅助模块(Aux)
- 渗透攻击模块(Exploits)
- 后渗透攻击模块(Post)
- 攻击载荷模块(Payloads)
- 空指令模块(Nops)
- 编码器模块(Encoders)
- 这些模块都有清晰的结构和定义好的接口,可以被装载到Metasploit框架中。
- 主要模块树位置:
/usr/share/metasploit-framework/modules/
- 用户指定模块树位置:
~/.msf4/modules/
- 加载额外模块:在运行metasploit后用命令
loadpath <path to modules>
加载。
(3)插件
- 框架的插件是一类定义比较松散,能够扩充框架的功能,或者组装已有功能构成高级特性的组件。
- 可以集成现有的一些外部安全工具。
(4)接口
- msfconsole控制台终端
- msfcli命令行
- msfgui图形化界面
- armitage图形化界面
- msfapi远程调用接口
(5)功能程序
- 可直接运行的功能程序,支持渗透测试者与安全研究人员快速地利用Metasploit框架内部能力完成一些特定任务。
- 例如:
- msfpayload、msfencode和msfvenom可以将攻击载荷封装为可执行文件、C语言、JavaScript语言等多种形式,并可以进行各种类型的编码。
- msf*scan系列功能程序提供了在PE、ELF等各种类型文件中搜索特定指令的功能,可以帮助渗透代码开发人员定位指令地址。
3. 六种模块
(1)辅助模块(Aux)
信息搜集
- 针对各种网络服务的扫描与查点、构建虚假服务收集登录密码、口令猜测破解、敏感信息嗅探、探查敏感信息泄露、Fuzz测试发掘漏洞、实施网络协议欺骗等模块。
- 进行渗透攻击之前得到目标系统丰富的情报信息,从而发起更具目标性的精准攻击。
(2)渗透攻击模块(Exploits)
利用发现的安全漏洞或配置弱点对远程目标系统进行攻击,以植入和运行攻击载荷,从而获得对远程目标系统访问权。
- Metasploit框架中最核心的功能组件。
- 按照所利用的安全漏洞所在的位置分为主动渗透攻击与被动渗透攻击两大类。
- 主动攻击:利用的安全漏洞位于网络服务端软件与服务承载的上层应用程序之中。
- 主机上会开启一些监听端口并等待客户端连接,通过连接目标系统网络服务,注入并触发安全漏洞。
- 暴力攻击模块在打开受害主机shell后会退出。
- 如果执行时遇到错误将执行停止模块。
- 可以通过
exploit -j
使一个活动模块作为后台程序运行。
- 被动攻击:利用的安全漏洞位于客户端软件中。
- 只能采用被动渗透攻击方式,构造假信息,通过服务端分发,诱骗目标系统上的用户主动访问,从而触发客户端软件中的安全漏洞,给出控制目标系统的Shell会话。
- 被动攻击时可以通过
sessions -l
命令查看活动会话,然后通过sessions -i 会话id
与该shell交互。
(3)攻击载荷模块(Payloads)
攻击载荷是在渗透攻击成功后促使目标系统运行的一段植入代码,通常作用是为渗透攻击者打开在目标系统上的控制会话连接。
- 攻击载荷模块分为独立、传输器、传输体三种类型。
- 独立攻击载荷是完全自包含的,可直接独立地植入目标系统进行执行。
- 在一些特殊的渗透攻击场景中,可能会对攻击载荷的大小、运行条件有所限制,传输器和传输体配对分阶段植入的技术,由渗透攻击模块首先植入代码精悍短小且非常可靠的传输器载荷,然后在运行传输器载荷时进一步下载传输体载荷并执行。
(4)空指令模块(Nops)
在攻击载荷中添加空指令区,以提高攻击可靠性的组件。
- 空指令:对程序运行状态不会造成任何实质影响的空操作或无关操作指令,在x86 CPU体系架构平台上的操作码是0x90。
- 在渗透攻击构造数据缓冲区时,在真正要执行的Shellcode之前添加一段空指令区,当触发渗透攻击后跳转执行Shellcode时,有较大的安全着陆区,从而避免受到内存地址随机化、返回地址计算偏差等原因造成的Shellcode执行失败。
(5)编码器模块(Encoders)
- 确保攻击载荷中不会出现渗透攻击过程中应加以避免的“坏字符”。
- 对攻击载荷进行“免杀”处理,通过各种不同形式的编码,避免攻击载荷中含有一些安全检测与防御机制能够轻易识别的特征码。
(6)后渗透攻击模块(Post)
主要支持在渗透攻击取得目标系统远程控制权之后,在受控系统中进行各式各样的后渗透攻击动作,比如获取敏感信息、进一步拓展、实施跳板攻击等。
- 通过Meterpreter或Shell控制会话加载到目标操作系统平台上运行。
最常使用的:
- Aux:完成信息搜集
- Exploits:进行渗透攻击
- Post:进行主机控制与拓展攻击
4. 三种接口
(1)msfgui图形化界面工具
- 简单易懂,初学者。
(2)msfconsole控制台终端
- MSF终端是Metasploit框架中功能最强大、最丰富且支持最好的用户接口。
- 提供一站式的交互接口,能够访问Metasploit框架中几乎每一项功能与特性,而且可以直接执行外部的Shell命令和第三方工具。
(3)msfcli命令行程序
- 能够在Shell命令行里完成一次完整的渗透攻击过程。
- 适用于:针对一个网络中的大量系统进行同一安全漏洞的渗透测试与检查。可以针对一个系统配置好msfcli的命令行参数,然后写一段简单的Shell脚本来对一组IP地址进行依次测试,并将结果输出到日志文件中以供查询和进一步分析。
- 缺点:支持的功能特性较少,不支持将结果输入到后台数据库中,同时只能处理一个Shell,不支持MSF终端中的高级自动化渗透特性。
5. 常用指令(msfconsole)
back
-
用于跳出当前上下文
banner
-
显示一个随机选择的横幅
color
-
启用或禁用输出包含颜色功能。
connect ip号
端口号
- 通过命令中的ip和端口连接到一个远程主机
exit/quit
-
退出msfconsole,返回命令行界面
help
-
帮助信息,包括核心信息和后台数据库信息
info
提供关于一个特定模块的详细信息,包括模块名、版本、平台、提供者、可用目标、基础选项、负载信息、描述和参考网站。
-
在>msf下使用info
模块名
: -
在模块下使用直接输入info
irb
-
运行一个动态ruby shell,可以发出命令、动态创建metasploit脚本,对理解内部框架非常有用。
jobs
-
在后台运行的模块,可以列出和终止这些工作模块。
kill
- kill命令将杀死任何运行作业时工作提供的id。
load
-
从插件目录加载插件
loadpath 路径
- 可以以路径方式加载第三方模块树,用于0-day漏洞、编码器、负载等。
unload
-
卸载以前装载的插件并删除任何扩展命令。
makerc
-
运行可以通过msfconsole被加载的批处理文件。
route
- 在metepreter中查看或修改路由表
search
-
基于正则表达式的搜索功能,在模块定位搜索信息的名称、描述、参考文献等。
-
search name:用于描述性名称搜索
-
search path:用于路径关键字搜索
-
search platform:搜索影响特定平台的模块,缩小范围
-
search type:过滤模块类型
-
search author:搜索某特定作者的模块
-
search
多关键字组合
:把多个关键词组合在一起,进一步缩小返回的结果。
sessions
列出、交互或杀死会话,可以是shell、meterpreter会话、VNC等。
-
sessions -l:列出活动会话
sessions -i
会话id
:切换活动会话
set 变量
设定值
-
为当前模块配置框架选项和参数
unset 变量
设定值
-
unset all:删除所有指定的变量
setg 变量
变量值
- 设置全局变量
show
-
显示每个模块
show auxiliary:显示可用的辅助模块
show exploits:显示可用的渗透攻击模块
-
show payloads:显示可用的载荷模块(在某模块下,使用仅显示特定载荷)
-
show options:在某模块下,显示其可用的设置或所需的特定模块
-
show targets:在某模块下,显示其特定的目标
-
show advanced:在某模块下,进一步利用所需的高级设置选项
-
show encoders:显示可用编码器列表
-
show nops:显示提供的空操作
use
-
使用某个渗透攻击模块
参考资料
参考资料1:《metasploit渗透测试魔鬼训练营》
参考资料2:Metesploit使用指导
参考资料3:《BT5&Metasploit从入门到精通》黑客渗透入门经典视频课程-陈鑫杰