写在最前面:本篇文章主要是对一些基本的概念进行学习,便于实践时有一个理论基础。所以很多内容都是直接网上摘录,仅供自己学习。

https://www.jianshu.com/p/92dfdbe8bb8a

PETS–渗透测试执行标准

“入门渗透测试,首先需要了解渗透测试的流程、步骤与方法。尽管渗透目标的环境各不相同,但依然可以用一些标准化的方法体系进行规范和限制。”

目前渗透测试方法体系标准比较流行的有5个,其中PTES渗透测试执行标准得到了安全业界的普遍认同,它具体包括以下7个阶段。
enter description here

前期交互阶段

前期交互阶段通常是与客户组织进行讨论,来确定渗透测试的范围和目标。这个阶段最为关键的是需要让客户组织明确清晰地了解渗透测试将涉及哪些目标。选择更加现实可行的渗透测试目标进行实际实施。

前期交互阶段要做的事主要有以下几件:

介绍和解释可用的工具和技术,根据客户需求为客户提供量身定制的测试方案。可用于渗透测试的工具和技术有很多,但客户环境不一定支持,比如设备老旧,不能使用工具进行高强度的扫描行为;或者白天业务量大,只能在凌晨一两点才能测试;再或者不能进行弱口令扫描,账号锁定后会对业务产生影响等等,这些都需要事先沟通好,以免测试对客户生产环境造成影响。

确定项目范围,项目范围圈出了要测试的内容。我们只能对已授权的资产进行测试,未授权的资产不能进行任何测试。

确定周期,起始和终止时间。根据测试内容,评估所需要花的时间。一般建议多填充20%,以防测试因各种因素中断,可以拿这20%的时间作为缓冲。

前期交互阶段参与的一般是销售和项目经理,他们与客户达成协议后,客户将需要测试的资产交给项目经理,再由项目经理分发给渗透人员执行。但有时客户会直接和渗透人员对接,特定是在长期项目中,这个时候渗透人员也会参与到这个阶段。

情报搜集阶段

在情报搜集阶段,需要使用各种可能的方法来收集将要攻击的客户组织的所有信息,包括使用社交媒体网络Google Hacking技术目标系统踩点等等。作为渗透测试人员,最重要的一项技术就是对目标系统的探查能力,包括获知它的行为模式、运行机理,以及最终可以如何被攻击。

在情报搜集阶段中,通过逐步深入的探测,来确定在目标系统中实施了哪些安全防御措施。例如,一个组织在对外开放的网络设备上经常设置端口过滤,只允许接收发往特定端口的网络流量,而一旦在白名单之外的端口访问这些设备时,那么就会被加入黑名单进行阻断。通过这种阻断行为的一个好方法是先从所控制的其他IP地址来进行初始探测,而这个IP地址是预期就会被阻断或者检测到的。当在探测web应用程序时,这个方法非常适用,因为一些保护web应用程序的web应用防火墙通常也会在探测请求数量超过一定阈值后对IP进行阻断,使得无法再使用这个IP发起任何请求

情报搜集阶段的目标是尽可能多的收集渗透对象的信息(网络拓扑、系统配置、安全防御措施等),在此阶段收集的信息越多,后续阶段可使用的攻击矢量就越多。因为情报搜集可以确定目标环境的各种入口点(物理、网络、人),每多发现一个入口点,都能提高渗透成功的几率。

和传统渗透不同的是,安全服务有时候仅仅只是针对一个功能进行测试,所以不一定每次都需要收集目标的信息,或者只需要收集一部分信息;但如果是对一个系统进行渗透,还是要尽可能多的收集目标的信息。

威胁建模阶段

利用上一阶段获取到的信息进行威胁建模攻击规划

威胁建模主要使用在情报搜集阶段所获取到的信息,来标识出目标系统上可能存在的安全漏洞与弱点。在进行威胁建模时,确定最为高效的攻击方法、所需要进一步获取到的信息,以及从哪里攻破目标系统。

威胁建模:利用获取到的信息来标识目标组织可能存在的漏洞与缺陷。威胁建模有两个关键要素:资产分析和威胁分析。识别主要和次要资产并对其进行分类,并根据资产识别其可能存在的威胁。比如看到28017端口我们要想到是否存在mongodb未授权访问,看到21端口我们要想到是否存在ftp匿名登录等等。

攻击规划:根据威胁模型确定下一步需要搜集的信息和攻击方法。威胁模型建立后,可行的攻击矢量已基本确定,接下来要做的就是一个一个验证其是否可行,在这个过程中依然会伴随着信息的收集以及威胁模型的调整

漏洞分析阶段

在漏洞分析阶段,综合从前面的几个环节中获取到信息,并从中分析和理解哪些攻击途径回事可行的。特别是需要重点分析端口和漏洞扫描结果,获取到的服务“旗帜”信息,以及在情报搜集环节中得到的其他关键信息。

在进行任何类型的漏洞分析时,测试人员应适当地确定适用深度广度的测试范围,以满足所需结果的目标和要求。传统的渗透是能通过一个漏洞拿到服务器最高权限就行,因此其重点是发现一个可利用的漏洞。但安全服务要求我们尽可能多的发现目标存在的漏洞,以此来保证系统的安全,而且很多时候只要证明漏洞存在即可,不需要再进行漏洞利用。两者的区别就相当于点和面,广度和深度均有所不同,具体执行尺度需要根据客户需求来定。

有些漏洞的验证,我们可以通过抓包改包很轻易的实现,但有些漏洞,验证的步骤很繁琐,则需要编写特定的概念验证(POC)来验证漏洞,这就要求测试人员有一定的开发能力

漏洞攻击阶段

漏洞攻击阶段侧重于通过绕过安全限制来建立对系统或资源的访问,实现精准打击,确定目标的主要切入点和高价值目标资产。

为实现系统安全,系统往往都会采用诸多技术来进行防御,如反病毒(IPS、IDS、WAF、……)、编码、加密、白名单等,在渗透期间,则需要混淆有效载荷来绕过这些安全限制,以达到成功攻击的目的。很多情况下,互联网上有很多公开的漏洞利用,可直接拿来使用,但对于一些特殊情况,则需要我们根据实际情况来量身定制**有效载荷(payload)**和漏洞利用(exploit)。

后渗透攻击阶段

后渗透攻击,顾名思义就是漏洞利用成功后的攻击,即拿到系统权限后的后续操作。后渗透攻击阶段的操作,可分为两种:权限维持内网渗透

权限维持——提升权限及保持对系统的访问。系统最高权限是我们向往的ONEPIECE,如果漏洞利用阶段得到的权限不是系统最高权限,我们应该继续寻找并利用漏洞进行提权。同时为了保持对系统的访问权限,我们应该留下后门(木马文件等)并隐藏自己(清除日志、隐藏文件等)。

内网渗透——利用获取到的服务器对其所在的内网环境进行渗透。内网环境往往要比外网环境有趣,我们可以利用获取到的服务器进一步获取目标组织的敏感信息。

报告阶段

报告是渗透测试过程中最为重要的因素,使用报告文档来交流在渗透测试过程中做了哪些,如何做的,以及最为重要的—-客户组织如何修复所发现的安全漏洞和弱点。

好的报告至少要包括以下两个主要部分,以便向客户传达测试的目标、方法和结果:
执行概要。这个部分向客户传达测试的背景和测试的结果。测试的背景主要是介绍测试的总体目的,测试过程中会用到的技术,相关风险及对策。测试的结果主要是将渗透测试期间发现的问题进行简要总结,并以统计或图形等易于阅读的形式进行呈现。然后根据结果,对系统进行风险等级评估并解释总体风险等级、概况和分数,最后再给出解决途径。

技术报告。这个部分主要是向客户传达测试的技术细节,详细描述测试发现的问题、攻击路径、影响和修复建议等。一方面是为了让客户更好的理解问题所在,将漏洞进行整改,另一方面是方便后续漏洞复查,形成矩阵跟踪闭环。

写在最后

http://www.pentest-standard.org/index.php/Main_Page

好站

Top 10 Web Application Security Risks

十大 Web 应用程序安全风险:https://owasp.org/www-project-top-ten/

https://wiki.owasp.org/images/d/dc/OWASP_Top_10_2017_%E4%B8%AD%E6%96%87%E7%89%88v1.3.pdf

enter description here
图片可见,在2021年,十大 Web 应用程序安全风险发生了一些变化,下面我会选取几个我感兴趣的内容进行扩展。

失效的访问控制

A01:2021-Broken Access Control,由第五名升到第一名 。
未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据,例如:访问其他用户的帐户、查看敏感文件、修改其他用户的数据、更改访问权限等。

https://owasp.org/www-community/Broken_Access_Control

风险项的描述

访问控制(有时称为授权)是 Web 应用程序向某些用户而不是其他用户授予内容和功能访问权限的方式。这些检查在身份验证后执行,并控制允许”授权”用户执行的操作。访问控制听起来像是一个简单的问题,但很难正确实现。Web 应用程序的访问控制模型与网站提供的内容和功能密切相关。此外,用户可能属于具有不同能力或特权的多个组或角色。

开发人员经常低估实现可靠访问控制机制的难度。其中许多方案不是故意设计的,只是随着网站的发展而发展。在这些情况下,访问控制规则将插入到代码中的各个位置。随着站点接近部署,规则的临时集合变得如此笨拙,以至于几乎不可能理解。

许多这些有缺陷的访问控制方案并不难发现和利用。通常,所需要的只是为不应授予的功能或内容制作请求。一旦发现缺陷,有缺陷的访问控制方案的后果可能是毁灭性的。除了查看未经授权的内容之外,攻击者还可能更改或删除内容执行未经授权的功能,甚至接管站点管理

一种特定类型的访问控制问题是允许站点管理员通过 Internet 管理站点的管理界面。此类功能通常用于允许站点管理员有效地管理其站点上的用户、数据和内容。在许多情况下,站点支持各种管理角色,以实现更精细的站点管理粒度。由于它们的强大功能,这些接口通常是外部人员和内部人员攻击的主要目标

受影响的环境

所有已知的 Web 服务器、应用程序服务器和 Web 应用程序环境都容易受到其中至少一些问题的影响。即使站点是完全静态的,如果未正确配置,黑客也可以访问敏感文件并破坏站点,或执行其他恶作剧。

如何保护自己

  1. 使用访问控制矩阵来定义访问控制规则
  2. 对于管理功能,主要建议是尽可能不允许管理员通过站点的前门进行访问。
  3. VPN 技术的使用可用于为外部管理员提供对内部公司(或站点)网络的访问权限,然后管理员可以通过受保护的后端连接从该网络访问站点。
  4. 有一些应用程序层安全组件可以帮助正确实施访问控制方案的某些方面,使用此类组件时,您必须小心地准确了解,根据站点的安全策略,该组件可以为您提供哪些访问控制帮助,以及该组件无法处理的访问控制策略的哪些部分,因此必须在您自己的自定义代码中正确处理。

注入

A03:2021-Injection,由第一名滑落到第三名
将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。跨站点脚本现在是此版本中此类别的一部分.

https://owasp.org/Top10/A03_2021-Injection/

风险项描述

在以下情况下,应用程序容易受到攻击:

  • 应用程序不会验证、筛选或清理用户提供的数据。
  • 动态查询或没有上下文感知转义的非参数化调用直接在解释器中使用。
  • 对象关系映射 (ORM) 搜索参数中使用恶意数据来提取其他敏感记录。
  • 直接使用或串联恶意数据。SQL 或命令包含动态查询、命令或存储过程中的结构和恶意数据。

一些更常见的注入是SQL,NoSQL,OS命令,对象关系映射(ORM),LDAP和表达式语言(EL)或对象图导航库(OGNL)注入。这个概念在所有口译员中都是相同的。源代码审查是检测应用程序是否容易受到注入攻击的最佳方法。强烈建议对所有参数、标头、URL、Cookie、JSON、SOAP 和 XML 数据输入进行自动测试。组织可以将静态 (SAST)、动态 (DAST) 和交互式 (IAST) 应用程序安全测试工具纳入 CI/CD 管道,以便在生产部署之前识别引入的注入缺陷。

如何预防

防止注入需要将数据与命令和查询分开:

  • 首选选项是使用安全的 API,该 API 可避免完全使用解释器、提供参数化接口或迁移到对象关系映射工具 (ORM)。
  • 注意:即使进行了参数化,如果 PL/SQL 或 T-SQL 连接查询和数据,或者使用 EXECUTE IMMEDIATE 或 exec() 执行敌对数据,存储过程仍会引入 SQL 注入。
  • 使用积极的服务器端输入验证。这不是一个完整的防御,因为许多应用程序需要特殊字符,例如文本区域或移动应用程序的API。
  • 对于任何残留动态查询,请使用该解释器的特定转义语法对特殊字符进行转义。
    注: SQL 结构(如表名、列名等)无法转义,因此用户提供的结构名是危险的。这是报告编写软件中的常见问题。
  • 在查询中使用 LIMIT 和其他 SQL 控件,以防止在 SQL 注入的情况下大量泄露记录。

远程控制软件

远程控制软件的分类标准很多,这里我们只介绍一下依据连接方式进行分类的标准。

根据不同软件的连接方式,可以把远程控制软件分为正向反向两种。下面我们重点说一下这两种类别的区别。

正向连接

只需要记住一个关键点:正向连接方式的软件在靶机运行后,只是会根据程序的不同在本机打开一个端口,而后等待Hacker去连接,即它不会主动通知攻击机,而攻击机也必须知道靶机的ip地址才可以进行攻击。

反向连接

与正向连接不同,反向连接是指当靶机执行被控端程序时会主动通知攻击机,因此攻击机也不需要知道靶机地址。这也是现在最常用的一类远程控制软件。