白帽小 K 的故事(2)
这是一道 SQL 盲注题目,跟随流程,查看 hint,给了两点提示
- 后端查询逻辑是
SELECT 1 from Terra.animal WHERE name = '$name' - 要使用盲注
这提示我们
- 可以利用
'闭合达成 SQL 注入 - 注入后响应不包含 sql 语句执行结果或原始报错
简单手动 fuzz 一下 waf,发现只过滤了空格(抓包返回 {"status":"error","message":"Invalid characters detected"}),我们用括号绕过就行。
我们构造 amiya'AND(${payload})#,由于用户 amiya 存在,WHERE name = 'amiya' 为真,此时 payload 的真假决定了表达式的返回,如果 payload 为真,应当返回正常登录的结果,反之,则会返回用户不存在。这就符合了布尔盲注的条件。
由于手动盲注耗时长,我们需要编写脚本去自动完成盲注,通常我们会使用二分搜索算法和多线程来优化盲注速度。这里给出我的解题脚本:
https://github.com/nick-cjyx9/blind-sqli/blob/master/examples/newstar.ts