当前位置: 首页 > news >正文

OWASP Top 10漏洞解析(3)- A3:Injection 注入攻击

作者:gentle_zhou

原文链接:OWASP Top 10漏洞解析(3)- A3:Injection 注入攻击-云社区-华为云


Web应用程序安全一直是一个重要的话题,它不但关系到网络用户的隐私,财产,而且关系着用户对程序的新人。随着Web应用程序功能持续增加,复杂性不断提高,这些程序也面临着越来越多的安全威胁和挑战。

为了帮助这些应用程序的开发团队和安全人员了解和防范这些威胁,提高安全意识,编写更安全的代码,OWASP(Open Web Application Security Project,开放式Web应用程序安全项目)发布了一份标准指南,称为OWASP Top 10。

这是一份关于Web应用程序安全风险的标准指南,它基于全球范围内的安全专家和数据提供者的共识,列出了当前最严重、最关键的10种Web应用程序安全风险,并提供了相应的防范措施和建议。OWASP Top10 每隔几年会更新一次(目前已经发布了六个版本,分别是2004年、2007年、2010年、2013年、2017年和2021年),最新的版本是在2021年发布的OWASP Top10:2021。

已解析的OWASP漏洞

  1. OWASP Top 10漏洞解析(1)- A1:Broken Access Control 访问控制失效:OWASP Top 10漏洞解析(1)- A1:Broken Access Control 访问控制失效-云社区-华为云
  2. OWASP Top 10漏洞解析(2)- A2:Cryptographic Failures 加密机制失效:OWASP Top 10漏洞解析(2)- A2:Cryptographic Failures 加密机制失效-云社区-华为云

“注入攻击”缺陷详情

今天,就来为大家讲解其中的第三条缺陷:Injection 注入攻击,它从2017年版本下滑到2021年版本的第三位。

image.png

注入攻击是一种网络安全威胁,它利用了应用程序对用户输入的数据没有进行充分的验证,从而导致恶意数据被当作代码来执行产生的漏洞;其目的通常是获取程序内敏感信息、执行非法操作、破坏系统功能或完整性等。注入攻击可以影响各种类型的应用程序,包括Web应用、数据库应用、命令行应用等。

注入攻击的本质是程序内违反了数据与代码分离的原则,即用户输入的数据被拼接到原本要执行的代码中,从而改变了代码的语义或结构。

注入攻击发生的两个关键条件是:

  1. 用户可以控制输入数据
  2. 代码拼接了用户输入的数据,并带入程序中去执行

94%的应用程序会被某种类型的注入攻击所测试,一共最高发生27.4万次,其中成功概率最高达19%,平均达3%。这里值得注意的是,一些经典有名的CWE缺陷中,就包括该缺陷,比如CWE-89:Improper Neutralization of Special Elements used in an SQL Command SQL注入攻击,CWE-77 Improper Neutralization of Special Elements used in a Command 命令注入攻击,CWE-79 Improper Neutralization of Input During Web Page Generation 跨网站脚本攻击。

常见的注入攻击缺陷类型

一个应用程序在如下场景下容易被该缺陷攻击:

  • 应用程式未验证、过滤或清理用户提供的数据
  • 在interpreter解释器中未直接使用上下文感知转义的动态查询或非参数化调用
  • Hostile data恶意数据在对象关系映射(ORM)搜索参数中使用,用来提取额外的敏感记录
  • Hostile data恶意数据被直接使用或被连接。SQL或命令包含了动态查询、命令或存储过程中的结构和恶意数据。

一些常见的注入攻击包括SQL, NoSQL, OS 命令,对象关系映射(ORM),LDAP,以及表达式语言(EL)或对象图像导航库(OGNL)注入。这个概念在所有的解释器都是相同的。如果应用程序存在注入攻击的弱点,源码检查是最好的方式,强烈建议对所有输入的参数、标头、URL、cookies、JSON、SOAP 以及 XML 的资料进行自动化测试。组织可以将静态源码测试(SAST),动态应用检测(DAST)工具,交互式应用安全测试(IAST),融入到CI/CD流水线中,以达到在上线部署前能识别注入攻击缺陷的目的。

如何防止该缺陷的发生

如何防止该缺陷的发生,也很简单,我们只需要将数据和命令以及查询分割开来:

  • 首选项就是使用安全的API,避免完全使用解释器(interpreter),提供一个参数化的界面或则将API融合到对象关系映射(ORM)工具中去。注意:即使已经参数化了,在储存的程序中仍然有可能引入SQL注入攻击,如果用户是通过PL/SQL 或 T-SQL 来连接查询和数据,或则通过使用EXECUTE IMMEDIATE 或 exec() 来执行恶意数据。
  • 使用正面的服务端输入验证。这其实不是一个完整的防御,因为许多应用程序需要特殊的字符,比如文本区域或则移动应用程序的API。
  • 对于任何有残差的动态查询,使用该解释器的特定转义语法来转义特殊字符。注意:SQL结构(比如表名、列名等)不能转义,因此用户提供的结构名是危险的,这可以说是报告编写软件中常见的问题。
  • 在查询中使用LIMIT 以及 其他SQL控制,用来防止遭遇SQL注入攻击时,记录被大量泄露。

举个栗子

场景1

一个应用程序中,使用了下方这样易受攻击的SQL调用构造,并且在其中使用了不受信任的数据:
String query = "SELECT \* FROM accounts WHERE custID='" + request.getParameter("id") + "'";

场景2

类似地,应用程序对其中使用的框架的盲目信任,可能会导致查询容易受到攻击;比如,HQL Hibernate 查询语言:
Query HQLQuery = session.createQuery("FROM accounts WHERE custID='" + request.getParameter("id") + "'");

在上面两种情况下,攻击者可以通过修改浏览器中的“id”参数值来发送: ‘UNION SLEEP(10);’. 比如说这样:
http://example.com/app/accountView?id=' UNION SELECT SLEEP(10)

这将改变这两个查询原本的含义,将会返回帐户表中的所有记录。更危险的攻击可能会修改或删除数据,甚至调用存储过程。

参考链接

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

相关文章:

OWASP Top 10漏洞解析(3)- A3:Injection 注入攻击

作者:gentle_zhou 原文链接:OWASP Top 10漏洞解析(3)- A3:Injection 注入攻击-云社区-华为云 Web应用程序安全一直是一个重要的话题,它不但关系到网络用户的隐私,财产,而且关系着用户对程序的新…...

Java自定义类加载器的详解与步骤

自定义类加载器的步骤 继承ClassLoader类:首先创建一个新的类,该类需要继承ClassLoader类。可以通过直接继承ClassLoader或是间接继承URLClassLoader等子类来实现。重写findClass()方法:在自定义类加载器中,最重要的是重写findCl…...

完美清晰,炫酷畅享——Perfectly Clear Video为你带来卓越的AI视频增强体验

在我们日常生活中,我们经常会拍摄和观看各种视频内容,无论是旅行记录、家庭聚会还是商务演示,我们都希望能够呈现出最清晰、最精彩的画面效果。而现在,有一个强大的工具可以帮助我们实现这一目标,那就是Perfectly Clea…...

如何让FileBeat支持http的output插件

目录 1 缘由2 编译filebeat3 配置虚拟机访问外网4 编译beats-output-http4.1 使用本地包4.2 发布在线包 5 测试6 beats-output-http的部分解释 1 缘由 官网的filebeat只有以下几种output插件: Elasticsearch ServiceElasticsearchLogstashKafkaRedisFileConsole …...

解密人工智能:决策树 | 随机森林 | 朴素贝叶斯

文章目录 一、机器学习算法简介1.1 机器学习算法包含的两个步骤1.2 机器学习算法的分类 二、决策树2.1 优点2.2 缺点 三、随机森林四、Naive Bayes(朴素贝叶斯)五、结语 一、机器学习算法简介 机器学习算法是一种基于数据和经验的算法,通过对…...

web:[极客大挑战 2019]BabySQL

题目 点进页面显示如下 查看源代码 先尝试一下万能密码 没用,or被过滤了 试着双写看看 回显一串,也不是flag 先查询列数尝试一下,把union select过滤了,使用双写 构造payload /check.php?usernameadmin&password1 %27 ununi…...

DRM全解析 —— plane详解(1)

本文参考以下博文: Linux内核4.14版本——drm框架分析(5)——plane分析 特此致谢! 1. 简介 一个plane代表一个image layer(硬件图层),最终的image由一个或者多个plane(s)组成。plane和 Framebuffer 一样是内存地址。…...

数据结构总结

数据结构 相关博文 单链表数组模拟单链表-CSDN博客双链表数组模拟双链表-CSDN博客栈及单调栈数组模拟栈以及单调栈-CSDN博客队列及单调队列数组模拟队列以及单调队列-CSDN博客KMPKMP详细算法思路-CSDN博客TrieTire树的理解-CSDN博客并查集并查集(面试常考&#xff…...

在SOLIDWORKS搭建一个简易的履带式机器人

文章目录 前言一、构建模型基本单元二、搭建车体模块三.插入轮子4.构建履带 前言 趁着十一假期,在solidworks中搭建了一个履带式机器人小车,计划将其应用在gazebo中完成多机器人编队的仿真。 一、构建模型基本单元 构建底板(a面&#xff09…...

C# 为什么要限制静态方法的使用

前言 在工作了一年多之后,我发现静态方法的耦合问题实在是头疼。如果可以尽量不要使用静态方法存储数据,如果要存储全局数据就把数据放在最顶层的主函数里面。 静态方法问题 耦合问题,不要用静态方法存储数据 我这里有两个静态方法&#…...

【已解决】Pyecharts折线图,只有坐标轴没有折线数据

【已解决】Pyecharts折线图,只有坐标轴没有折线数据 1、问题复现2、原因3、问题解决 1、问题复现 在做简单的数据通过 Pyecharts 生成折现图的时候,一直只有坐标轴没有折线数据,但是代码一直看不出问题,代码如下: im…...

win10搭建Selenium环境+java+IDEA(3)

这里主要对前面的maven和selenium做补充说明,以及更新一些pom文件下载依赖的问题。 IDEA里面,如果你创建的工程是maven工程文件,那么就会有一个pom.xml文件,可以在这个网站:https://mvnrepository.com/搜索依赖&#…...

String 、Stringbuffer、StringBuilder区别

上代码 public class Test {public static void main(String[] args) {//String 连接10000次消耗1127ms//StringBuffer 连接10000次消耗5ms//StringBuilder 连接10000次消耗3msStringTest(10000);StringBufferTest(10000);StringBuilderTest(10000);}public static void Strin…...

如何提升爬虫IP使用效率?精打细算的方法分享

在进行爬虫数据采集时,爬虫IP是不可或缺的工具。然而,爬虫IP的费用可能是一个爬虫项目的重要开支之一。为了帮助您节省爬虫IP经费,本文将分享一些经济高效的方法,让您在使用爬虫IP时更加节约成本,提高经济效益。 一、优…...

(高阶) Redis 7 第19讲 缓存过期淘汰策略 大厂篇

🌹 以下分享 Redis 缓存淘汰策略,如有问题请指教。🌹🌹 如你对技术也感兴趣,欢迎交流。🌹🌹🌹 如有对阁下帮助,请👍点赞💖收藏🐱‍🏍分享😀 面试题 1. 生产上,redis内存设置的多少 2. 如何配置、修改Redis 内存大小 3. 如果内存满了,如何处理 4. …...

【四旋翼飞行器】模拟四旋翼飞行器的平移和旋转动力学(Simulink仿真实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

Kaggle - LLM Science Exam(一):赛事概述、数据收集、BERT Baseline

文章目录 一、赛事概述1.1 OpenBookQA Dataset1.2 比赛背景1.3 评估方法和代码要求1.4 比赛数据集1.5 优秀notebook 二、BERT Baseline2.1 数据预处理2.2 定义data_collator2.3 加载模型,配置trainer并训练2.4 预测结果并提交2.5 deberta-v3-large 1k Wiki&#xff…...

mmap底层驱动实现(remap_pfn_range函数)

mmap底层驱动实现 myfb.c&#xff08;申请了128K空间&#xff09; #include <linux/init.h> #include <linux/tty.h> #include <linux/device.h> #include <linux/export.h> #include <linux/types.h> #include <linux/module.h> #inclu…...

品牌如何查窜货

当渠道中的产品出现不按规定区域销售时&#xff0c;这种行为就叫做窜货&#xff0c;窜货不仅会扰乱渠道的健康发展&#xff0c;损害经销商的利益&#xff0c;同时会滋生低价、假货的发生&#xff0c;有效的管控窜货&#xff0c;需要品牌先将窜货链店铺找出来&#xff0c;才能进…...

Java基于SpringBoot的车辆充电桩

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1、效果演示效果图 技术栈2、 前言介绍&#xff08;完整源码请私聊&#xff09;3、主要技术3.4.1…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...