凌晨两点,盲注漏洞某电商平台的盲注漏洞数据库里突然多出一条测试订单,收货地址写着“1' OR '1'='1”。盲注漏洞安全工程师老张看到日志时手一抖——这不是盲注漏洞恶作剧,是盲注漏洞有人在对后台订单查询接口试盲注。对方没拿到任何数据,盲注漏洞但光是盲注漏洞那个恒真的条件,就足以让数据库把整张订单表吐出来。盲注漏洞
盲注和普通SQL注入的盲注漏洞区别,在于它不靠报错说话。盲注漏洞攻击者像蒙着眼拆炸弹,盲注漏洞每剪一根线都要听动静。盲注漏洞最常见的盲注漏洞招数是让页面真假响应错开——比如在URL后头加AND 1=1,页面正常;换成AND 1=2,盲注漏洞页面空白。盲注漏洞一来一回,数据库里的秘密就被挤牙膏似的问出来了。这法子笨,但有效,尤其碰上那些把错误信息藏得严严实实的系统。
去年我帮朋友排查一个政府招标网站,登录框过滤了单引号和空格,看起来铁桶一般。可我把admin'%09AND%09'1'='1塞进去,页面居然回了个“欢迎回来”。Tab键绕过空格过滤,这是老套路了,但开发人员只堵了最常见的几个字符。盲注最狠的地方就在这儿:它不需要你直接看到数据,只要系统给你一点点“是”或“否”的反馈,就能拼出完整的信息。
时间盲注更阴。碰上那种对任何输入都一视同仁返回同样页面的系统,攻击者就改用IF(条件, SLEEP(5), 0)。页面卡了五秒,说明条件成立;秒回,说明不成立。我见过一个极端案例:某银行内部工具用时间盲注逐字符猜解管理员密码,每秒只能测两个字符,硬是花了三周把32位哈希拖了出来。这么慢的攻击,居然没触发任何告警——因为流量看起来就是几个慢请求,跟网络波动没两样。
防御盲注最土的办法是参数化查询,把SQL语句和用户输入彻底分开。但现实里总有历史遗留系统,比如某老牌ERP的报表模块,十年前的代码堆得像意大利面。这时候就得靠输入校验兜底:白名单比黑名单靠谱,正则表达式只放行预期格式。还有一招容易被忽略——把数据库账号权限压到最低,就算注入成功,攻击者也只能摸到一张空表。
上个月我拿自家博客练手,故意留了个盲注点。结果半天不到就有扫描器找上门来,对着参数狂试BENCHMARK函数。你看,这年头连脚本小子都用上自动化工具了,手工测试早就不流行了。所以别指望攻击者会嫌麻烦,他们只会嫌你的系统不够麻烦。
盲注的本质是信息不对称——你以为把错误提示关了就万事大吉,可系统每一次响应都在泄露线索。就像一个人蒙着眼走路,只要地面有起伏,他就能摸清地形。真正安全的系统,应该让所有输入都像石沉大海,连回声都不给。