通过暴力破解的方式,sql注入的漏洞,去猜解表名和列名,在之前的案例里面,我们都是通过information_schema这个数据库,去获取信息,但是很多时候,information_schema这个权限会被屏蔽掉,也就是说,对当前存在的sql注入漏洞的这个用户,它可能没有权限去读information_schema,那用户可能遇到的不是mysql的数据库,可能是其它的数据库,像其它的数据库可能没有像mysql一样提供实例,来给你提供相关的接口,给你做查询,这个时候,要去获取数据库的信息,其实是比较麻烦的,常用的做法就是用暴力破解
我们可以通过这样的payload做个测试
kobe' and exists(select * from aa)#
kobe' and exists(select id from users)#
首先前面做闭合,然后跟个and去判断,程序会先把前面的字符串去做查询,同时会把and去做个逻辑运算符,去运算后面的内容是不是存在,select * from aa,这个aa是我们猜测的部分,这个时候,不知道后台会有几个表,表的名字是什么,这个时候,我们就可以select * from 表名,这个表名是字典,从这个字典里面,我们依次遍历的去做查询,如果说,这个表不存在,那这个and连接的前后,对应的逻辑就是假,那如果这个and存在,拼在一起就是真,在基于真假的盲注里面,我们就可以通过真假去判断,如果说,后台有报错,那我们也可以基于报错信息来判断
我们把payload提交一下,
kobe' and exists(select * from aa)#
默认做为pikachu数据库的表,默认不存在,我们把数据包用BP抓起来,
然后把这个数据包发送到intruder里面去,我们暴力破解的对象是aa,aa是我们的表名,模式选择狙击手,添加字典
options里面,有一个grep-match,我们把它清掉
清掉之后,我们自己加一个通用的部分,doesn’t exist
然后这个时候,我们开始跑一下
只有users这个请求是没有flag的,那就意味着,我们猜测出这个表名是users
按照这个思路,我们就可以猜出表的名字,知道这个表的名字,我们就可以去猜测列的名字,
kobe' and exists(select id from users)#
把对应的数据包抓下来,同样的,我们可以把它发送到intruder,对id这个字段进行爆破,直到把对应的id猜出来,这个实验就不演示了
思路很简单,主要是为了告诉大家,当我们面对的数据库不是mysql的时候,或者说,我们没有权限去读information_schema之后,我们应该通过什么样的方式,去获取后端数据库的表名、列名,进一步获取相关的数据,用暴力破解的方式就是其中比较有趣的方式