网站常见安全漏洞 | 青训营

91 阅读6分钟

网站基本组成及漏洞定义

一个网站的基本构成

一个网站的基本构成可以分为前端、网关、后端以及前后端交互部分。

前端

前端负责用户界面的呈现,通常使用 JavaScript、Vue、React 等来构建交互式页面。

网关

网关是位于客户端和服务器之间的中间层,用于负载均衡、反向代理、安全过滤等。常见的网关是 Nginx,它可以处理客户端的请求并将其转发到后端服务器。

后端

后端处理来自前端的请求,与数据库交互并执行业务逻辑。常见的后端编程语言包括 Go、Java、Node.js 等。

前后端交互

前后端之间通过协议进行通信,其中常见的包括 HTTP 和 WebSocket。 HTTP 用于常规的请求和响应,用于获取页面内容、发送表单数据等。 WebSocket 则允许双向实时通信,适用于需要持续更新的应用,如实时聊天。

一些我们经常听到的安全事件

在过去的几年中,我们经常听到一些大型网站的安全事件,比如学习通数据泄露,又或者是西工大被境外 APT 组织攻击。

网站攻击者及意图

网站攻击者的意图可以根据不同目的进行分类,包括但不限于以下几种类型:

  1. 政治目的: 攻击者可能是政治动机驱使下的黑客或组织,他们可能试图破坏政府机构、国际组织、媒体等的网站,窃取关键系统的机密数据,破坏关键系统正常运行。

  2. 经济目的: 一些攻击者可能是为了经济利益而进行攻击,攻击者通过网站漏洞违法获取数据并进行售卖,或者是通过勒索加密软件获取赎金。

  3. 竞争目的: 竞争对手试图通过攻击同类厂商的网站来获取竞争优势,比如让对方的站点无法运行。

  4. 炫技、泄愤: 一些攻击者为了显示自己的技术能力、获取虚荣感或发泄不满,去对一些特定目标进行攻击。

漏洞的分类

根据服务端(后端)和客户端(浏览器端)来区分,常见网站漏洞可以分为以下几类:

服务端漏洞:

  1. 第三方组件漏洞

  2. SQL 注入

  3. 命令执行

  4. 越权漏洞

  5. SSRF

  6. 文件上传漏洞

客户端漏洞:

  1. 开放重定向

  2. XSS

  3. CSRF

  4. 点击劫持(clickjacking)

  5. CORS跨域配置错误

  6. WebSocket

服务端漏洞介绍

第三方组件漏洞

许多网站使用第三方组件来增加功能,但如果使用了不安全的组件,就有可能为自己的网站引入了漏洞。常见的例子比如 Apche log4j 远程代码执行漏洞以及 Fastjson 反序列化漏洞。

  1. Apche log4j 远程代码执行漏洞:Log4j 是一个 Java 应用程序中常用的日志框架。攻击者可以通过构造一个特殊的日志消息,其中包含恶意代码,然后发送这个日志消息到使用 Log4j 的应用。Log4j 在处理这个恶意消息时,会解析并执行其中的恶意代码,导致攻击者可以远程执行任意命令或代码,甚至完全控制服务器。

  2. Fastjson 反序列化漏洞:Fastjson 是一个用于在 Java 应用中处理 JSON 数据的库。Fastjson 在处理来自外部的 JSON 数据时,可能存在反序列化漏洞。攻击者可以构造一个特殊的恶意 JSON 数据,其中包含经过精心设计的恶意代码。当应用尝试将这个恶意 JSON 数据反序列化为 Java 对象时,恶意代码会被执行,可能导致服务器被入侵或数据泄露。

SQL 注入

假如网站上有登录功能,用户可以输入用户名和密码,网站将构造好的未经过滤的 SQL 语句发给数据库,如果其中包含恶意的 SQL 代码,将导致数据库执行恶意操作。例如,攻击者可以输入 a' OR 1=1#,闭合前面的 SQL 语句,注释后面的 SQL 语句,返回数据库中的所有记录。

命令执行

假设代码中遇到需要调用某个命令才能完成的功能时候,会涉及到命令拼接,如果命令拼接没有做好安全过滤,攻击者可以输入恶意命令。

越权漏洞

比如一个学生在线提交作业的网站,由于一些接口没有鉴权,导致学生可以直接通过修改给接口传递的参数来访问其他学生的作业,或者学生可以访问其他课程的内容,甚至让学生可以以老师的身份修改作业内容、截止时间、分数等。

SSRF

假设网站允许用户提供一个链接,然后服务器从该链接获取内容并显示在页面上。如果没有适当验证输入,攻击者可以提供指向内部网络的链接,获取内部敏感信息。例如,攻击者可以提供一个链接,让服务器访问内部数据库,泄露数据。

文件上传漏洞

假设网站允许用户上传文件,例如头像图片或者是简历文档。如果没有适当的文件类型验证和安全检查,攻击者可以上传恶意的可执行文件,然后通过访问该文件执行恶意代码,从而控制服务器。

客户端漏洞介绍

开放重定向

如果网站有一个登录后跳转功能,攻击者可以构造一个恶意链接,将用户重定向到一个伪装成合法网站的恶意网站,诱使用户输入敏感信息。例如,攻击者可以构造一个链接:https://example.com/login?redirect=https://malicious-site.com.

XSS

假设一个论坛允许用户在评论中插入 HTML。如果没有适当的过滤,攻击者可以插入恶意脚本,比如<script>alert(1);</script>或者是<script>alert(document.cookie);</script>,当其他用户浏览该页面时,恶意脚本会在其浏览器中执行。

CSRF

考虑一个网站上有一个功能,用户可以通过链接来更改密码。如果没有适当的防范措施,攻击者可以构造一个页面,其中包含自动提交的表单,使用户在不知情的情况下更改密码。攻击者可以通过电子邮件或社交媒体诱使用户点击该链接。

点击劫持(clickjacking)

攻击者可以在一个透明的覆盖层下隐藏一个有诱惑力的按钮,诱使用户在不知情的情况下点击隐藏按钮。例如,攻击者可以将一个隐藏的 "赞" 按钮放在一个看似有趣的视频下方,当用户点击视频时,实际上点击了隐藏的 "赞" 按钮。

CORS 跨域配置错误

假设一个网站通过 AJAX 请求从另一个域获取数据。如果没有正确配置 CORS,攻击者可以在自己的网站上设置恶意页面,通过 JavaScript 请求用户的数据,然后将数据发送到攻击者的服务器。

WebSocket

WebSocket 是一个用于实时通信的协议。如果没有适当的安全措施,攻击者可以利用 WebSocket 连接进行恶意通信,例如发送恶意数据包或执行一些未经授权的操作。