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

规划与侦察
计划阶段旨在获取目标的所有相关信息,例如通过网络钓鱼攻击捕获详细的技术数据。这些细节方面的信息,对于后续过程的开展,起到了至关重要的影响。
而侦察阶段主要是通过主动和被动两种基本方法,收集大量的基本数据。其中,主动侦查很容易引起目标组织的注意;而被动侦察则以更加隐蔽、难以识别的方式间接收集信息。不过,相比被动方法的复杂与耗时,主动方法虽不够细致,但效率更高。
扫描
扫描阶段的主要目的是以最小的被发现代价,深入挖掘目标,收集有价值的信息,如同从一堆乱七八糟的物品中筛选出隐藏的宝石。例如,针对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)...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
