浅析无列名注入

发布于 2021-08-06  67 次阅读


什么是无列名注入

在 mysql => 5 的版本中存在库information_schema,记录着mysql中所有表的结构,通常,在mysqlsql注入中,我们会通过此库中的表去获取其他表的结构,即表名,列名等。但是如information_schmea因为某些原因被严格的过滤,无法绕过的话。我们有可能需要通过无列名注入来获得数据信息。

使用无列名注入的条件

无列名注入主要是适用于已经获取到数据表,但无法查询列的情况下,在大多数 CTF 题目中,information_schema 库被过滤,使用这种方法获取列名。

无列名注入的原理

无列名注入的原理其实很简单,类似于将我们不知道的列名进行取别名操作,在取别名的同时进行数据查询,所以,如果我们查询的字段多于数据表中列的时候,就会出现报错。

如何使用无列名注入

当正常查询text表时

image-20210202232625844

当使用联合查询查询text表时

image-20210202234225387

这里我们会惊奇的发现,我们的列名被数字代替了,这是因为在进行联合查询的时候,我们会得到一个虚拟的表,数字相当于是对列名起的外号,这里的1就相当于之前的www 以此类推

因此我们可以使用这种起外号的方法,在不知道列名的情况进行注入

示例payload

select a.b from (select 1,2,3 as b union select * from admin) as a;
select concat(`2`,0x2d,`3`) from (select 1,2,3 union select * from admin)a limit 1,3 #同时查询多个列

参考链接:

https://zhuanlan.zhihu.com/p/98206699