细说渗透测试:阶段、流程、工具和自动化开源方案
不知有多少“曾梦想仗剑走天涯”的网络与信息安全从业者,是因为渗透测试的初心而步入这个行业的。不过,您是否对渗透测试及其漏洞扫描的相关概念感到既熟悉又陌生呢?您是否觉得自己还停留在从工作实践中积累的感性认识呢?下面,我们将为您梳理渗透测试的各个实施阶段,流程示例,典型工具,以及自动化开源方案。
渗透测试的阶段
从概念上说,渗透测试是一种通过模拟“友好的”黑客,来识别和利用安全漏洞的过程。作为一种标准化的系统性方法,它旨在提高目标系统与组织的安全态势。如下图所示,渗透测试往往从规划和收集信息开始,根据目标需求的不同,或是以报告发现到的漏洞、或是以保持访问控制作为结束。
渗透测试的各个阶段

规划与侦察
计划阶段旨在获取目标的所有相关信息,例如通过网络钓鱼攻击捕获详细的技术数据。这些细节方面的信息,对于后续过程的开展,起到了至关重要的影响。
而侦察阶段主要是通过主动和被动两种基本方法,收集大量的基本数据。其中,主动侦查很容易引起目标组织的注意;而被动侦察则以更加隐蔽、难以识别的方式间接收集信息。不过,相比被动方法的复杂与耗时,主动方法虽不够细致,但效率更高。
扫描
扫描阶段的主要目的是以最小的被发现代价,深入挖掘目标,收集有价值的信息,如同从一堆乱七八糟的物品中筛选出隐藏的宝石。例如,针对Web应用,我们可以扫描CSRF潜在漏洞和XSS端点等。定位入侵点后,我们便可以调查该端口上运行的服务类型,进而判定其是否存在防火墙或WAF。下图展示了可开展的多种扫描类型。

各种扫描类型
作为渗透测试的重要一环,漏洞扫描往往被细化为分析评估数据,通过逆向工程研究漏洞和错误的成因。通常,漏洞扫描与评估需要我们投入大量的时间和精力,以了解不同信息之间的相互关系,进而准确地发现可能被利用的入侵点。当然,像exploit-db之类的在线数据库,可以为我们提供针对CVE的可利用漏洞列表,以及相关的PoC代码及其详细信息。
利用和获取访问
一旦发现可被利用的漏洞,攻击者需要尽快谨慎地利用漏洞,对目标系统予以非法访问。其中,最常见的莫过于使用远程代码执行(RCE)和后门。作为最危险的漏洞类型,RCE漏洞往往表现对输入与输出缺乏检查,以及存在可被篡改的代码逻辑。后门则有两类:自定义后门通常与欺骗目标下载恶意文件有关,而错误配置的后门则开放了开发者的隐蔽访问模式。
报告和控制
作为一名道德黑客,渗透测试的最后往往是撰写报告。在报告中,您需要阐述采取的步骤、发现的问题、可利用的漏洞、面临风险的资产、以及取得的成果等。这些有价值的信息可以协助组织确定针对攻击预防的优先级,从而有的放矢。
渗透测试的流程
在不断变化的网络威胁领域,我们有必要根据上述不同的实施阶段,为渗透测试创建一套能够轻松集成各种工具的工作流程。例如,我们可以首先使用Amass收集Web应用系统的子域地址,接着利用DnsDumpster提取IP地址,或使用regex来提取诸如URL、IP、端口等必要的数据,然后通过Nmap进行基于脚本的漏洞分析。下图展示了一个典型的渗透测试流程模型:

流程模型示例
该流程的特点是能够合理地整合各个测试工具之间的关联,让一种工具的输出能够影响另一种工具的配置,从而使得针对Web应用的枚举流程更加流畅和简化。当然,随着时间的推移、威胁的演化、以及Web环境的复杂化,安全专家需要通过持续关注细节和积累实战经验,来不断修订和完善该测试流程。
渗透测试的工具
显然,渗透测试离不开工具的使用。让我们来试想一位安全专家被要求对某个Web应用开展渗透测试。那么他会根据自己的工作经验开展如下工作:
选用Python作为自动化脚本的基础,开发各种工作流。
通过Sublist3r使用开源网络情报(OSINT),来枚举和收集目标Web的子域。
通过Nmap使用Sublist3r的输出结果,对发现的子域进行有针对性的扫描,以了解开放的端口和网络服务等攻击面。
以Nmap扫描结果为基础,配置Burp Suite,查找SQL注入和跨站脚本等常见漏洞。
以Burp Suite扫描到的漏洞为指导,通过Dirb枚举目标应用目录和文件,以查找Web服务器上的隐藏资源。
参照Dirb的发现,使用Nikto进行更全面、更深入的漏洞分析,总结出Web服务器上的已知漏洞、错误配置、以及过时的软件版本,并形成有关安全风险的综合报告。

典型工具的综合运用
随着网络安全威胁的不断变化,渗透测试工具也应持续迭代、与时俱进。以Metasploit为代表的漏洞利用平台与框架不但能够提供友好的用户界面,而且可以支持更广泛的漏洞类型,为安全专家提供直观、高效的自动漏洞利用执行流程。目前,整合威胁情报信息已成为一项标准功能。有的工具甚至采用了人工智能和机器学习等技术,来提高对于新型网络威胁和漏洞的识别和排序的精确度和有效性。
自动化开源方案
随着越来越多的组织实现了持续、快速的软件交付,自动化渗透测试方案也在不断与DevOps工作流进行整合。它可以在开发管道的不同阶段引入安全测试。同时,随着无服务器架构在云计算环境的普及,我们也可以通过创建或修改现有的自动化工具,以评估云基础架构的安全性。对此,安全专家可以将如下开源的工具与方案,整合到现有的测试流程中,以免去自己动手编写系统代码和脚本的烦恼:
Rayder:是一款简化的工作流应用,可用于运行复杂的编排映射。该工具通过YAML来映射不同的命令和工具,来运行侦查任务。当然,我们需要使用命令来告知其该如何执行、保存和定位输出。
MetaHub:是一个上下文框架,可根据环境与核心要求,自动编译与上下文相关的资产。该工具主要适用于与云服务和AWS相关的操作。
Vortex:该工具有助于侦查、枚举和开发等多种任务的自动化。
Osmedeus:是一个庞大的框架,几乎涵盖了自动化枚举和侦查的所有要求,可被用于扫描Git存储库、某个子域、以及云服务发行版。
小结
当然,您可以自行在GitHub上搜索可用于持续集成与持续部署的Python软件包。例如,使用GitHub Actions、GitLab CI或Jenkins等工具,可建立持续集成和测试的管道,以确保自动化测试流程的有效性、灵活性。
可以说,渗透测试流程的自动化使得安全团队能够从重复性任务中解脱出来,简化了资源的使用率,缩短了漏洞扫描与评估的时间,进而让组织能够动态地应对不断变化的威胁形势,保护自身的敏感数据和数字资产。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末自行领取】
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:
细说渗透测试:阶段、流程、工具和自动化开源方案
不知有多少“曾梦想仗剑走天涯”的网络与信息安全从业者,是因为渗透测试的初心而步入这个行业的。不过,您是否对渗透测试及其漏洞扫描的相关概念感到既熟悉又陌生呢?您是否觉得自己还停留在从工作实践中积累的感性认识呢?下面&…...
redis 十大应用场景
Redis 是一个开源的内存数据结构存储系统,广泛应用于各种场景,尤其在高性能、低延迟需求的场景中。以下是 Redis 的一些典型应用场景: 1. 缓存系统 Redis 最常见的用途之一是作为缓存系统,以减少数据库访问的频率,提升…...
信息安全数学基础(15)欧拉定理
前言 欧拉定理是数论中的一个重要定理,它建立了模运算下指数与模的互质关系。这个定理在密码学、信息安全等领域有着广泛的应用,特别是在公钥密码体制(如RSA加密算法)中。 一、表述 设 n 是一个正整数,a 是一个与 n 互…...
sar(1) command
文章目录 1.简介2.格式3.选项4.示例参考文献 1.简介 sar(System Activity Report)收集、报告或保存系统活动信息。 sar 是一个用于监控和报告系统性能的命令行工具。它是 sysstat 套件的一部分,能够收集和报告各种系统活动的信息࿰…...
掌握 JavaScript 中的函数表达式
函数表达式是 javascript 中定义函数的一种方式。与函数声明不同,函数表达式可以是匿名的,并且通常用于将函数视为值的情况。在本文中,我们将探讨函数表达式、如何将函数视为值、回调函数以及函数表达式和函数声明之间的差异。 函数表达式 …...
OpenGL 原生库6 坐标系统
概述 为了将坐标从一个坐标系变换到另一个坐标系,我们需要用到几个变换矩阵,最重要的几个分别是模型(Model)、观察(View)、投影(Projection)三个矩阵。我们的顶点坐标起始于局部空间(Local Space),在这里它称为局部坐标(Local Coordinate)&a…...
LabVIEW提高开发效率技巧----VI服务器和动态调用
VI服务器(VI Server)和动态调用是LabVIEW中的两个重要功能,可以有效提升程序的灵活性、模块化和可扩展性。通过这两者的结合,开发者可以在运行时动态加载和调用VI(虚拟仪器),实现更为复杂的应用…...
求1000以内所有恰好能分解成10组两个素数之和
要求 根据哥德巴赫猜想,任意一个大偶数都可以分解为两个素数之和。但许多偶数分解为两个素数之和并不是唯一的。 请编写函数fun,其功能是:求1000(不包括1000)以内的所有恰好能分解成10组两个素数之和(5109和1095被认为是同一组)的偶并依次存入数组a中并…...
Webpack 和 Vite 的区别
Webpack 是一种模块打包工具,主要功能是将各种资源(如 JavaScript、CSS、图片等)通过 loader 和 plugin 转换和打包成可以直接在浏览器中运行的代码。其核心思想是以代码分割、按需加载和优化资源来提升性能。 Vite 是一种新型构建工具&…...
C++——初步认识C++和namespace的用法
1.编程语言排行榜 我们通过排行可以看出 C在变成语言中还是占据着重要的地位 2.C在工作领域中的应用 1.PC客户端开发。⼀般是开发Windows上的桌面软件,比如WPS之类的,技术栈的话⼀般是C和 QT,QT 是⼀个跨平台的 C图形用户界面(G…...
LeetCode118:杨辉三角
题目链接:118. 杨辉三角 - 力扣(LeetCode) 代码如下 class Solution {public:vector<vector<int>> generate(int numRows) {vector<vector<int>> dp(numRows);vector<int> temp(numRows);for (int i 0; i &…...
介绍一下大模型或者多模态?
什么是大模型、多模态 大模型多模态 大模型 定义: 大模型,通常指的是在深度学习领域,具有大规模参数和复杂结构的模型。这些模型往往需要大量的计算资源和数据进行训练和推理。大模型因其强大的表示能力和泛化性能,在多个领域展现…...
深度学习之图像数据集增强(Data Augmentation)
文章目录 一、 数据增强概述二、python实现传统数据增强参考文献 一、 数据增强概述 数据增强(Data Augmentation)是一种技术,通过对现有数据进行各种变换和处理来生成新的训练样本,从而增加数据集的多样性和数量。这些变换可以是…...
小程序与APP的区别
目录 前言1. 开发方式与成本2. 运行环境与获取途径3. 功能复杂度与交互体验4. 更新与维护5. 推广与用户获取6. 占用空间与存储7. 可分享性总结 前言 小程序与APP作为两种不同类型的应用程序,它们在多个方面存在明显的区别。以下是对这些区别的详细阐述:…...
Linux Kernel Makefiles 编译标志详解
在Linux内核开发中,Makefile文件扮演着至关重要的角色,它指导make命令如何编译和链接内核源代码。Makefile中包含了多种编译标志(flags),这些标志控制着编译、汇编和链接过程的不同方面。本文将详细介绍几种关键的编译…...
数据可视化pyecharts——数据分析(柱状图、折线图、饼图)
安装 首先确保已经安装了pyecharts库,如果没有,可以通过pip install pyecharts进行安装。 柱状图 从pyecharts.charts导入Bar,从pyecharts导入options。准备数据(如类别数据x_data和对应的数值数据y_data)。创建Bar对…...
小程序构建npm失败
小程序构建npm失败 项目工程结构说明解决方法引入依赖导致的其他问题 今天在初始化后的小程序中引入TDesign组件库,构建npm时报错。 项目工程结构说明 初始化后的项目中,包含miniprogram文件夹和一些项目配置文件,在project.config.json文件中…...
计算机人工智能前沿进展-大语言模型方向-2024-09-20
计算机人工智能前沿进展-大语言模型方向-2024-09-20 1. Multimodal Fusion with LLMs for Engagement Prediction in Natural Conversation Authors: Cheng Charles Ma, Kevin Hyekang Joo, Alexandria K. Vail, Sunreeta Bhattacharya, Alvaro Fern’andez Garc’ia, Kailan…...
cv环境设置
pytorch TensorFlow。。。 环境布置,库的安装顺序: 确定显卡可用的cuda上下限 (比如3090需要至少11.x以上的cuda参考: 一文理顺:pytorch、cuda版本,从此不再为兼容问题头疼! - 哔哩哔哩 (bilibili.com)&am…...
线性代数书中求解线性方程组的三种方法的实例
目录 一、克拉默法则(P45) 二、逆矩阵(P46) 三、高斯-约旦消元法(P65) 一、克拉默法则(P45) 二、逆矩阵(P46) 三、高斯-约旦消元法(P65)...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
