在利用阶段,我们寻找如何将这些弱点调整以适应我们的用例,以达到预期目标(例如,获取初始立足点、提升权限等)。如果我们想获得一个反向shell,我们需要修改漏洞验证概念代码(PoC)来执行代码,以便目标系统通过加密连接(理想情况下)回连到我们指定的IP地址。因此,漏洞利用程序的准备主要是利用阶段的一部分。
渗透测试流程:前期交互、信息收集、漏洞评估、利用、后渗透攻击、横向移动、概念验证、后期交互。
这些阶段不应被严格分开,因为它们是紧密相连的。尽管如此,区分我们处于哪个阶段及其目的仍然很重要。因为在后期,随着流程更加复杂、信息量更大,很容易忘记已采取的步骤,特别是当渗透测试持续数周且覆盖范围巨大时。
可能攻击的优先级排序
当我们在漏洞评估阶段发现一到两个可以应用于目标网络/系统的漏洞后,我们就可以对这些攻击进行优先级排序。决定哪些攻击比其他攻击优先级更高的因素如下:
- 成功概率
- 复杂程度
- 造成损害的概率
首先,我们需要评估针对目标成功执行特定攻击的概率。通用漏洞评分系统(CVSS)评分可以在这里帮助我们,使用美国国家漏洞数据库(NVD)计算器可以更好地计算特定攻击及其成功概率。
复杂程度代表了利用特定漏洞所需付出的努力。这用于估算在系统上成功执行攻击需要多少时间、精力和技术研究。我们的经验在此起着重要作用,因为如果我们要执行一个从未使用过的攻击,这显然需要更多的研究和努力,因为我们在应用之前必须详细理解该攻击和漏洞利用程序的结构。
评估漏洞利用程序执行可能造成的损害概率起着关键作用,因为我们必须避免对目标系统造成任何损害。通常,我们不会执行拒绝服务(DoS)攻击,除非客户明确要求。然而,我们必须始终避免使用可能对软件或操作系统造成损害的漏洞利用程序去攻击正在运行的服务。
此外,我们可以为这些因素分配一个个人点数系统,这将允许根据我们的技能和知识进行更精确的评估:
优先级排序示例
| 因素 | 点数 | 远程文件包含 | 缓冲区溢出 |
|---|---|---|---|
| 1. 成功概率 | 10 | 10 | 8 |
| 2. 复杂程度 – 简单 | 5 | 4 | 0 |
| 3. 复杂程度 – 中等 | 3 | 0 | 3 |
| 4. 复杂程度 – 困难 | 1 | 0 | 0 |
| 5. 造成损害的概率 | -5 | 0 | -5 |
| 总结 | 最高 15 | 14 | 6 |
基于以上示例,我们会优先选择远程文件包含攻击。它易于准备和执行,并且如果小心操作,不应造成任何损害。
攻击准备
有时我们会遇到找不到高质量、已知可用的漏洞验证概念代码(PoC)的情况。因此,可能有必要在代表目标主机的虚拟机(VM)上本地重建漏洞利用程序,以精确找出需要调整和修改的地方。一旦我们在本地设置好系统,并安装了已知组件以尽可能接近地镜像目标环境(例如,目标服务/应用程序的版本号相同),我们就可以开始按照漏洞利用描述中的步骤准备攻击程序。然后我们在本地托管的虚拟机上进行测试,以确保其有效且不会造成显著损害。在其他情况下,我们会遇到一些非常常见的错误配置和漏洞,并且我们清楚地知道该使用哪个工具或漏洞利用程序,以及该利用程序或技术是否”安全”或可能导致系统不稳定。
如果在执行攻击前有任何疑问,最好始终与客户核实,向他们提供所有必要数据,以便他们就能否尝试利用做出明智决定,或者仅将发现的问题标记为需处理项。如果他们选择不进行利用,我们可以在报告中注明未主动确认,但很可能是一个需要解决的问题。在渗透测试中,我们有一定的自由度,但如果某个攻击看起来风险太高或可能造成中断,应始终运用最佳判断。如有疑问,及时沟通。你的团队负责人/经理、客户几乎肯定更愿意多沟通,而不是在漏洞利用尝试失败后忙于让系统恢复上线。
一旦我们成功利用了目标并获得初始访问权限(并为我们的报告做了清晰的笔记,并将所有活动记录在活动日志中!),我们将进入后渗透攻击和横向移动阶段。





