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

相关推荐
tryqaaa_2 小时前
文件上传漏洞2总结篇(含思维导图,齐全)
web安全·php·web
tryqaaa_10 小时前
md5和sha1常见绕过【详细附新生赛题目】
web安全·php·web
APO Research11 小时前
工业连接件的隐形升级:杆端轴承正在从“标准件”走向“结构安全件”
大数据·安全·#工业零部件·#机械设计·#工业自动化·#杆端轴承·#机械结构件
KKKlucifer12 小时前
零信任架构下的安全服务:动态防御与持续合规双驱动
安全·架构
一只鼠标猴12 小时前
甲方边界安全:WAF+防火墙 + 抗 DDoS 联合防护落地方案
安全·网络安全·安全架构·防火墙·waf·边界安全
qq_2602412312 小时前
将盾 CDN:网络网站安全防护体系与实践
网络·安全
℡終嚸♂68012 小时前
WAF绕过技巧与原理深度剖析
安全
dashizhi201512 小时前
禁止复制电脑文件、电脑机密数据禁止拷贝、禁止电脑文件复制到U盘和移动硬盘的方法
运维·网络·stm32·安全·电脑
ShoreKiten13 小时前
第三届SHCTF--EZphp
web安全·php·php反序列化