渗透测试是出于保护系统的目的,对目标系统进行的一系列测试,模拟黑客入侵的常见行为,从而寻找系统中存在的漏洞。渗透测试的基本流程主要分为8个步骤:明确目标、信息搜集、漏洞探测、漏洞验证、信息分析、获取所需信息、信息整理、报告形成,如图1-1所示。
本书将着重介绍明确目标、信息搜集、漏洞探测、漏洞验证、信息分析、信息整理这6个方面,展示Python语言在渗透测试过程中的实际运用。在第4章中,将会从外网被动信息搜集和主动信息搜集两个方面讲解信息搜集、信息分析。在第5章中,将会从未授权访问漏洞、XXE漏洞、SQL注入漏洞以及SSRF漏洞等方面讲解漏洞探测、漏洞验证。下面介绍渗透测试流程中每个步骤所使用的技巧及方法。
图1-1 渗透测试的基本流程
1.明确目标
在这个阶段,渗透测试团队需要与客户进行沟通,确定目标的范围、限度、需求等,并根据这些内容制定全面、详细的渗透测试方案:
·确定范围:渗透测试目标的IP、域名、内外网、子网、旁站等。
·确定限度:明确对渗透测试目标允许渗透到什么程度,允许测试的时间段,是否允许进行上传、下载、提取等高危操作。
·确定需求:例如,探测Web应用服务漏洞(新上线应用)、业务逻辑漏洞(针对业务面)、人员权限管理漏洞(针对人员、权限)等。
2.信息搜集
在这个阶段,渗透测试团队可以利用各种方法,获取更多关于目标网络的拓扑、系统配置等信息。搜集信息的方式包括扫描、开放搜索等,利用搜索引擎获得目标后台、未授权页面、敏感URL等。需要搜集以下类型的信息:
·基础信息:IP、网段、域名、端口。
·系统信息:操作系统及其版本。
·应用信息:各个端口应用服务,如Web应用、邮件应用等。
·版本信息:所有探测到信息的版本。
·服务信息:高危服务,如文件共享服务等。
·人员信息:域名注册人员信息、管理员信息、用户信息等。
·防护信息:防护设备的信息,如安全狗等。
3.漏洞探测
在这个阶段,渗透测试人员需要综合分析前期阶段所搜集到的信息,特别是历史安全漏洞信息、服务信息等,找到可以实施渗透的点,利用搜集到的各种系统、应用、服务等信息使用相应的漏洞测试。包括如下方法:
·使用漏洞扫描器,如AWVS、IBM、AppScan等。
·结合漏洞寻找利用方法,验证Proof of Concept。
·寻找系统补丁信息探测系统漏洞,检查是否没有及时打补丁。
·检查Webserver漏洞(配置问题)、Web应用漏洞(开发问题)。
·检查明文传输、cookie复用等问题。
4.漏洞验证
将漏洞探索过程中发现的有可能成功利用的全部漏洞验证一遍,结合实际情况,搭建模拟环境进行实验,成功后再应用于目标。这个过程需要自动化验证,即结合自动化扫描工具提供的结果手工验证,根据公开资源进行验证。可以尝试猜登录口的账号、密码等信息的方式。如果发现业务漏洞,则进行验证。在公开资源中寻找系统漏洞,如乌云镜像站、Google Hacking、渗透代码网站、通用应用漏洞、厂商漏洞警告等。
5.信息分析
对搜集到的信息进行分析,为下一步实施渗透测试做准备。准备探测到的漏洞利用程序,精准打击目标。包括以下一些手段:
·绕过安全防御机制、防火墙等设备。
·定制渗透路径,寻找目标突破口。
·绕过检测机制、流量监控、杀毒软件、恶意代码检测(免杀技术)等。
6.获得所需信息
根据前几步结果获取所需信息,包括以下一些手段:
·获取内部信息,即基础设施信息(网络架构、拓扑、VPN等)。
·进入内网,进行权限维持(一般客户做渗透测试不需要进行此步骤)。
·痕迹清理,清除相关访问操作日志及文件。
7.信息整理
把以上操作的内容总结出来,需要整理如下信息,为最后形成报告和测试结果做好准备:
·所用的渗透工具,包括渗透测试过程中用到的代码、POC、EXP等。
·搜集的信息,包括渗透测试过程中搜集到的一切信息。
·漏洞的信息,包括渗透测试过程中遇到的漏洞、脆弱的位置信息等。
8.形成报告
按照与客户确定好的范围、需求整理渗透测试结果并将资料形成报告。对漏洞成因、验证过程及其危害进行严谨分析,并补充针对漏洞问题的高效修复建议及解决办法。