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

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日

相关文章

  • 一篇文章带你了解清楚Mysql 锁

    一篇文章带你了解清楚Mysql 锁 什么是锁 在多线程并发操作一个资源时,为了保证操作的正确性,需要对资源进行加锁控制。锁是用来保证共享数据或共享资源在多线程或多进程中能够安全访问的一种机制。在 MySQL 中,锁是在查询过程中对数据进行加锁以保证数据的一致性。 锁的分类 MySQL 中锁的分类有多种,这里简单介绍一下 InnoDB 中的三种锁:共享锁、排他…

    database 2023年5月22日
    00
  • Linux下MySQL 5.6.27 安装教程

    以下是“Linux下MySQL 5.6.27 安装教程”的完整攻略: 1. 准备工作 在安装MySQL前需要确认自己的系统版本以及是否已经安装了MySQL。可以通过如下命令查询: cat /etc/os-release # 查询系统版本 rpm -qa | grep mysql # 查询是否已经安装了MySQL 如果已经安装了MySQL需要先卸载,卸载方式如…

    database 2023年5月22日
    00
  • MySQL Server Configuration

    ProxySQL主要是通过mysql_servers来配置MySQL servers,有时候可能会用到mysql_replication_hostgroups 备注:在读下面内容之前,确保理解multi-layer configuration system,或者看我前面的文章 注意: 更新mysql_servers 和mysql_replication_ho…

    MySQL 2023年4月13日
    00
  • Oracle 与 SQL Server的区别

    Oracle和SQL Server都是目前最流行的关系型数据库管理系统,它们在处理数据、数据存储、性能优化等方面具有很多相似之处,但也有很多明显的区别。以下是Oracle和SQL Server的区别的详细讲解。 1. 数据库管理系统 Oracle和SQL Server都是关系型数据库管理系统(RDBMS),但它们的结构和架构方式略有不同。Oracle数据库是…

    database 2023年3月27日
    00
  • MySQL学习之数据库备份详解

    MySQL学习之数据库备份详解 什么是数据库备份? 数据库备份就是将数据库中的数据和结构进行复制并保存在另一个地方,以便在需要的时候恢复数据。 为什么要进行数据库备份? 因为数据库中的数据是极其重要和珍贵的,一旦出现了数据丢失或者数据库崩溃等问题,就会对业务运营产生非常大的影响,甚至毁掉整个业务。 因此进行数据库备份是每一个数据库管理员必须要掌握的技巧之一。…

    database 2023年5月21日
    00
  • SQLite 和 Couchbase的区别

    SQLite 和 Couchbase 都是主流的数据库系统,但它们在设计和使用场景上有很大的不同。 SQLite 什么是SQLite SQLite 是一个轻量级的开源关系型数据库系统,它使用 SQL 语言来管理和操作数据。它的设计理念是提供一个嵌入式的、零配置的、事务性的 SQL 数据库引擎。 特点 轻量级:SQLite 的核心代码只有几十万行,可以被嵌入到…

    database 2023年3月27日
    00
  • Go中时间与时区问题的深入讲解

    Go中时间与时区问题的深入讲解 在Go语言中处理时间相关问题非常方便和灵活,但时区问题常常会引起误解和困惑。本文将深入探讨Go中的时间和时区问题,并提供示例和攻略以帮助开发者优雅地处理时间和时区问题。 Go中的时间类型 在Go中时间可以表示为time.Time类型。time.Time类型的零值代表UTC时间的起始时间“0001-01-01 00:00:00 …

    database 2023年5月18日
    00
  • SQL Server简单模式下误删除堆表记录恢复方法(绕过页眉校验)

    SQL Server简单模式下误删除堆表记录恢复方法(绕过页眉校验) 背景 SQL Server是一种常见的关系型数据库管理系统,堆表是其一种表的存储形式。在误删除堆表记录并进行回滚时,如果数据库处于简单模式下,数据不可恢复。本攻略在简单模式下误删除堆表记录并绕过页眉校验,实现数据恢复。 简单模式下误删除堆表记录 在SQL Server中,简单模式下的事务处…

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