Web安全系列——注入攻击

news2024/11/28 13:48:22

文章首发公众号: 海天二路搬砖工

前言

在Web应用程序开发中,防SQL注入最基本的安全防护要求了。其实除了SQL注入, 还有很多其他的注入攻击方式。注入攻击是最常见的Web应用攻击方式之一。

本文将介绍注入攻击的概念、种类、原理,以及如何防护。

什么是注入攻击

注入攻击是指攻击者在应用程序接收用户输入的地方注入自己精心构造的攻击代码,以达到执行任意操作、篡改数据或者获取敏感信息的目的。

注入攻击

注入攻击是 Web 应用程序中最常见的攻击类型之一,攻击成功将导致应用程序的机密性、完整性和可用性等方面的风险。

注入攻击的种类

常见的注入攻击类型包括 :

  • SQL 注入: 通过在 SQL 语句中注入恶意代码来执行不受信任的操作,以获取敏感数据或者篡改数据。
  • 命令注入: 攻击者将能够执行不受信任的操作的命令注入到应用程序中。
  • LDAP 注入: 利用 LDAP 查询中的漏洞来获取敏感信息或者更改应用程序的行为。
  • OS 注入: 利用操作系统的漏洞,向服务器输入不受信任的数据,以利用操作系统上的缺陷来执行可疑操作。
  • XML 注入: 利用 XML 编辑器中的漏洞创建恶意 XML 代码的攻击

SQL注入

什么是SQL注入攻击

SQL注入是指攻击者在应用程序接收输入参数的地方注入了恶意SQL语句,以达到获取敏感数据或者篡改数据的目的。

Web应用程序中,用户的输入经常会作为数据库的查询条件,填充到SQL语句中。

SQL注入攻击

举个栗子:

假设有一个登录表单,用户可以通过输入用户名和密码来登录系统。

正常的 SQL 命令可能如下所示:

SELECT * FROM users WHERE username = 'Windeal' AND password = '123456'

如果说密码 123456 是一个错误密码,那么用户就会登录失败。

但是,攻击者可能会在用户名参数中注入恶意代码 “’ OR 1=1”,例如:

SELECT * FROM users WHERE username = 'Windeal' OR 1=1--' AND password = 'mypassword'

如此一来,尽管密码是错误的,攻击者成功地利用 SQL 注入来绕过了登录验证(查询语句重点密码校验部分被注释掉了)。

SQL注入攻击的常见类型/方法

以下是一些常见的SQL注入攻击类型:

  1. 基于错误信息的 SQL 注入

错误型 SQL 注入常见于应用程序的错误消息中。攻击者可以通过修改 SQL 命令的格式,导致应用程序产生错误,错误消息中包含关于应用程序所使用的后端数据库的敏感信息。

  1. 基于时间延迟注入

攻击者使用时间敏感的 SQL 命令来判断注入的 SQL 语句是否执行成功,从而提高自己注入的成功率。攻击者通过向所写入的 SQL 语句添加时间延迟,来判断结果是否符合他们的期望,以便进一步利用所攻占的应用程序和服务器资源。

  1. 盲注

盲注是指攻击者不能直接看到所注入的响应信息,通常使用布尔盲注和时间盲注来动态检测数据的恶意代码。

  1. 联合查询注入

联合查询注入是在一个 SQL 查询中执行两个或多个数据库查询的技术。攻击者通常使用 UNION SELECT 命令向 SQL 查询中添加新的查询语句。这种注入方式可以将两个或多个表的数据合并到一个响应中,攻击者可以访问应用程序不会返回的数据。

  1. 存储过程注入

存储过程是一种预编译的 SQL 代码块,可以在一个事务中执行。攻击者可以使用存储过程注入来注入 SQL 命令并在数据库中执行恶意代码,以执行未授权的活动和/或下载其他恶意代码。

  1. 基于堆叠查询的注入

堆叠查询允许在一个请求中执行多个查询。攻击者可能会使用堆叠查询注入技术来执行跨数据库服务器的查询命令,从而操纵应用程序中的数据。

SQL注入攻击的预防和防范

  1. 入参强校验:

    服务后端对所有接收到的请求参数进行参数强校验,严格限时入参的长度、格式、是否是否包含非法字符。

  2. 参数化查询:

    使用参数化查询和预编译语句而不是字符串连接来提高应用程序的安全性。

  3. 限制数据库和表访问:

    为了限制用户和应用程序的访问权限,应用程序开发者和管理员应该为数据库用户分配最小的用户权限。将明文数据报告的能力限制在不影响应用程序正常运行的前提下。

  4. 限制运行时间

    限制(降低)请求的最大运行时间,避免攻击者根据响应时间来推测后台运行逻辑。

  5. 不提供过于详细的错误消息:

    错误消息的详细程度会向攻击者提供有关应用程序所使用的数据库平台的绝大部分信息。

  6. 多层防御措施:

    使用 Web 应用程序防火墙、注入扫描预防工具和定期代码审计等方法来设置多层防御措施。

  7. 强制减少 SQL 数据库的功能集:

    尽可能减少数据库的功能集,可以有效地减少潜在攻击的面。例如启用只读模式,关闭会话管理,强制值验证等。

其他注入攻击

命令注入

定义:

命令注入是一种类似于 SQL 注入的攻击方式。攻击者通过向应用程序输入一个操作系统命令的特定字符串,或通过摄取特定的应用程序安全补丁以绕过对输入进行的安全检查来实现。

原理:

攻击者通过输入操作系统命令或 shell 脚本的 payload 来注入恶意代码,例如添加删除、保存到磁盘、操纵文件系统和执行任意代码等。这些攻击可以通过许多短时间的输入字段和API或通过常规执行的 shell 命令执行。

示例:

假设我们提供一个搜索功能,底层是通过grep命令来查看文件系统中是否存在某个字符串。

如果我们再搜索框中注入系统命令,填入

searchterm | rm /f /

则服务器执行可能变为

grep searchterm | rm /f /

从而导致服务器上的文件被删除。

预防与防护:

为了有效预防和防护命令注入攻击,可以采用以下措施:

  1. 输入数据的验证和过滤
  2. 应用安全补丁和强化用户口令
  3. 对执行授权进行访问控制
  4. 建立客户端和服务端的双向认证机制
  5. 尽可能的规范化和限制应用程序的接口。

LDAP注入

定义:

LDAP注入是一种攻击方式,攻击者通过向LDAP查询中注入恶意数据或LDAP过滤器,来实现访问悄悄话的目的。

原理:

攻击者将特制的数据输入到LDAP查询或过滤器中,模拟正常LDAP查询操作,但当查询完成时,攻击者恶意数据被LDAP服务显示出来,从而导致安全问题的发生。

预防与防护:

LDAP注入攻击可以通过以下措施加以防护和预防,例如:

  1. 尽可能的规范和限制客户端和服务端接口
  2. 限制LDAP帐户的访问授权
  3. 对输入数据进行验证和过滤
  4. 应用安全补丁和监视系统日志
  5. 对询问访问进行授权和访问控制。

OS 注入:

定义:

OS命令注入是一种类型的攻击方式,攻击者通过将一系列恶意输入注入到一个之前预期只有数据输入的地方来实现向操作系统(OS)发送命令。

原理:

攻击者通过在 OS 命令的 payload 中注入恶意数据和命令访问权限,来执行不希望被操作系统或应用程序所记录的恶意行为,例如添加、删除、修改、操纵文件系统和直接执行任意代码等。

预防与防护:

为了防止 OS 命令注入攻击,可以采用以下方案:

  1. 验证所有的数据输入
  2. 应用安全补丁和规范化处理所有的输入
  3. 限制用户和关联服务帐户的访问性和权限
  4. 在 API 级别上加入健壮的验证机制
  5. 建立健康的安全意识和教育计划,使人员更加关注安全风险并采取相应措施。

XML 注入:

定义:

XML 注入攻击是指攻击者利用 XML 解析器漏洞,在 XML 数据输入和解析过程中注入恶意代码,进而达到攻击的目的。

原理:

攻击者通过向不受信任的 XML 数据输入中注入恶意的 XML 或 XML 文件格式数据来利用 XML 注入漏洞,或利用 XPath 的逻辑查询操作实现特定的筛选操作,结果导致解析器无法正确识别恶意代码,从而执行恶意操作。

示例:
以下是一个简单的示例,演示了如何进行XML注入攻击:

假设一个应用程序接受用户提供的XML数据,并使用这些数据生成HTML输出。攻击者可以提供以下恶意XML数据:

<user>
  <name>John</name>
  <role>Admin</role>
  <script>alert('XSS Attack')</script>
</user>

如果应用程序不正确地处理输入,它可能会将这个恶意XML数据插入到HTML输出中,导致XSS(跨站脚本)攻击。攻击者的恶意脚本会在用户的浏览器中执行。

预防与防护:

为了有效预防和防护 XML 注入攻击,可以采用以下方案:

  1. 对所有输入数据进行验证和过滤控制
  2. 对所有的应用程序和接入数据库元素进行严密的控制和访问认证
  3. 使用工具扫描管理可能存在的安全漏洞
  4. 对 XML 文档进行限制和规范化处理,避免恶意代码的注入
  5. 启用应用程序防火墙等操作系统级别的安全机制以及专属 XML 过滤解析器等技术措施来加固、增强 XML 的安全性。

附录

我的公众号

我的二维码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1160202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

删除链表的倒数第n个节点(C++解法)

题目 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[]示例 3&#…

Linux 服务器 Oracle19C安装

原文:【精选】Oracle | CentOS7安装Oracle19c数据库(RPM包)_oracle-database-preinstall-19c-1.0-1.el7.x86_64.rp_Thorolds Deer的博客-CSDN博客 下载 第一个软件包:Oracle Database 19c Download for Linux x86-64 第二个包:Oracle Linux 7 (x86_64) Latest | Oracle,…

【Springboot】集成Swagger

引入依赖 <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version> </dependency> 浏览器 启动项目后 在浏览器中输入地址 localhost:端口号/swagger-ui/ 使…

Android各版本对应的SDK及JDK版本要求

1、Android Gradle 插件版本说明 | Android 开发者 | Android Developers 2、 3、Android Gradle 插件 7.3.0&#xff08;2022 年 9 月&#xff09; | Android 开发者 | Android Developers 4、 5、参考 Android中Gradle版本和Gradle插件版本 - 简书

深度学习实战:基于TensorFlow与OpenCV的手语识别系统

文章目录 写在前面基于TensorFlow与OpenCV的手语识别系统安装环境一、导入工具库二、导入数据集三、数据预处理四、训练模型基于CNN基于LeNet5基于ResNet50 五、模型预测基于OpenCV 写在后面 写在前面 本期内容&#xff1a;基于TensorFlow与OpenCV的手语识别系统 实验环境&…

物联网AI MicroPython传感器学习 之 MFRC522 RFID射频IC卡感应模块

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 MFRC522是应用于13.56MHz非接触式通信中高集成度的读写卡芯片&#xff0c;其特点低电压、低成本、体积小的非接触式读写芯片。MFRC522支持MIFARE系列更高速的非接触式通信&#xff0c;双向数据…

如何理解傅里叶变换?

当提到什么是傅里叶变换&#xff1f; 大家的回答一般是&#xff1a;将信号从时域转化到频域&#xff1f; 那为什么要转换到频域呢&#xff1f; 因为在频域可将一些信号分离。 为什么转换到频域就可分离呢&#xff1f;好像不会回答了。 实际上&#xff0c;从线性代数的角度…

Spring面试题:(二)基于xml方式的Spring配置

xml配置Bean的常见属性 id属性 name属性 scope属性 lazy-init属性 init-method属性和destroy属性 initializingBean方法 Bean实例化方式 ApplicationContext底层调用BeanFactory创建Bean&#xff0c;BeanFactory可以利用反射机制调用构造方法实例化Bean&#xff0c;也可采用工…

【嵌入式开发学习】__改了一行代码,数组遍历耗时从10.3秒降到了0.5秒!

目录 前言 两个简单的测试程序 1. array1.c 对数组按行进行访问 2. array2.c 对数组按列进行访问 ​编辑 3. 编译运行&#xff0c;并用 time 命令统计一下运行时间&#xff1a; 重要说明 存储金字塔 局部性原理 1. 时间局部性 2. 空间局部性 高速缓存 - Cache Cache…

Word 将文档中的【第几条】批量加粗

目录预览 一、问题描述二、解决方案三、参考链接 一、问题描述 我要制作一份文档&#xff0c;关于法律条文的&#xff0c;然后需要将条文中的【第几条】字样进行加粗表示&#xff0c;格式刷是不可能格式刷的&#xff0c;这明显不适合此种批量的操作&#xff0c;浪费事件。所以…

matplotlib入门-基金走势图

一、matplotlib简介 matplotlib是一个Python 2D绘图库&#xff0c;开发者仅需要几行代码就可以生成曲线图、柱状图、散点图甚至动画。需要另外安装&#xff0c;一条命令搞定。 pip install matplotlib 它的绘图接口在matplotlib.pyplot模块中&#xff0c;pyplot提供和MATLIB…

Java while 和do while 循环

循环是程序中的重要流程结构之一。循环语句能够使程序代码重复执行&#xff0c;适用于需要重复一段代码直到满足特定条件为止的情况。 所有流行的编程语言中都有循环语句。Java 中采用的循环语句与C语言中的循环语句相似&#xff0c;主要有 while、do-while 和 for。 另外 Ja…

Hugging Face LLM部署大语言模型到亚马逊云科技Amazon SageMaker推理示例

本篇文章主要介绍如何使用新的Hugging Face LLM推理容器将开源LLMs&#xff0c;比如BLOOM大型语言模型部署到亚马逊云科技Amazon SageMaker进行推理的示例。我们将部署12B Open Assistant Model&#xff0c;这是一款由开放助手计划训练的开源Chat LLM。 这个示例包括&#xff1…

AI:45-基于深度学习的声纹识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…

腾讯云双十一云服务器大促活动:云服务器特惠信息汇总!

优惠概述 在腾讯云双十一活动中&#xff0c;轻量应用服务器推出了三款享受特惠优惠的选项&#xff0c;分别是2核2G、2核4G和4核8G。这三款服务器的价格分别为88元/年、166.6元/年和529元/15个月。此外&#xff0c;腾讯云还推出了一次性购买3年服务器的特别优惠活动&#xff0c…

乐器玩具微信商城小程序制作:简单几步的秘诀

在当今的数字化时代&#xff0c;网络购物已成为人们生活中不可或缺的一部分。而微信商城小程序作为一种便捷的购物方式&#xff0c;正逐渐受到越来越多人的青睐。如果你是一位乐器玩具商家&#xff0c;那么制作一个乐器玩具微信商城小程序将是一个非常不错的选择。本文将指导你…

《 博弈论教程(罗云峰版) 》——习题一答案

前言 博弈论这门课程&#xff0c;我们主要参考的教材是《博弈论教程&#xff08;罗云峰版&#xff09;》&#xff0c;但是罗老师的课后习题并没有给出完整的答案&#xff0c;秉着学习的态度&#xff0c;本人结合教材和 PPT 在这里给出课后习题的答案。 由于我们只学了完全信息静…

全开源抖音快手微信取图小程序源码

全开源抖音快手微信很火爆的取图小程序源码&#xff0c;可以给人别人搭建&#xff0c;也可以自己做&#xff1b;对接流量主&#xff0c;收益很可观。 下载地址&#xff1a;https://bbs.csdn.net/topics/617502419

TCP 协议

文章目录 协议格式1面向连接:1.1三次握手&#xff08;建立连接&#xff09;1.2包序管理1.2四次挥手&#xff08;断开连接&#xff09; 2可靠传输:一。保证数据可靠有序的到达对端:确认应答机制超时重传机制 二。提高传输效率:1.提升自身发送数据量滑动窗口机制 rwnd滑动窗口丢包…

Android应用集成RabbitMQ消息处理指南

Android应用集成RabbitMQ消息处理指南 RabbitMQ1、前言2、RabbitMQ简介2.1、什么是RabbitMQ2.2、RabbitMQ的特点2.3、RabbitMQ的工作原理2.4、RabbitMQ中几个重要的概念 3、在Android Studio中集成RabbitMQ3.1、在Manifest中添加权限&#xff1a;3.2、在build.gradle(:app)下添…