SQL注入——布尔盲注,时间盲注,宽字节注入

布尔盲注
1.布尔盲注利用前提
页面没有显示位,没有输出SQL语句执行错误信息,只能通过页面返回正常不正常来判断是否存在注入

缺点:速度太慢,消耗大量时间

布尔盲注思维导图:

布尔盲注常用语句:
substr(string,num start,num length)
string 为字符串
string 为字符串
length 为长度

ascii( )函数
作用:返回字符串str的字符ASCII码值。如果str是空字符串,返回0.如果string是 NULL,返回NULL。

布尔盲注利用过程

布尔盲注过程代码模板:
(select count(schema_name) from information_schema.sc hemata)> n
n为数据库个数,当数据库个数大于n页面显示正常

(select length(schema_name) from information_schema.s chemata limit 0,1)> n
该语句判断数据库内第一个数据库名有多少字符,大于n则页面显示正常

(select ascii(substr((select schema_name from informa tion_schema.schemata limit 0,1), 1, 1)))>105
ascii()将返回字符串的ascii值  
第一个1,表示截取字符串的起始位置
第二个1,表示截取字符串长度
该语句作用:判断第一个库第一个字符是什么


时间盲注
时间盲注利用前提条件:
页面上没有显示位,也没有输出SQL语句执行错误信息。 正 确的SQL语句和错误的SQL语句返回页面都一样,但是加入sleep(5)条 件之后,页面的返回速度明显慢了5秒。

时间盲注常用函数:
IF(判断语句,A,B)
如果判断语句为真,则返回A
为假则返回B
一般和布尔盲注语句配合使用:
if(ascii(substr(“payload”, 1, 1))=104, sleep(5), 1)
如果第一个,号前的语句成立,则页面返回速度慢5秒
不成立,页面立即返回

时间盲注过程:
if((select count(schema_name) from information_schema. schemata)=9,sleep(5),1) //判断数据库个数
if((select length(schema_name) from information_schem a.schemata limit 0,1)=18,sleep(5),1)
if((select ascii(substr((select schema_name from info rmation_schema.schemata limit 0,1),1,1)))=105,sleep(5),1)//判断 第一个库第一个字符


宽字节注入

宽子节注入只有在,服务器页面代码中使用了gbk编码等汉字编码方式时才有效。
通常,当页面源代码中使用了 addslashes( )函数对用户输入的参数进行过滤,并且使用的是字符串查询的方式时。那么前面我们介绍的几种SQL注入方式就都不能用了
这种情况下如果页面使用的不是utf-8之类的编码方式,而用的是汉字编码方式gbk等,我们就可以使用宽子节注入。
addslashes() 函数
函数返回在预定义字符之前添加反斜杠的字符串
预定义字符: 
单引号(') 
双引号(") 
反斜杠(\) 
NULL


宽字节注入原理
mysql_query(“SET NAMES ‘gbk’”,$conn)语句将数据库编码字符集修改为 GBK格式。此时,%df\‘对应的编码就是 %df%5c’,即汉字“ 運‘ ”,这样 单引号之前的转义符号“\”就被吃掉了,单引号就逃逸出来,从而转义失败

通常我们在做测试时,只要加上在预定义字符前%df 就可以了










猜你喜欢

转载自blog.csdn.net/sdb5858874/article/details/80656144