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日

相关文章

  • DBMS 中的函数依赖

    DBMS中的函数依赖(Functional Dependence)是数据库设计中的一个非常重要的概念。实际上,在数据库设计的各个阶段中,函数依赖都有着很重要的作用。下面就详细讲解一下函数依赖的概念、分类、表示方法以及实例说明。 概念 函数依赖是数据库设计中的一个概念,是指在一个关系中,某些属性的值能够确定另外一些属性的值。 举个例子,我们有一张员工表(Emp…

    database 2023年3月27日
    00
  • CentOS7.4手动安装MySQL5.7的方法

    下面为你详细讲解“CentOS7.4手动安装MySQL5.7的方法”的完整攻略。 准备工作 在手动安装MySQL5.7之前,需要确保你的CentOS7.4已经安装了必要的依赖。你可以使用以下命令进行检查和安装: $ sudo yum update $ sudo yum -y install gcc wget bison gcc-c++ make perl c…

    database 2023年5月21日
    00
  • MySQL DBA 常用手册小结

    MySQL DBA 常用手册小结攻略 概述 MySQL DBA 常用手册是一个针对数据库监控和性能优化的指南,它包含了数据库管理的各个方面,如服务器配置和维护、备份和恢复、监视和优化等。本指南旨在为DBA提供一些实用技术和工具,以帮助他们更有效地管理MySQL服务器。 目录 服务器配置与维护 备份和恢复 监视和性能优化 1. 服务器配置与维护 安装和配置My…

    database 2023年5月22日
    00
  • Redis锁机制处理高并发

    文章正文   这里我们主要利用Redis的setnx的命令来处理高并发。 setnx 有两个参数。第一个参数表示键。第二个参数表示值。如果当前键不存在,那么会插入当前键,将第二个参数做为值。返回 1。如果当前键存在,那么会返回0。 创建库存表 CREATE TABLE `storage` (   `id` int(11) unsigned NOT NULL …

    Redis 2023年4月12日
    00
  • ubuntu系统中安装mysql5.6(通过二进制)

    下面是详细讲解 Ubuntu 系统中安装 MySQL 5.6 的完整攻略,通过二进制文件进行安装。 1. 下载 MySQL 5.6 的二进制文件 可以通过 MySQL 官方网站下载 MySQL 5.6 的二进制文件。在这里,我们需要下载 Ubuntu 18.04 的二进制文件。 命令行中执行以下命令: sudo wget https://dev.mysql.…

    database 2023年5月22日
    00
  • MySQL 中如何归档数据的实现方法

    MySQL 中归档数据有多种实现方法,这要根据具体的业务需求、数据量大小、访问频率等因素来选择。下面分别介绍两种常见的归档方法。 1. 利用分区表进行归档 分区表最大的特点是可以按照某个特定的列进行分区,使得数据更容易管理。利用分区表进行归档数据,可以按照时间为分区的方式。比如将一年内的数据存储在一个分区中,然后过一年后将该分区的数据归档到历史数据表中。可以…

    database 2023年5月22日
    00
  • mysql 查询指定日期时间内sql语句实现原理与代码

    MySQL 查询指定日期时间内的数据需要用到 SQL 语句中的 WHERE 子句和日期时间函数。具体实现原理和代码步骤如下: 在 SQL 语句中使用 WHERE 子句筛选指定日期时间内的数据。 WHERE 子句基本语法为 WHERE column operator value ,其中 column 表示指定的字段名称,operator 表示比较运算符,val…

    database 2023年5月22日
    00
  • mysql安装图解总结

    关于 “mysql安装图解总结” 的完整攻略,我为您提供如下的详细讲解。 1. 下载MySQL安装包 首先,您需要到MySQL官网(https://dev.mysql.com/downloads/mysql/)上下载您所需要的MySQL安装包。比如,我们可以选择MySQL Community Server 8.0版本进行下载,即点击 “Download” 按…

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