sql注入绕过

1.空格过滤绕过

可用 

/**/ 

制表符(url编码为%09)

换行符(%0a)

括号

反引号  代替空格

 

 

mysql数据库有一个特性。在条件语句中,在 where id =1 后面加上 “=1”,成为where id =1 =1 ,就是对前面所有结果&1,查询的结果与原来一样。

where id =1 =0 就是对于前面所有结果&0 ,查询的结果为除去原有查询结果的其他数据,输出的是除去1以外的信息。利用MYSQL的此特性,构造括号绕过payload,可以进行bool注入。

 

id =1 =(ascii(mid(database() from (1) for(1)))=99)

 

输出的结果是id=1的结果,则说明是&1,数据库名的第一个字符ascll码为99

输出的不是id =1 的结果,则说明是&0,数据库名的第一个字符的ascll码不是99

 

from 和 for 绕过逗号过滤

2.内联注释绕过

myssql会执行放在/! ……/中的语句,可以利用这个特性绕过特殊符号过滤

 

/*50010!union*/ /*!select*/ 

 

其中,500010表示mysql的版本号,5.00.10,当实际数据库版本高于内联注释中的版本号时,就会执行内联注释中的代码。

 

3.大小写绕过

黑名单中可能只针对大写\小写特殊符号

 

4.双写关键字绕过

selectselect

 

 

5.编码绕过

漏洞代码:

 

if(preg_match(' /select/i ' ,$_GET["id"])) {die("ERROR");} /*pre_match函数对GET型id参数进行了过滤,并对大小写情况进行了判断*/
else{
$id = $_GET['id'];
$sql = "SELECT * FROM user WHERE id =$id LIMIT 0,1"
$result = mysql_qurey($sql);
}

 

双重url编码绕过

id =1 and 1=2 union se%256cent  1,2 database()

 

十六进制编码绕过

MYSQL可以识别十六进制并对其进行自动转换

 

Unicode编码绕过

 

6.等价函数字符替换绕过

用like 或 in 代替 = 进行查询

 

sleep函数可用benchmark函数代替

ascii函数可用hex 、bin函数代替

 

posted @ 2021-01-13 14:19  橘皮鸭  阅读(194)  评论(0)    收藏  举报