SQL注入绕过技术

预计更新
  1. SQL注入概述
    1.1 SQL注入攻击概述
    1.2 SQL注入漏洞分类
    1.3 SQL注入攻击的危害

  2. SQLMap介绍
    2.1 SQLMap简介
    2.2 SQLMap安装与配置
    2.3 SQLMap基本用法

  3. SQLMap进阶使用
    3.1 SQLMap高级用法
    3.2 SQLMap配置文件详解
    3.3 SQLMap插件的使用

  4. SQL注入漏洞检测
    4.1 SQL注入漏洞检测基础
    4.2 SQL注入漏洞检测工具
    4.3 SQL注入漏洞检测实战

  5. SQL注入漏洞利用
    5.1 SQL注入漏洞利用介绍
    5.2 SQLMap利用SQL注入漏洞
    5.3 SQL注入漏洞利用实战

  6. SQL注入防御
    6.1 SQL注入防御基础
    6.2 防御SQL注入的最佳实践
    6.3 使用SQLMap测试防御效果

  7. SQL注入绕过技术
    7.1 SQL注入绕过技术介绍
    7.2 绕过WAF
    7.3 绕过输入过滤

  8. SQL注入攻击的后果
    8.1 数据泄露
    8.2 数据篡改
    8.3 数据删除

  9. SQL注入漏洞的利用场景
    9.1 SQL注入漏洞的利用场景介绍
    9.2 电商网站SQL注入漏洞利用实战
    9.3 CMS网站SQL注入漏洞利用实战

  10. SQL注入漏洞的漏洞挖掘与利用
    10.1 SQL注入漏洞的漏洞挖掘方法
    10.2 SQL注入漏洞利用的高级技巧
    10.3 SQL注入漏洞利用的未来趋势

SQL注入绕过技术介绍

SQL注入攻击是一种常见的网络攻击,攻击者利用漏洞将恶意的SQL代码注入到应用程序中,从而获得对数据库的访问权限,进而窃取、篡改、删除或者破坏数据库中的数据。SQL注入攻击的危害非常大,它可能导致应用程序、数据库和整个系统的完全崩溃。为了防范SQL注入攻击,渗透测试工程师需要了解SQL注入攻击的绕过技术,以便能够发现和修补应用程序中的SQL注入漏洞。

SQL注入攻击的绕过技术主要包括以下几种:

  1. 绕过注入检测

当应用程序对输入的数据进行过滤和验证时,攻击者需要使用一些技巧来绕过这些措施。常见的绕过注入检测的方法包括:

  • 使用大小写混合:攻击者可以使用大小写混合来绕过注入检测。例如,将SELECT改为sElEcT或者SeLeCt,从而使过滤器无法识别。
  • 使用特殊字符:攻击者可以使用特殊字符来绕过注入检测。例如,使用单引号、双引号、反斜杠等字符来绕过字符串过滤器。
  • 使用注释符号:攻击者可以使用注释符号来绕过注入检测。例如,使用"–"开头的注释符号来注释掉原有的SQL语句,从而让注入的SQL语句得以执行。
  1. 绕过登录验证

当应用程序需要用户进行登录验证时,攻击者需要绕过登录验证才能够进行SQL注入攻击。常见的绕过登录验证的方法包括:

  • 直接绕过验证:攻击者可以直接绕过应用程序的登录验证,例如在URL中加上特定的参数或者修改Cookie中的值来绕过验证。
  • 利用已登录的会话:攻击者可以利用已登录的会话来绕过登录验证。例如在浏览器中复制已登录的Cookie值,然后将其插入到攻击页面中,从而绕过登录验证。
  1. 绕过过滤器

当应用程序对输入的数据进行过滤时,攻击者需要绕过这些过滤器才能够进行SQL注入攻击。常见的绕过过滤器的方法包括:

  • 绕过数字型过滤器:攻击者可以使用一些技巧来绕过数字型过滤器。例如,使用布尔逻辑运算符、位运算符、函数等来绕过数字型过滤器。
  • 绕过字符串型过滤器:攻击者可以使用一些技巧来绕过字符串型过滤器。例如,使用特殊字符、编码、拼接等技巧来绕过字符串型过滤器。
  1. 利用错误信息

当应用程序返回错误信息时,攻击者可以利用这些错误信息来进行SQL注入攻击。常见的利用错误信息的方法包括:

  • 利用错误信息推断数据库结构:攻击者可以通过错误信息推断数据库结构。例如,通过错误信息得知数据库中有一个名为users的表格,从而进行进一步的注入攻击。
  • 利用错误信息得到敏感信息:攻击者可以通过错误信息得到敏感信息。例如,得到数据库管理员的用户名和密码,从而获得对整个数据库的访问权限。
  1. 使用盲注注入技术

盲注注入是一种无法直接从应用程序返回的结果来判断注入是否成功的注入技术。攻击者需要利用一些技巧来进行盲注注入。常见的盲注注入技术包括:

  • 布尔盲注:攻击者可以通过构造布尔逻辑表达式来进行盲注注入。例如,构造一个查询语句,如果返回TRUE,则说明注入成功,否则注入失败。
  • 时间盲注:攻击者可以通过构造时间延迟来进行盲注注入。例如,构造一个查询语句,如果返回结果需要很长时间才能返回,则说明注入成功,否则注入失败。
  1. 利用多语句注入技术

多语句注入是一种利用多个SQL语句进行注入的技术。攻击者可以通过多语句注入来实现多个操作,例如插入、修改、删除等。常见的多语句注入技术包括:

  • 利用分号注入:攻击者可以利用分号将多个SQL语句分开来进行注入。例如,将两个SQL语句用分号隔开,从而实现多语句注入。
  • 利用UNION注入:攻击者可以利用UNION关键字将多个查询结果进行合并来进行注入。例如,通过UNION注入语句将两个查询结果进行合并。

总之,SQL注入攻击是一种非常危险的网络攻击,攻击者可以利用漏洞获得对数据库的访问权限,从而窃取、篡改、删除或者破坏数据库中的数据。为了防范SQL注入攻击,渗透测试工程师需要了解SQL注入攻击的绕过技术,以便能够发现和修补应用程序中的SQL注入漏洞。

绕过WAF

WAF(Web Application Firewall)是一种应用层防火墙,用于保护Web应用程序免受各种网络攻击。其中包括SQL注入攻击。WAF可以防止常见的SQL注入攻击,并且可以通过配置规则来识别和阻止新的SQL注入攻击。然而,攻击者可以使用各种技术来绕过WAF的防御措施,从而成功地进行SQL注入攻击。为了防范SQL注入攻击,渗透测试工程师需要了解SQL注入攻击绕过WAF的技术,以便能够发现和修补应用程序中的SQL注入漏洞。

SQL注入攻击绕过WAF的技术主要包括以下几种:

  1. 利用编码

攻击者可以利用编码来绕过WAF的检测。例如,将SQL关键字编码为16进制、Unicode或者Base64格式。WAF可能无法识别这些编码后的关键字,从而无法防止SQL注入攻击。攻击者还可以使用URL编码、HTML实体编码等方式来绕过WAF的检测。

  1. 利用注释

攻击者可以使用SQL注释来绕过WAF的检测。例如,在SQL语句中使用"–“或者”#"来注释掉后续的语句。WAF可能无法识别这些注释符号,从而无法防止SQL注入攻击。

  1. 利用括号

攻击者可以使用括号来绕过WAF的检测。例如,在SQL语句中使用括号"()"将攻击载荷包含起来,从而使WAF无法检测到攻击载荷。攻击者还可以使用嵌套的括号来增加攻击的复杂度,从而更难被WAF检测到。

  1. 利用布尔盲注

攻击者可以使用布尔盲注来绕过WAF的检测。布尔盲注是一种利用布尔逻辑运算符(AND、OR)的SQL注入攻击方式。攻击者可以通过构造布尔查询来判断应用程序中的SQL注入漏洞。例如,攻击者可以构造一个查询,判断一个条件是否成立,从而推断出数据库中的某个值。由于WAF无法识别这种攻击方式,因此攻击者可以成功地进行SQL注入攻击。

  1. 利用时间盲注

时间盲注是一种利用时间延迟的SQL注入攻击方式。攻击者可以通过构造时间延迟的SQL查询来判断应用程序中的SQL注入漏洞。例如,攻击者可以构造一个查询,在查询结果返回前会有一段时间的延迟。通过观察返回结果的时间来判断查询是否成功执行。由于WAF无法识别这种攻击方式,因此攻击者可以成功地进行SQL注入攻击。

  1. 利用二次注入

二次注入是一种利用多个SQL查询的SQL注入攻击方式。攻击者可以在一个SQL查询中注入恶意代码,然后在另一个查询中执行该代码。由于WAF无法识别这种攻击方式,因此攻击者可以成功地进行SQL注入攻击。

  1. 利用错误信息

攻击者可以利用应用程序返回的错误信息来绕过WAF的检测。例如,攻击者可以构造一个错误的SQL查询,从而使应用程序返回错误信息。通过观察错误信息,攻击者可以推断出应用程序中的SQL注入漏洞。由于WAF无法识别这种攻击方式,因此攻击者可以成功地进行SQL注入攻击。

  1. 利用盲注

盲注是一种利用应用程序返回的信息来判断SQL查询结果的SQL注入攻击方式。攻击者可以通过构造盲注查询来判断应用程序中的SQL注入漏洞。例如,攻击者可以构造一个查询,如果查询结果为真,则应用程序返回一个页面,否则返回另一个页面。通过观察返回页面的内容来判断查询是否成功执行。由于WAF无法识别这种攻击方式,因此攻击者可以成功地进行SQL注入攻击。

总之,SQL注入攻击绕过WAF的技术非常多样化,攻击者可以根据具体情况选择不同的技术来绕过WAF的检测。渗透测试工程师需要了解这些技术,以便能够发现应用程序中的SQL注入漏洞,并进行修补。在修补SQL注入漏洞时,可以使用参数化查询、输入验证、白名单过滤等技术来防止SQL注入攻击。同时,渗透测试工程师还应该对WAF进行测试,以确保WAF能够有效地防止SQL注入攻击。

绕过输入过滤

数据库作为现代应用程序的重要数据存储手段,对于用户提交的数据往往需要执行SQL查询和修改操作。然而,恶意攻击者可以利用 SQL 注入攻击技术,伪造SQL查询语句并通过恶意用户输入来绕过输入过滤,访问和修改数据库中的数据。

常规的安全措施,例如输入过滤、参数化查询等可以有效地减缓 SQL 注入攻击的影响。不过,攻击者拥有多种方法来绕过这些安全措施。本文将从渗透测试工程师的角度,详细阐述 SQL 注入绕过技术之绕过输入过滤。

什么是输入过滤

输入过滤是指通过限制用户输入的方式,防止非法或有害的信息进入应用程序的过程。在 Web 应用程序中,防护通常包括限制非法字符、转义特殊字符等方式。

在 SQL 注入攻击中,输入过滤旨在防止攻击者直接将SQL语句注入到数据库中。例如,通过检查用户输入以确保其只包含数字或字母,并删除包含特殊字符的输入,可以防止常见的 SQL 注入攻击。

常见的输入过滤技术包括正则表达式、白名单过滤、黑名单过滤等。虽然这些技术能够有效地减缓SQL注入攻击,但是它们并不是完美的解决方案,因为攻击者有多种方法可以绕过这些策略。

SQL 注入攻击

在了解如何绕过输入过滤之前,我们需要先理解 SQL 注入攻击的工作原理。

SQL 注入攻击是一种将恶意 SQL 代码插入数据库查询语句中的攻击方式,以可执行任意 SQL 命令的形式达到控制目标系统的目的。攻击者通常发现应用程序存在安全漏洞,并通过对包含某些字符的用户输入进行操作,在应用程序的 SQL 查询语句上执行额外的命令。

例如,以下代码片段从 user 表中获取用户名和密码:

SELECT username, password FROM user WHERE id = $id

如果攻击者提供了一个怀有恶意的ID参数,“1 OR 1=1”, 语句变成了:

SELECT username, password FROM user WHERE id = 1 OR 1=1

由于条件始终为真,结果是 SELECT 语句返回表中所有行的数据,而不仅仅是指定的用户 ID 的行。 攻击者可以利用此类注入向控制台写入其他任意代码来 take-over 目标站点。

绕过输入过滤

为了继续讨论 SQL 注入攻击如何绕过输入过滤,我们需要先了解几种常用的输入过滤技术。

白名单过滤

白名单过滤是一种基于允许列表进行输入检查的技术,以防止恶意用户向应用程序中注入不安全代码。使用白名单过滤时,只有包含在事先定义的白名单中的输入值才被视为合法数据。

例如,一个 Web 应用程序可能会使用以下代码来验证输入的用户名是否只包含字母和数字:

import redef is_valid_username(username):# 只接受只包含字母和数字的字符串return bool(re.match("^[a-zA-Z0-9]*$", username))

此代码使用正则表达式从输入值中删除特殊字符,并确保仅包含字母和数字。 但是,如果攻击者能够绕过这些规则并注入非法数据,则此策略将无法有效地防止SQL注入攻击。

黑名单过滤

黑名单过滤与白名单过滤相反,它试图通过检查输入是否包含已知的危险字符或字符串来防止恶意数据进入系统。使用黑名单过滤时,管理员在服务器上配置黑名单,以排除已知恶意数据。 常见黑名单包括SQL保留字、引号等常见特殊字符。

例如,可以使用以下代码来清理输入的关键词:

def clean_input(value):# 清理未受信任的SQL保留字和特殊符号bad_chars = ["'", "\"", ";", "(", ")", "=", "<", ">"]for char in bad_chars:value = value.replace(char, "")return value

然而,使用黑名单过滤并不能有效抵御所有的 SQL 注入攻击。例如,如果攻击者能够使用万能字符来绕过黑名单,则无论过滤器中是否存在该字符串,恶意数据都将顺利通过。

解码过滤

解码过滤是一种可能被攻击者用来绕过输入检查的技术。此类攻击者会对用户输入进行 URL/HTML 编码或其他形式的编码,以尝试绕过服务器端的输入过滤器。

还有更多相关技术,等待大家的探索和分享!

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

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

相关文章

万界星空科技MES系统中的生产调度流程

MES系统生产调度的目标是达到作业有序、协调、可控和高效的运行效果&#xff0c;作业计划的快速生成以及面向生产扰动事件的快速响应处理是生产调度系统的核心和关键。 为了顺利生成作业计划&#xff0c;需要为调度系统提供完整的产品和工艺信息&#xff0c;MES系统生成作业计…

【C++】POCO学习总结(十三):类型和字节序、错误处理和调试、获取系统信息

【C】郭老二博文之&#xff1a;C目录 1、类型 POCO为固定大小的整数定义了类型 头文件&#xff1a;#include “Poco/Types.h” Poco::Int8Poco::Int16,Poco::Int32,Poco::Int64Poco::UInt8Poco::UInt16Poco::UInt32Poco::UInt64Poco::IntPtr, Poco::UIntPtr:与指针大小相同的…

低多边形植物模型法线贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

【STM32】DMA直接存储器存取

1 DMA简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 可以直接访问STM32的存储器的&#xff0c;包括运行SRAM、程序存储器Flash和寄存器等等 DMA可以提供外设寄存器和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&#xff0c;节…

单片机——通信协议

一.同步通信和异步通信 &#xff08;1&#xff09;同步通信 通信时序&#xff1a;同步通信是基于时钟信号的通信方式。发送端和接收端需要共享相同的时钟信号&#xff0c;以确定数据传输的时刻。等待&#xff1a;在同步通信中&#xff0c;发送端和接收端必须等待时钟信号的到…

I.MX RT1170双核学习(1):双核通信之MU消息单元详解

在I.MX RT1170中&#xff0c;它有CM7和CM4核&#xff0c;而消息单元(MU)模块使SoC内的两个处理器能够通过MU接口传递消息以进行通信和协调。 文章目录 1 MU特性2 功能描述3 MU通信实例3.1 轮训实现多核通信3.1.1 MU_SetFlags和MU_GetFlags3.1.2 MU_SendMsg和MU_ReceiveMsg3.1.…

路由基本原理

目录 一、路由器概述 二、路由器的工作原理 三、路由表的形成 四、路由配置 1.连接设备 2.进入系统模式 3.进入接口模式 4.配置网络 5.下一跳的设置 6.设置浮动路由 7.设置默认路由 一、路由器概述 路由器&#xff08;Router&#xff09;是一种用于连接不同网络或子…

力扣-383. 赎金信

文章目录 力扣题目代码分析 力扣题目 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一…

django实现增删改查分页接口

django实现增删改查分页接口(小白必备) 在上篇文章中我使用nodejs实现了增删改查分页接口&#xff0c;这一篇我们则使用django实现。 1.创建一个django项目&#xff0c;命令如下 python manage.py startapp myapp 2.在你自己的myapp文件夹中的models.py中定义你们自己的模型 f…

看图识药,python开发实现基于VisionTransformer的119种中草药图像识别系统

中药药材图像识别相关的实践在前面的系列博文中已经有了相应的实践了&#xff0c;感兴趣的话可以自行移步阅读即可&#xff0c;每篇文章的侧重点不同&#xff1a; 《python基于轻量级GhostNet模型开发构建23种常见中草药图像识别系统》 《基于轻量级MnasNet模型开发构建40种常…

元编程(Metaprogramming)

本章将介绍第8️⃣种编程范式---元编程&#xff0c;以及它的优缺点、案例分析和小项目的代码示例。 优点 元编程的优点&#xff1a; 灵活性和可重用性&#xff1a;元编程允许在运行时生成代码&#xff0c;使得程序更加灵活和可重用。可以根据需要动态生成代码片段&#xff0…

Kafka系列之:统计kafka集群Topic的分区数和副本数,批量增加topic副本数

Kafka系列之:统计kafka集群Topic的分区数和副本数,批量增加topic副本数 一、创建KafkaAdminClient二、获取kafka集群topic元信息三、获取每个topic的名称、分区数、副本数四、生成增加topic副本的json文件五、执行增加topic副本的命令六、确认topic增加副本是否成功一、创建K…

Linux——基本指令(二)

​ 个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C语言小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ ​ 写在前面&#xff1a; 紧接上一章&#xff0c;我们在理解接下来的命令之前&#xff0c…

Baumer工业相机堡盟工业相机如何通过BGAPISDK获取相机的各种信息如SN/ID等等(C#)

Baumer工业相机堡盟工业相机如何通过BGAPISDK获取相机的各种信息如SN/ID等等&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机通过SDK获取相关生产信息的技术背景通过SDK获取相机信息的代码分析获取Baumer工业相机相关信息Baumer工业相机相关参数信息获取的测试 Baume…

【EventBus】EventBus源码浅析

二、EventBus源码解析 目录 1、EventBus的构造方法2、订阅者注册 2.1 订阅者方法的查找过程2.2 订阅者的注册过程1. subscriptionsByEventType 映射&#xff1a;2. typesBySubscriber 映射&#xff1a;2.3 总结订阅者的注册过程 3、事件的发送 3.1 使用Post提交事件3.2 使用p…

SpringBoot集成MyBatis-Plus实现分页查询

引入MyBatis-Plus依赖&#xff0c;下面注意指定自己的MyBatis-Plus版本。 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version> </dep…

Axure的使用

1.Axure是什么&#xff1f;&#xff1f;&#xff1f; Axure是一款功能强大的原型设计工具&#xff0c;它可以让用户快速地创建交互式原型&#xff0c;并针对原型进行测试和改进。Axure的主要特点包括可定制的界面元素库、交互动画效果、条件逻辑、团队协作等功能&#xff0c;适…

digit函数

题目描述 在程序中定义一函数 digit(n,k)&#xff0c;它能分离出整数 n 从右边数第 k 个数字。 输入格式 正整数 n 和 k。 输出格式 一个数字。 输入输出样例 输入 #1 31859 3 输出 #1 8 说明/提示 n≤10^9。 k≤10。 因为用整数n来做有点难&#xff0c;所以我用…

day02、数据库系统的结构抽象与演变

数据库系统的结构抽象与演变 1、数据库系统的标准结构1.1 分层抽象1.2 数据视图与模式1. 3 三级模式与两层映像是数据系统的标准结构1.4 逻辑独立性与物理独立性 2 数据模型、数据、模式三者区别3. 文件系统到数据库&#xff08;数据的不可再分特性&#xff0c;我们将他称为第一…

python:五种算法(SSA、WOA、GWO、PSO、GA)求解23个测试函数(python代码)

一、五种算法简介 1、麻雀搜索算法SSA 2、鲸鱼优化算法WOA 3、灰狼优化算法GWO 4、粒子群优化算法PSO 5、遗传算法GA 二、5种算法求解23个函数 &#xff08;1&#xff09;23个函数简介 参考文献&#xff1a; [1] Yao X, Liu Y, Lin G M. Evolutionary programming made…