SQL注入技巧之显注与盲注中过滤逗号绕过详析

yizhihongxing

SQL注入技巧之显注与盲注中过滤逗号绕过详析

SQL注入攻击是指攻击者通过在Web应用程序中插入恶意的SQL查询语句,以欺骗Web应用程序执行非预期的行为。SQL注入技巧中,逗号是经常被过滤的一个字符,因为逗号在SQL语句中通常用作分隔符。在本文中,我们将深入探讨SQL注入攻击中绕过逗号过滤的技巧。

显注中的逗号绕过

显注是指攻击者向Web应用程序中插入的恶意SQL语句会直接被Web应用程序解释和执行的情况。在显注攻击中,逗号可以被用作分隔符来分隔多个参数。而当逗号被过滤后,攻击者可以使用以下技巧来绕过过滤:

使用空格代替逗号

攻击者可以使用空格来代替逗号,以绕过逗号过滤。例如,以下的SQL语句会被过滤掉:

SELECT * FROM users WHERE name='admin' AND passwd='123456' AND age>20;

如果我们尝试在age后面加上一个逗号,例如:

SELECT * FROM users WHERE name='admin' AND passwd='123456' AND age>,20; -- 这里的逗号被过滤掉了

那么我们可以使用空格代替逗号,使Web应用程序不会将age和20当成两个不同的参数:

SELECT * FROM users WHERE name='admin' AND passwd='123456' AND age> 20; -- 使用空格代替逗号

使用括号绕过

括号也可以被用作逗号的替代品,以绕过逗号过滤。例如,以下的SQL语句会被过滤掉:

SELECT * FROM users WHERE name='admin' AND passwd='123456' AND age>20;

如果我们尝试在age后面加上一个逗号,例如:

SELECT * FROM users WHERE name='admin' AND passwd='123456' AND age>,20; -- 这里的逗号被过滤掉了

那么我们可以使用括号将逗号包裹起来,使Web应用程序不会将age和20当成两个不同的参数:

SELECT * FROM users WHERE name='admin' AND passwd='123456' AND age>(20); -- 使用括号绕过

盲注中的逗号绕过

盲注是指攻击者的恶意SQL语句不会直接被Web应用程序解释和执行,但攻击者可以通过其他的方式来判断自己注入的SQL语句是否生效。在盲注攻击中,逗号通常会被用作分隔符来分隔多个参数。而当逗号被过滤后,攻击者可以使用以下技巧来绕过过滤:

使用REPLACE函数

攻击者可以使用MySQL中的REPLACE函数来将逗号替换成其他字符,以绕过逗号过滤。例如,以下的SQL语句会被过滤掉:

SELECT * FROM users WHERE name='admin' AND passwd='123456';

如果我们尝试在passwd后面加上一个逗号,例如:

SELECT * FROM users WHERE name='admin' AND passwd='123456',;

那么可以使用REPLACE函数将逗号替换成其他字符,而不会影响SQL语句的结构:

SELECT * FROM users WHERE name='admin' AND passwd='123456'+REPLACE(',', ';', @@VERSION); -- 使用REPLACE函数替换逗号

在上面的SQL语句中,@@VERSION函数返回数据库版本字符串,攻击者可以使用该函数检查SQL注入攻击是否成功。

使用UNION SELECT语句

攻击者可以使用UNION SELECT语句将另一个查询的结果合并到原来的查询中,以绕过逗号过滤。例如,以下的SQL语句会被过滤掉:

SELECT * FROM users WHERE name='admin' AND passwd='123456';

如果我们尝试在passwd后面加上一个逗号,例如:

SELECT * FROM users WHERE name='admin' AND passwd='123456',;

那么可以使用UNION SELECT语句将另一个查询的结果合并到原来的查询中,例如:

SELECT * FROM users WHERE name='admin' AND passwd='123456' UNION SELECT 1,2,3,4,5;

在上面的SQL语句中,我们将一个SELECT查询的结果合并到原查询中,并在合并的结果中添加了五个数字。攻击者可以使用这种方式来检查SQL注入攻击是否成功。

示例

以下是一个基于以上技巧的SQL注入攻击示例:

假设我们有一个Web应用程序,其查询URL为:

http://example.com/search.php?keyword=apple,orange&sort=price

在这个URL中,我们可以看到关键字被用逗号分隔,并且关键字和排序方式都是作为参数传递给search.php页面的。我们可以插入一个恶意的SQL查询语句来尝试注入该应用程序。首先,我们可以尝试使用空格绕过逗号过滤来创建以下的SQL查询:

http://example.com/search.php?keyword=apple%20orange' AND '1'='1&sort=price

在这个SQL查询中,我们使用空格代替逗号,并且注入了一个永远返回TRUE的条件,使查询返回所有的结果。如果Web应用程序没有对逗号进行过滤,那么这个攻击将会成功。

如果Web应用程序已经对逗号进行了过滤,那么我们可以尝试使用UNION SELECT语句来绕过过滤。例如:

http://example.com/search.php?keyword=apple' UNION SELECT 1,2,3,4,5&sort=price

在这个SQL查询中,我们将一个SELECT查询的结果合并到原查询中,并在合并的结果中添加了五个数字。如果Web应用程序没有对逗号进行过滤,那么这个攻击将会成功。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SQL注入技巧之显注与盲注中过滤逗号绕过详析 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Sql Server 分组统计并合计总数及WITH ROLLUP应用

    下面我来为你详细讲解 “Sql Server 分组统计并合计总数及WITH ROLLUP 应用” 的完整攻略。 什么是分组统计? 在 SQL Server 中,分组统计是统计数据时将数据按照某个列或某几个列进行分组,然后统计某些列的数值计算出来的过程。在分组统计中,经常用到的是 GROUP BY 语句。GROUP BY 语句使用时,必须要指定按照哪个字段进行…

    database 2023年5月21日
    00
  • Django 事务回滚的具体实现

    Django 事务回滚的具体实现可以分为两部分来讲解:数据库事务和Django事务。 数据库事务 在数据库中,事务是指作为一个单位执行的一系列操作。这些操作要么全部成功完成,要么全部失败回滚。数据库事务的四个性质是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。这里我们着重讲解隔…

    database 2023年5月21日
    00
  • Java中JDBC事务与JTA分布式事务总结与区别

    Java中JDBC事务与JTA分布式事务总结与区别 1. JDBC事务 1.1 JDBC事务的定义 JDBC事务是指从JDBC连接开始,到结束提交或回滚的整个过程。JDBC事务采用的是本地事务的原理,即在一个本地数据库中进行的一组操作。 1.2 JDBC事务的使用步骤 JDBC事务的使用步骤如下: 获取连接:使用DriverManager.getConnec…

    database 2023年5月21日
    00
  • redis下载安装及php配置redis

    下载及安装redis 1.首先去github网站上下载https://github.com/dmajkic/redis/downloads; 2.根据实际情况,将64bit的内容cp到自定义盘符目录,如D:\Redis; 3.打开cmd,cd/d 切换到Redis-server.exe目录,运行redis-server.exe redis.conf; 4.这…

    Redis 2023年4月12日
    00
  • 关于expdp任务异常的处理案例详析

    关于expdp任务异常的处理案例详析 背景 expdp是Oracle数据库中的数据导出工具,它能够帮助用户将指定的数据导出到文件中。然而,在使用expdp过程中有时候会出现一些异常和错误,本篇攻略将针对这些异常情况进行详细讲解。 常见异常及处理 1. ORA-39002: 无效操作 该异常错误一般会出现在命令行执行expdp命令,表示该命令不支持当前指令。可…

    database 2023年5月21日
    00
  • MySql连接查询方式详解

    MySql连接查询方式详解 在MySQL中,连接查询是一种重要的查询方式,它可以通过连接多张表的关联字段,将这些表中不同的数据进行合并,形成全新的查询结果。本篇攻略将详细讲解连接查询的使用方法及使用场景。 连接查询的类型 在MySQL中,连接查询类型主要分为左连接、右连接、内连接和全连接四种。其中,左连接和右连接也被称为外连接。 左连接(Left Join)…

    database 2023年5月22日
    00
  • MongoDB删除文档方法详解

    删除单个文档 删除单个文档的最基本操作就是使用db.collection.remove()方法。该方法可以在一个集合中删除一个或多个文档。 首先,我们需要连接MongoDB并选定一个集合: // 连接MongoDB const MongoClient = require('mongodb').MongoClient; const uri …

    MongoDB 2023年3月14日
    00
  • MySQL中使用FREDATED引擎实现跨数据库服务器、跨实例访问

    使用FEDERATED引擎可以实现MySQL数据库跨服务器、跨实例访问,FEDERATED引擎是一种分布式引擎,可以在一个MySQL服务器中访问另一个MySQL服务器上的表。下面是实现跨数据库服务器、跨实例访问的攻略: 创建FEDERATED表 在本地服务器上创建一个FEDERATED表,使用的表结构和数据都是来源于另外一个MySQL服务器上的一个表,语法如…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部