owasp top10

1.失效的访问控制

定义

访问控制:即保护资源不被非法访问和使用,目前应用最多的是基于角色的访问控制机制

失效的访问控制就是攻击者通过各种手段提升自己的权限,越过访问控制,使访问控制失效,这样攻击者就可以冒充用户、管理员或拥有特权的用户,或者创建、访问、更新或删除任何记录。

利用

通过修改 URL、内部应用程序状态或 HTML 页面,或仅使用自定义 API 攻击工具来绕过访问控制检查。
允许将主键更改为其他用户的记录,允许查看或编辑其他人的帐户。
特权提升。在未登录的情况下充当用户或以用户身份登录时充当管理员。
元数据操作,例如重放或篡改 JSON Web 令牌 (JWT) 访问控制令牌,或用于提升权限或滥用 JWT 失效的 cookie
或隐藏字段。
CORS 错误配置允许未经授权的 API 访问。
强制以未经身份验证的用户身份浏览经过身份验证的页面或以标准用户身份浏览特权页面。访问 API 时缺少对 POST、PUT 和 DELETE
的访问控制。

防御

1:除公有资源外,其他资源默认情况下拒绝访问。
2:使用一次性的访问控制机制,并在整个应用程序中不断重用它们。
3:建立访问控制模型以强制执行所有权记录,而不是接受用户创建、读取、更新或删除的任何记录。
4:当用户注销后,服务器上的JWT令牌应失效。

2.注入:

(Injection)攻击者向应用程序中输入恶意代码,使其执行未经授权的操作。

攻击方式:SQL注入、LDAP注入、OS命令注入等。

sql注入

输入恶意的sql语句,改变后台原有的sql语句。

防御

1:对输入进行严格的转义和过滤。
   2:数据类型进行严格定义,数据长度进行严格规定。
   3:通过waf设备启用防止sql注入的策略。
   4:严格限制网站访问数据库的权限。

os注入

通过Shell执行OS命令时,或者开发中用到的某个方法其内部利用了Shell时,就有可能出现OS命令被任意执行的情况。这种现象被称为OS命令注入。

防御

1:使用安全的函数对传递给OS命令参数进行转义。
   2:不将外界输入的字符串传递给命令行参数。
   3:选择不调用OS命令的实现方法。

防御方法:使用参数化查询/预编译(这样缺的只是数据,不会对sql语句造成其他影响,因为sql语句已经通过预编译技术固定下来了)、输入校验和白名单、最小化权限等。

但是预编译的话,也是存在绕过的,那就是case when绕过。

ldap:轻量级目录访问协议,类似于数据库,因为可以进行数据存储,但存储的是目录。用于查询比较多。

windows下使用ADAM,linux下使用openLDAP

3.失效的身份认证:

错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌,或者暂时或永久的冒充其他用户的身份。

身份认证:身份认证最常用于系统登录,形式一般为用户名加密码的登录方式,在安全性要求较高的情况下,还有验证码、客户端证书、Ukey等。
会话管理:HTTP利用会话机制来实现身份认证,HTTP身份认证的结果往往是获得一个令牌并放在cookie中,之后的身份识别只需读取授权令牌,如果授权令牌认证成功,那么就无需再次进行登录认证。

防御

1:区分公共区域和受限区域:站点的公共区域允许匿名用户访问,但是站点的受限区域只允许指定用户访问。
2:支持密码的有效期:向用户提供可以在一段时间后修改密码的功能。
3:能够禁用账户:在收到攻击后可以禁用账户来避免遭受进一步的损失。
4:要求用户使用强密码。
5:不要在网络上以纯文本方式传输用户名和密码:使用SSL对数据流进行加密,也可以对cookie进行加密。

4.XXE漏洞原理:

(XML External Entities (XXE)) 应用程序解析XML时,未正确处理外部实体,导致攻击者可以访问系统文件、执行命令等。

xml 可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声名、DTD文档类型定义、文档元素。

攻击方式:XXE攻击等。

防御方法:禁用外部实体、使用最新版本的XML解析器、输入校验等。

5.安全配置错误漏洞原理:

由于操作者的不当配置(默认配置,临时配置,开源云存储,http标头配置,以及包含敏感信息的详细错误),导致攻击者可以利用这些配置获取到更高的权限,安全配置错误可以发生在各个层面,包含平台、web服务器、应用服务器、数据库、架构和代码。

防御

1:使用的服务不包含任何不必要的功能、组件、文档和示例,移除或不安装不适用的功能和框架。
2:及时检测系统服务版本,为已发现的漏洞打补丁。
3:在对文件等分配权限时,根据其工作需要采取最小权限原则的方法。
4:自动化安装部署。
5:实施漏洞扫描和安全审计。

6.xss跨站脚本攻击原理:

(Cross-Site Scripting (XSS)) 攻击者向应用程序中输入恶意脚本,使其在用户的浏览器中执行。

详细解释:例如在表单中提交含有可执行的javascript的内容文本,如果服务器端没有过滤或转义这些脚本,而这些脚本由通过内容的形式发布到了页面上,这个时候如果有其他用户访问这个网页,那么浏览器就会执行这些脚本,从而被攻击,从而获取用户的cookie等信息。

存储型XSS:存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie。
 反射型XSS:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
 DOM型XSS:不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,攻击者向服务器发送一个带有恶意JS代码的请求,服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。

防御方法:输入校验、输出转义、HTTPOnly标记等。

7.不安全的反序列化漏洞原理:

序列化是将对象的状态信息转换为可以存储或传输的形式的过程。

(Insecure Deserialization)应用程序在反序列化数据时未正确验证其完整性和有效性,导致攻击者可以执行未经授权的代码。

利用

如果应用对恶意构造的用户输入的数据进行反序列化,这样就会产生非预期的对象,从而有可能产生远程代码执行。或者应用中存在可以在反序列化过程中或者之后被改变行为的类,则攻击者可以通过改变应用逻辑或者实现远程代码执行攻击。我们将其称为对象和数据结构攻击。

防御

1:最安全的方法是不接受来自不受信源的序列化对象,或使用只允许原始数据类型的序列化媒体。
2:反序列化之前,先进行严格的数据类型校验。由于校验规则容易被攻击者探索出来,进而容易被绕过,因此防御不能仅依赖这一个手段,但可以作为完整性校验防御方案的补充。
3:隔离运行那些在低特权环境中反序列化的代码。
4:对反序列化过程进行详尽的日志记录,监控反序列化过程,在发现疑似反序列化攻击时进行警报。

8.使用含有已知漏洞的组件原理:

(Using Components with Known Vulnerabilities) 应用程序(或库、框架和其他软件模块)使用已知存在漏洞的第三方组件和API,导致攻击者可以利用这些漏洞攻击应用程序。

防御

1:识别正在使用的组件和版本,包括所有的依赖。

2:更新组件或引用的库文件到最新。

3:建立安全策略来管理组件的使用。

9.不足的日志记录与监控原理:

(Insufficient Logging & Monitoring)应用程序未正确记录或监控其活动,导致攻击者可以执行未经授权的操作而不被检测。

日志记录包括登录成功记录、登录失败记录、访问控制记录等,用来记录服务器的各种信息。

防御

1:确保所有登录、访问控制失败、输入验证失败能够被记录到日志中去,并保留足够的用户上下文信息,以识别可疑或恶意帐户,并为后期取证预留足够时间。
2:建立有效的监控和告警机制,使可疑活动在可接受的时间内被发现和应对。
3:完善日志系统,使其可以监控各种日志信息。
4:及时对日志系统进行备份,并保存足够长时间。

10.敏感数据泄露

一般我们的敏感信息包括密码、财务数据、医疗数据等,由于web应用或者API未加密或不正确的保护敏感数据,这些数据极易遭到攻击者利用,攻击者可能使用这些数据来进行一些犯罪行为。

防御

1:对系统处理、存储或传输的数据分类,并根据分类进行访问控制。
2:对重要数据进行加密存放,数据在传输过程中使用密文进行传输。
3:及时清理没有用的敏感数据,只能使用指定用户访问敏感数据。

2023 top10

注入

失效的身份认证和会话管理

退出、密码管理、超时、密码找回、帐户更新等方面存在漏洞。

防御:

1、区分公共区域和受限区域。
2、对最终用户帐户使用帐户锁定策略。
3、支持密码有效期。
4、能够禁用帐户。
5、不要存储用户密码。
6、要求使用强密码。
7、不要在网络上以纯文本形式发送密码。
8、保护身份验证 Cookie。
9、使用 SSL 保护会话身份验证 Cookie。
10、对身份验证 cookie 的内容进行加密。
11、限制会话寿命。
12、避免未经授权访问会话状态。****

xss

构造恶意的html代码

直接引用不安全对象

(IDOR)允许攻击者绕过网站的身份验证机制,并通过修改指向对象链接中的参数值来直接访问目标对象资源,这类资源可以是属于其他用户的数据库条目以及服务器系统中的隐私文件等等。

服务器上的具体文件名、路径或数据库关键字等内部资源被暴露在URL或网页中,攻击者可以尝试直接访问其他资源。

防御措施:

1.使用基于用户或会话的间接对象访问,这样可防止攻击者直接攻击未授权资源
2.访问检查:对任何来自不受信源所使用的所有对象进行访问控制检查
3.避免在url或网页中直接引用内部文件名或数据库关键字
4.验证用户输入和url请求,拒绝包含./ …/的请求

5 、安全配置错误 5、安全配置错误

安全配置错误

不安全的默认配置、不完整的临时配置、开源云存储、错误的HTTP 标头配置以及包含敏感信息的详细错误信息所造成的。

攻击者能够通过未修复的漏洞、访问默认账户、不再使用的页面、未受保护的文件和目录等来取得对系统的未授权的访问或了解。

防御措施:

1、 配置所有的安全机制
2、 最小原则,关掉或限制不使用的服务
3、 更改默认账户信息
4、 使用日志和警报
5、 回显信息不显示任何与实际错误相关的信息
6、 检查和修复安全配置项

敏感信息泄露

许多web应用程序和app都无法正确保护敏感数据,攻击者可以通过窃取或修改未加密的数据来实施信用卡诈骗、身份盗窃或其他犯罪行为。未加密的敏感数据容易受到破坏,因此,我们需要对敏感数据加密,这些数据包括:传输过程中的数据、存储的数据以及浏览器的交互数据。

1、手工挖掘,查看web容器或网页源码代码,可能存在敏感信息。比如访问url下的目录,直接列出了目录下的文件列表,错误的报错信息包含了网站的信息。
2、工具挖掘,像爬虫之类的工具可以扫描到敏感文件路径,从而找到敏感数据。

防御

1、 对系统处理、存储或传输的数据进行分类,根据分类进行访问控制。
2、 对用户敏感信息的传输和存储进行加密
3、 强化安全意识

缺少功能级的访问控制

大多数Web应用程序的功能在UI页面显示之前,会验证功能级别的访问权限。但是,应用程序需要在每个功能被访问时在服务器端执行相同的访问控制检查。如果请求没有被验证,攻击者能够伪造请求从而在未经适当授权时访问功能。

防御

1、 设计严格的权限控制系统,对于每个请求和URL都要进行校验和权限确认,防止非法请求被执行
2、 对于每个功能的访问,都要有明确的角色授权,采用过滤器的方式校验每个请求的合法性
3、 实现Web访问的IP白名单列表,禁止不可信的IP访问Web系统

csrf

借助受害者的登录身份,向网站发送不安全请求。

防御手段:

1、验证 HTTP Referer 字段。
根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。
2、在请求地址中添加 token 并验证
在HTTP请求中以参数的形式加入一个随机产生的token(随机字符串),并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。
3、二次验证
在转账等关键操作之前提供当前用户的密码或者验证码。二次验证可以有效防御CSRF 攻击。

使用含有已知漏洞的组件

未验证的重定向和转发

重定向是服务端根据逻辑,发送一个状态码(通常为3xx),告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL。(重定向是在客户端完成的)
转发:
转发是在服务器内部将请求转发给另一个资源,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,因为这个跳转过程是在服务器实现的,并不是在客户端实现的所以客户端并不知道这个跳转动作,所以它的地址栏还是原来的地址。(转发是在服务器端完成的)

csrf

攻击者利用受害者在已认证的会话中的身份,以伪造的方式向目标网站发送恶意请求,使目标网站执行攻击者所期望的操作。

危害:未经授权的操作(如修改密码、发送消息)、数据损坏或篡改、恶意应用程序安装、账户劫持等。

防护:token,同源检查、referer

未经验证的重定向和转发

导致攻击者能够构造恶意的重定向或转发链接,将用户重定向到恶意网站或执行未经授权的操作。

危害:

  • 用户被重定向到恶意网站:攻击者可以伪装成合法的网站,引诱用户点击恶意链接,从而导致用户暴露于各种网络攻击中,如钓鱼、恶意软件下载等。
  • 用户凭证被窃取:通过将用户重定向到恶意网站并伪造登录页面,攻击者可以窃取用户的凭证信息,例如用户名、密码等。
  • 跨站脚本攻击(XSS):攻击者可以构造恶意的重定向链接,从而在目标网站上执行跨站脚本攻击,获取用户敏感信息或篡改网页内容。

防护措施:

  • 对重定向和转发目标进行验证:在应用程序中,对跳转链接的目标进行验证,确保跳转目标是受信任的、合法的网址。
  • 使用白名单验证:限制重定向和转发目标,只允许跳转到事先定义的受信任的网址列表上。
  • 避免在URL参数中传递敏感信息:尽量避免将敏感信息(如会话标识)放在跳转链接的URL参数中,以减少被攻击者利用的风险。
  • 对重定向和转发链接进行编码:在生成跳转链接时,对URL参数进行编码,防止攻击者利用特殊字符构造恶意链接。
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2023-2025 是羽泪云诶
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信