当前位置:首页 > 时尚

sql盲注漏洞怎么用

sql盲注这玩意儿,注漏说白了就是洞用攻击者跟数据库玩“猜谜游戏”。页面不直接报错,注漏也不回显数据,洞用你只能靠“是注漏”或“否”的反馈一点点摸出数据库里的秘密。我见过最离谱的洞用一次,是注漏某个后台登录框,用户名输进去,洞用页面只回“欢迎”或“密码错误”,注漏就这俩词,洞用愣是注漏被同行掏出了整个用户表。

先看场景。洞用你拿到一个搜索框,注漏输入1,洞用正常出结果。注漏输入1',页面空白,没报错。再试1' and '1'='1,结果又回来了。这时候你就知道,大概率存在字符型注入,但页面不显示SQL错误——这就是盲注的典型环境。

盲注分两种玩法。第一种叫布尔盲注,靠页面真假判断条件。比如你构造1' and ascii(substr(database(),1,1))>100 -- ,如果页面正常显示,说明数据库名的第一个字符ASCII码大于100,否则页面就空。拿二分法来回试,一个字符一个字符抠,跟拆盲盒似的。我见过有人写脚本,每秒发几十个请求,硬是把几百个字符的数据库名给拼出来了。

第二种叫时间盲注,更阴险。当页面无论真假都返回同样内容时,就靠响应时间判断。构造1' and if(ascii(substr(user(),1,1))>100,sleep(3),0) -- ,如果页面卡了3秒才加载,说明条件成立。这招对那种把错误信息全吞了的站点特别有效。不过你得有耐心,一次请求等几秒,测一个字符要等半天。

实际操作里最坑的是WAF。有些站点装了过滤,你输入and直接被拦。我遇到过一次,把and换成&&,再把空格用注释符/**/替代,居然就绕过去了。还有一次,对方过滤了sleep,我改用benchmark(10000000,sha1('test')),一样能拖慢查询。这玩意儿就跟锁匠开锁一样,锁芯换花样,你也得换工具。

别以为盲注只能偷数据。在某些场景下,你还能直接写文件。比如数据库权限够高,用select ... into outfile结合盲注判断路径是否存在,一步步探测出web目录,最后把一句话木马写进去。当然这需要更多前提条件,但真遇上了,比单纯拖库刺激多了。

说句实在话,盲注是慢工出细活。跟报错注入比,它效率低得让人抓狂。但正因为慢,很多开发压根不设防——他们觉得页面没报错就安全了,殊不知攻击者正拿着秒表一下下测你的响应时间。我见过不少企业内网系统,后台登录接口全是这种盲注漏洞,数据量还贼大,一拖就是几万条。

最后提醒一句,测试盲注时务必控制频率。你每秒发太多请求,容易把数据库连接池打满,直接搞挂业务。真出事了,甲方第一个找你算账。点到为止,拿到证据就收手,别贪心。

分享到: