2021 OWASP TOP 6-10 合集

一、使用易受攻击和过时的组件

1、基础概念

相信大家都听说过木桶效应,对于 Web 应用的安全性来说,木桶效应同样有效。假设我们的 Web 应用运用了多个组件,例如 Struts、Apache,那么它的安全强度也是由这些组件中最脆弱的一个所决定。所以在我们开发一个 Web 应用时,需要确保每一个组件都不存在已知的安全问题。

通常来讲,Web 应用一般都包含三个基础组件,Web 应用服务组件、Web 数据库组件以及 Web客户端浏览器组件,但是这三个组件本身,往往也是由多个组件所构成,,例如 Web 应用服务器可能会包含 Struts、Apache 应用等多个组件,而 Struts、Apache 内部也会包含很多组件。所以组件是一个很灵活的说法,我们可以将它简单地理解为是一个独立功能单元。

随着 Web 应用的功能越来越复杂,应用中组件的个数也在不断提升,这会对 Web 应用的安全造成一定的威胁,因为我们难以确保每个组件都是安全的,所以它在 OWASP 2021 中荣登了榜六的位置。

下面我们通过几个实例来具体的学习一下这个安全问题。

2、Struts2 RCE漏洞

首先我们要先了解什么是Struts2,参照百度百科的说法:

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。

作为一个控制器,Struts被广泛的应用到了诸多的开发项目中,市场地位的和使用范围的提高,自然而然的吸引了众多安全研究者的目光,随之而来的就是逐年被各大安全研究者发现的安全漏洞,从发布至今,Struts2独立的漏洞编号S2系列已经发布到了S2-062,也就是说,Struts2累计已经被发现了62个漏洞,而其中又以拒绝服务和RCE漏洞居多,在这里我们就拿一个最新S2-062来作为示例。

首先我们打开我们的靶机,这里用到的是Vulfocus的在线靶机作为目标。

在这里插入图片描述

这里我们直接使用漏洞验证POC进行测试,工具位置:github

在这里插入图片描述

从图中可以看见我们的目标检测结果是存在漏洞,并且成功执行了命令。

关于struts2的其他漏洞情况,可以参考这一篇文章:struts2漏洞汇总

3、ThinkPHP6 文件上传漏洞

ThinkPHP是我们PHP程序中最常用的开发框架之一,同样是遵循的MVC模式。我认为使用不安全的的开发框架同样也属于使用易受攻击的组件的范畴,所有这里将thinkPHP6的任意文件操作漏洞作为示例进行演示。

该漏洞是由不安全的SessionId导致的任意文件操作漏洞。该漏洞允许攻击者在目标环境启用session的条件下创建以及删除任意文件,在特定情况下还可以getshell

首先还是启动我们的靶机,该靶机位于谜团上面。

启动后,可以看到是一个典型的ThinkPhp的默认页面。

在这里插入图片描述

我们这里再次访问一下这个页面,并使用burpsuite进行抓包:

在这里插入图片描述

可以看到,成功的设置了cookie,然后我们按照靶机提示,修改SessionID的值,来创建文件:

在这里插入图片描述

结果显示创建成功,然后我们尝试访问aaaaaaaaaa.php,发现文件创建成功,并执行了PHP代码。

在这里插入图片描述

上面两个示例就是我们真实情况下的,使用了不安全的组件导致的安全问题,这类问题也是非常多,运维人员常常深受其害。

3、防御方法

为了我们的web程序不会收到组件的安全威胁,我们需要了解开发的 Web 应用中所有的组件信息,然后对它们进行检查,判断其中是否有不安全的组件存在,如果存在就对它们进行限制或修改,解决安全隐患,同时持续关注这些组件的安全信息。做到及时响应、及时解决。

二、认证和授权失败

通俗地说,该漏洞会导致攻击者使用用户的用户名和密码进行填充,从而入侵系统。

常见的漏洞有:

  • 允许自动攻击,例如撞库,其中攻击者拥有有效用户名和密码的列表。
  • 允许蛮力或其他自动攻击。
  • 允许使用默认密码、弱密码或众所周知的密码,例如“Password1”或“admin/admin”。
  • 使用弱或无效的凭据恢复和忘记密码流程,例如无法确保安全的“基于知识的答案”。
  • 使用纯文本、加密或弱散列密码。
  • 缺少或无效的多因素身份验证。
  • 在 URL 中公开会话 ID(例如,URL 重写)。
  • 成功登录后不要轮换会话 ID。
  • 不会正确地使会话 ID 无效。用户会话或身份验证令牌(主要是单点登录 (SSO) 令牌)在注销或一段时间不活动期间未正确失效。

关于认证和授权的相关内容,请参考:web渗透测试-身份认证漏洞

三、软件和数据完整性故障

我们软件和数据完整性故障可以分为两个方向,即软件完整性故障及数据完整性故障 。

软件完整性故障代表应用的运行代码可能受到篡改,攻击者可以将恶意代码加入到应用程序中,使得应用程序运行时,恶意代码也被执行。

数据完整性故障则代表应用发送的数据可能受到篡改,攻击者可以通过修改一些数据,实现欺骗其他用户乃至绕过访问控制。

1、软件的完整性故障

件的完整性故障就是应用的运行代码可能受到了篡改 ,对于攻击者来说,执行这一步操作有多种方式:

  • 第一种:
当应用依赖于一些来源不可信的插件或模块时,攻击者就可以尝试对这些依赖项的代码进行修改,这样应用在引入依赖项时也会将恶意代码引入,从而导致软件完整性被破坏。这种方法可说是供应链攻击的一种方式。
  • 第二种:

    利用应用更新过程来进行攻击,如果一个应用在更新时,没有对其更新的内容进行完整性验证就将它添加到应用中,那么在这个过程中,就可能会存在恶意代码的添加。
    

2、数据的完整性故障

数据的完整性故障就是应用发送的数据可能受到了篡改,比如受到了常见的中间人攻击。

当然,也可能是不安全的反序列化等,关于序列化与反序列化,可以参考序列化与反序列化详解。不安全的反序列化漏洞曾经一度冲上过OWASP的TOP 10漏洞榜单,但是在最新的一期排名中,则被归类为了数据的完整性故障。

3、防御方法

对于防御,我们可以根据软件和数据完整性故障产生的不同原因,针对性地执行防御措施 。

比如为了防止用户下载被修改过的应用或者修改应用发送的数据,我们可以在应用中增加数字签名机制。

四、安全日志记录和监控失败

2017年以前,“安全日志记录和监控失败”叫做“日志记录和监控不足”,此类型已经扩展包括很多类型的漏洞。它指的是在没有日志记录和监控,将无法检测到漏洞,此类故障会直接影响可见性、事件报警和取证。

常见的漏洞:

  1. 不记录可审计的事件,例如登录、失败登录和高价值交易。
  2. 警告和错误不会生成、不充分或不清楚的日志消息。
  3. 不会监控应用程序和 API 的日志是否存在可疑活动。
  4. 日志仅存储在本地。
  5. 适当的警报阈值和响应升级流程没有到位或有效。
  6. DAST 工具(例如 OWASP ZAP)的渗透测试和扫描不会触发警报。
  7. 应用程序无法实时或接近实时地检测、升级或警告主动攻击。

五、服务器端请求伪造

SSRF 即为 Server Side Request Forgery 的缩写,它意为服务端请求伪造。指的是当攻击者无法访问 Web 应用的内网时,在未能取得服务器所有权限的情况下,利用服务器存在的漏洞,以服务器的身份发送一条精心构造好的请求给服务器所在内网,从而成功对内网发起请求。

下面我们来看一个示例,这是一个web程序发起的POST请求:

POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

stockApi=http://stock.weliketoshop.net:8080/product/stock/check%3FproductId%3D6%26storeId%3D1

服务器向指定的URL发出请求,检索库存状态,然后将其返回给用户。在这种情况下,攻击者可以修改请求以指定服务器本身本地的URL。例如:

POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

stockApi=http://localhost/admin

在这里,服务器可能会获取/admin的内容并将其返回给用户。

此时攻击者可以直接访问/admin;但是,通常只有适当的经过身份验证的用户才能访问管理功能。因此,直接访问URL时将不会看到任何有价值的内容。但是,当对/admin的请求来自本地计算机时,将绕过常规的访问控制,该应用程序授予对管理功能的完全访问权限,因为该请求来自受信任的位置。

对于SSRF攻击,有多种利用方式,比如内网资产扫描、读取文件甚至执行系统命令等。详细的攻击利用方法可以参考:web渗透测试–SSRF漏洞SSRF请求伪造基础SSRF漏洞中用到的协议

猜你喜欢

转载自blog.csdn.net/qq_45590334/article/details/125798697