网络安全筑基篇——SQL注入

目录

前言

什么是SQL?

什么是SQL注入?

SQL注入的危害有哪些?

SQL注入有哪些类型?

SQL注入的一些思路

首先得判断SQL注入是否存在

判断SQL注入点

判断数据库的一个类型

SQL注入的防范措施


前言

本文可能有些许的难以理解,请大家别急躁,耐心地看完这篇文章,

对SQL语句不了解的可以先看看下面这篇文章

网络安全练气篇——SQL基础-CSDN博客

然后本文的话,主要是总结了互联网中的一些SQL注入文章,进行了一个知识汇总

什么是SQL?

SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库系统的语言,它可以用于创建、修改和删除数据库中的表和记录,以及执行查询操作。

SQL具有以下特点:

  1. 简单易学:SQL语法相对简单,易于理解和学习。
  2. 高效灵活:SQL可以执行快速和复杂的数据库操作,如插入、更新、删除和查询。
  3. 标准化:SQL是一种标准化的语言,大多数关系型数据库系统都支持SQL。
  4. 表达能力强:SQL支持各种复杂的查询和数据操作,可以根据需要进行数据的筛选、排序、合并等操作。
  5. 数据操纵语言(DML)和数据定义语言(DDL):SQL分为两种不同的语言类型,DML用于操纵数据,DDL用于定义数据库结构。

什么是SQL注入?

SQL注入是Web应用程序没有对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的

SQL注入的危害有哪些?

  1. 数据泄露:通过SQL注入,攻击者可以访问和获取数据库中的敏感数据,如用户凭据、个人信息、信用卡信息等。

  2. 数据篡改:攻击者可以修改数据库中的数据,例如更改用户权限、篡改交易记录、修改网站内容等。

  3. 数据删除:攻击者可以删除数据库中的数据,导致数据的永久性丢失,这对业务和组织的运行可能造成严重影响。

  4. 数据库服务拒绝:通过SQL注入攻击,攻击者可以执行恶意SQL语句,导致数据库服务器崩溃或变得不可访问。

  5. 横向渗透:一旦攻击者成功执行SQL注入攻击,他们可能能够访问其他连接到同一个数据库系统的服务或应用程序,从而扩大攻击范围。

  6. 其他安全漏洞的利用:SQL注入可能是其他更严重漏洞攻击的先导,通过注入恶意代码,攻击者可能利用其他漏洞来获取更高的权限或执行更危险的操作。

SQL注入有哪些类型?

  1. 基于错误的注入:攻击者通过输入带有错误语法的SQL代码来触发数据库错误信息,从而获取有关数据库结构和数据的敏感信息。

  2. 布尔盲注:攻击者通过在SQL查询中使用布尔逻辑运算符来确认或否定特定条件的存在。通过在SQL语句中使用一系列布尔表达式来推断有关数据库的信息。

  3. 时间盲注:攻击者通过在SQL查询中使用时间延迟函数来推断有关数据库的信息。攻击者可以通过注入代码来导致延迟响应,以此来确认特定条件是否存在。

  4. 联合查询注入:攻击者通过在SQL查询中插入额外的查询语句来执行未经授权的操作。攻击者可以通过联合查询注入从数据库中检索敏感信息。

  5. 堆叠查询注入:攻击者通过在SQL查询中连接多个查询语句来执行多个操作。攻击者可以通过堆叠查询注入在单个请求中执行多个SQL查询。

SQL注入的一些思路

首先得判断SQL注入是否存在

         先加单引号'、双引号"、单括号)、双括号))等看看是否报错,如果报错就可能存在SQL注入漏洞了。

         还有在URL后面加 and 1=1 、 and 1=2 看页面是否显示一样,显示不一样的话,肯定存在SQL注入漏洞了。

         还有就是Timing Attack测试,也就是时间盲注。有时候通过简单的条件语句比如 and 1=2 是无法看出异常的。

       在MySQL中,有一个Benchmark() 函数,它是用于测试性能的。Benchmark(count,expr) ,这个函数执行的结果,是将表达式 expr 执行 count 次 。

判断SQL注入点

        凡是和数据库有交互的地方都容易出现SQL注入,SQL注入经常出现在登陆页面、涉及获取HTTP头(user-agent / client-ip等)的功能点及订单处理等地方。例如登陆页面,除常见的万能密码,post 数据注入外也有可能发生在HTTP头中的 client-ip 和 x-forward-for 等字段处。这些字段是用来记录登陆的 i p的,有可能会被存储进数据库中从而与数据库发生交互导致sql注入。

        在返回包或者请求包中、Cookie、referer、XFF、UA等地方尝试插入代码、符号或语句,尝试是否存在数据库参数读取行为,如产生影响则说明存在注入点。

  1. 输入检查:尝试在输入字段中插入特殊字符(例如单引号、分号、注释符等),观察应用程序是否正确处理这些字符。如果应用程序未正确处理这些字符,可能存在SQL注入漏洞。

  2. 错误消息:通过在输入字段中插入错误的SQL语法,观察应用程序返回的错误消息。如果错误消息暴露了数据库相关信息,例如数据库类型、表名、列名等,可能存在SQL注入漏洞。

  3. 堆叠查询:尝试在输入字段中插入多个SQL查询语句,观察应用程序是否执行多个查询。如果应用程序执行了多个查询且返回结果,可能存在SQL注入漏洞。

  4. 盲注:尝试通过布尔盲注或时间盲注的方式,判断是否存在SQL注入漏洞。例如,在输入字段中插入布尔表达式或延时函数,并观察应用程序的响应是否有所不同。

  5. 使用自动化扫描工具:使用SQL注入扫描工具,例如SQLMap、Netsparker等,对目标应用程序进行扫描,自动发现潜在的SQL注入漏洞。

判断数据库的一个类型

  • 使用数据库特有的函数来判断
  • 使用数据库专属符号来判断,如注释符号、多语句查询符等等
  • 报错信息判断
  • 数据库特性判断

当然也可以对主机进行端口扫描,可以根据数据库是否开启对应端口

  • Oracle        1521
  • SQL Server        1433
  • MySQL        3306
  • PostgreSql        5432

SQL注入的防范措施

  1. 使用参数化查询或预编译语句:使用参数化查询或预编译语句可以将用户输入的数据与SQL语句分离,从而避免了直接将用户输入的数据作为SQL查询的一部分。这样可以防止恶意用户通过注入SQL语句来进行攻击。

  2. 输入验证和过滤:对用户的输入进行验证和过滤,确保输入的数据符合预期的格式和范围。可以使用合适的正则表达式或自定义的验证函数来验证用户的输入,过滤掉不符合规范的字符或字符串。

  3. 最小特权原则:限制数据库用户的权限,确保用户只拥有必要的权限。避免使用具有超级用户权限的数据库账户进行数据库操作,尽量使用仅拥有执行所需操作的最低权限的账户。

  4. 错误信息保护:在生产环境中,不要向用户显示详细的错误信息。将错误信息记录到日志中,只向用户显示一个通用的错误提示。详细的错误信息可能会泄露数据库的结构和敏感数据,从而为攻击者提供有价值的信息。

  5. 转义字符处理:对于用户输入的特殊字符,如引号、斜杠等,需要进行转义处理。数据库提供了相应的函数或方法来处理这些字符,确保它们被正确地解释为普通字符,而不是SQL语句的一部分。

  6. 异常处理:在代码中捕获并正确处理SQL语句执行过程中的异常,避免将异常信息直接显示给用户。通过合理的异常处理,可以增强代码的健壮性,防止SQL注入攻击。

  7. 框架和库安全:使用被广泛认可且经过测试的框架和库,这些框架和库通常会提供内置的安全措施来尽量避免SQL注入攻击。

  8. 定期更新和升级:保持数据库和应用程序的安全补丁和更新,及时修复已知的安全漏洞。

  9. 安全审计和测试:进行定期的安全审计和测试,发现和修复潜在的安全风险。可以借助安全测试工具,如SQLMap等,对数据库进行渗透测试,发现和修复SQL注入漏洞。

  10. 安全培训:对开发人员和数据库管理员进行安全培训,提高他们的安全意识和技能,让他们了解SQL注入攻击的风险和防范措施。

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

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

相关文章

openh264 帧级码率控制源码分析

openh264 码率控制结构 关于 openh264 码率控制整体结构,可以参考:openh264 码率控制原理框架。 openh264 帧级码率控制介绍 函数关系图:从图可以看出,帧级码控的核心函数就是WelsRcPictureInitGom、WelsRcPictureInfoUpdateGo…

DAB-DETR

论文地址: https://arxiv.org/pdf/2201.12329 文章通过前人的经验得出,导致 DETR 训练速度慢的原因很大可能是因为 decoder 中 cross attention 这个模块,由上面的对比可以看出其与 self attention 的区别主要就在于query的不同。文章猜想两个…

LC15.三数之和、LC22括号生成

LC15.三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的…

【Python办公自动化之Word】

python办公⾃动化之-Word python-docx库 文章目录 python办公⾃动化之-Word1、安装python-docx库2、⽂档的结构说明3、基本操作语法3.1 打开⽂档3.2加⼊不同等级的标题3.3 添加⽂本3.4 设置字号插曲1:实战演示3.5 设置中⽂字体3.6 设置斜体3.7 设置粗体3.8⾸⾏缩进…

H3C防火墙抓包(图形化)

一.报文捕获 ,然后通过wireshark查看报文 二.报文示踪 , 输入源目等信息, 查看报文的详情

使用Docker Compose运行Nginx

使用Docker Compose运行Nginx可以更方便地管理和配置多个容器。以下是步骤: 1. 安装Docker Compose 首先,确保已经安装了Docker和Docker Compose。如果没有安装,可以参考官方文档进行安装:Docker Compose安装指南 2. 创建项目目…

mongodb 集群安装

整体架构图: 1. 配置域名 Server1: OS version: CentOS Linux release 8.5.2111 hostnamectl --static set-hostname mongo01 vi /etc/sysconfig/network # Created by anaconda hostnamemong01 echo "192.168.88.20 mong1 mongo01.com mongo…

返回给前端数据的封装

返回格式如下: { "code": 200/400, "msg": "成功"/"失败", "total": n, "data": [ {},{}]} 1.在common中新增Result 类,代码如下 package com.xxx0523.common; import lombo…

kylin-v10sp2-Babelfish for PostgreSQL

环境准备 x86_linux_kylin v10 sp2 1、依赖 yum makecache yum install -y uuid-devel 2、源代码 下载支持babelfish的pg,也是babelfish社区维护更新 cd /opt#pg源码,支持babelfish版 git clone https://github.com/babelfish-for-postgresql/post…

不同拷贝【写作中】

【写作中】 .clone() 深拷贝deepcopy() 深拷贝copy() 浅拷贝

酸性设计震撼登场,让你眼前一亮!

说起酸性(ACID),你会想到什么?”我们通常会想到酸味,酸设计的视觉魅力是通过图形、颜色、排版给人复古、迷幻、黑暗、叛逆的感觉,反复几何图形和高饱和的颜色,使设计非常时尚,非常适…

css实现多行文本的展开收起

背景 在我们写需求时可能会遇到类似于这样的多行文本展开与收起的场景: 那么,如何通过纯css实现这样的效果呢? 实现的难点 (1)位于多行文本右下角的 展开收起按钮。 (2)展开和收起两种状态的…

Spatio-temporal Relation Modeling for Few-shot Action Recognition

标题:少样本动作识别的时空关系建模 源文链接:Thatipelli_Spatio-Temporal_Relation_Modeling_for_Few-Shot_Action_Recognition_CVPR_2022_paper.pdf (thecvf.com)https://openaccess.thecvf.com/content/CVPR2022/papers/Thatipelli_Spatio-Temporal_…

Pikachu靶场--RCE

参考借鉴 pikachu-RCE_pikachu rce-CSDN博客 Pikachu靶场-RCE远程命令/代码执行漏洞-CSDN博客 命令执行/代码执行/RCE(CTF教程,Web安全渗透入门)_bilibili exec"ping" 输入IP地址查看页面反应 可以在IP地址的后面拼接我们想要执行…

6.2 事件的创建,修改和删除

6.2.1 事件的概述 事件(Event)是在指定时刻才被执行的过程式数据库对象。 事件通过MySQL中一个很有特色的功能模块——事件调度器(Event Scheduler)进行监视,并确定其是否需要被调用。 MySQL的事件调度器可以精确到每秒钟执行一个任务,比操作系统的计…

CCF推荐会议必投攻略:这些顶级会议投完直通录取大门

CCF推荐会议必投攻略:这些顶级会议投完直通录取大门! 会议之眼 快讯 CCF介绍 CCF(China Computer Federation)即中国计算机学会,前身是中国电子学会计算机专业委员会,成立于1962年。这是由从事计算机及相…

MicroPython+ESP32 C3+ST7735S LCD屏 WIFI联网显示实时时间

案例地址:https://gitee.com/whltaoin_admin/MP_ESP32_ST7735S- 展示效果 ESP32LCD屏 WIFI联网并显示实时时间 TFT LCD模块参数介绍 名称:1.8 128*160 RGB_TFT驱动芯片:ST7735S ESP32 C3 参数介绍(经典款) 外观及…

Linux系统ubuntu20.04 无人机PX4 开发环境搭建(失败率很低)

Linux系统ubuntu20.04 无人机PX4 开发环境搭建 PX4固件下载开发环境搭建MAVROS安装安装地面站QGC PX4固件下载 PX4的源码处于GitHub,因为众所周知的原因git clone经常失败,此处从Gitee获取PX4源码和依赖模块。 git clone https://gitee.com/voima/PX4-…

基 CanMV 的 C 开发环境搭建(Linux,Ubuntu篇)

不论是使用 CanMV 提供的基于 C 语言和 FreeRTOS 的应用开发方式开发应用程序或是编译 CanMV 固件,都需要搭建基于 CanMV 的 C 开发环境,用于编译 CanMV 源码。 1. 开发环境搭建说明 CanMV 提供了基于 C 语言和 FreeRTOS 的应用开发…

傅里叶级数在不连续点会怎么样???

文章目录 一、前言背景二、用狄利克雷核表达傅里叶级数三、狄利克雷核与狄拉克函数四、傅里叶级数在不连续点的表示五、吉伯斯现象的解释六、总结参考资料 一、前言背景 笔者最近在撸《信号与系统》,写下此博客用作记录和分享学习笔记。由于是笔者为电子爱好者&…