比较有意思的几个漏洞挖掘记录
字数 1412 2025-08-19 12:41:28

SQL注入与漏洞挖掘实战教学文档

1. SQL注入漏洞分析与绕过技巧

1.1 基础发现

  • 在数据详情接口中发现单引号导致报错,初步判断存在SQL注入漏洞
  • 正常查询与异常查询返回不同响应(404 vs 500)

1.2 注入测试过程

  • 常规注入测试:
    • 1=1 导致500错误
    • 正确SQL语句返回403
    • 语法错误SQL返回500
  • Oracle注入尝试:
    • '||55||' 返回空数据
    • '||1/0||' 返回500错误
  • 绕过尝试:
    • 空白字符插入
    • 分块传输
    • 参数污染
    • 垃圾数据
    • 白名单绕过
    • 高并发攻击

1.3 成功利用的IN关键字注入

  • 有效Payload:'OR+1+in+1+and+'a'+in+'a
    • 当条件为真时响应变慢
    • 当条件为假时返回空数据
  • 利用技巧:
    • 判断用户长度:'OR+1+in+length(user)+and+'a'+in+'a
      • 通过响应时间判断条件真假
    • 使用INSTR函数获取用户名:
      • 'OR+1+in+instr(user,'u')+and+'a'+in+'a
      • instr('user','u')返回1
      • instr('user','s')返回2

2. 任意用户密码重置漏洞

2.1 漏洞发现

  • 通过密码重置功能发现:
    • 修改ID可重置不同用户密码
    • Token参数可为空

2.2 利用步骤

  1. 通过申诉功能获取用户ID:
    • 输入手机号可返回关联ID
  2. 获取目标手机号:
    • 通过游戏APP的"忘记账号"功能
    • 输入UID可获取部分手机号信息(前3位+后4位)
  3. 爆破完整手机号:
    • 在官网找回密码处枚举中间位数
    • 通过响应差异判断有效手机号
  4. 关联UID验证:
    • 使用获取的手机号在游戏APP登录界面验证
    • 匹配返回的UID确认目标账户
  5. 执行密码重置:
    • 使用获取的ID和空Token重置密码

3. 某站测试记录与绕过技巧

3.1 子域名发现

  • 爆破发现demo站点:
    • demo.atest.com
    • demo.btest.com
  • IP限制绕过:
    • 使用多种XFF头伪造IP:
      X-Forwarded-For: 127.0.0.1
      X-Real-IP: 127.0.0.1
      True-Client-IP: 127.0.0.1
      

3.2 后台接口发现

  1. 通过前端代码分析:
    • 发现Webpack打包的接口信息
    • 获取API路径和接口配置
  2. 爆破获取测试站凭证:
    • 返回Token但无法直接登录
  3. 接口未授权访问:
    • 携带测试站Token访问生产接口
    • 修改Host头访问真实数据

4. 关键知识点总结

4.1 SQL注入高级技巧

  • IN关键字在不使用括号时的特殊用法
  • 基于响应时间的盲注技术
  • 利用INSTR函数逐字符获取数据

4.2 密码重置漏洞利用链

  • 信息碎片拼接(部分手机号+UID关联)
  • 基于响应差异的枚举技术
  • 参数篡改(ID替换+Token置空)

4.3 前端安全与接口安全

  • Webpack打包信息泄露风险
  • Host头篡改导致的越权访问
  • 测试环境与生产环境的配置差异风险

4.4 IP限制绕过

  • 多种XFF头的测试与利用
  • 不同中间件/CDN对IP头的处理差异

5. 防御建议

5.1 针对SQL注入

  • 使用参数化查询
  • 实施严格的输入验证
  • 统一错误处理机制
  • 禁用详细的数据库错误信息

5.2 针对密码重置漏洞

  • 使用不可预测的Token
  • 实施严格的权限检查
  • 限制密码重置尝试频率
  • 敏感操作增加二次验证

5.3 针对接口安全

  • 严格区分测试与生产环境
  • 实施完善的认证机制
  • 禁用前端敏感信息暴露
  • 限制跨Host的请求

5.4 针对IP限制

  • 使用可靠的IP获取方式
  • 配置严格的源IP验证规则
  • 限制代理头的影响范围
SQL注入与漏洞挖掘实战教学文档 1. SQL注入漏洞分析与绕过技巧 1.1 基础发现 在数据详情接口中发现单引号导致报错,初步判断存在SQL注入漏洞 正常查询与异常查询返回不同响应(404 vs 500) 1.2 注入测试过程 常规注入测试: 1=1 导致500错误 正确SQL语句返回403 语法错误SQL返回500 Oracle注入尝试: '||55||' 返回空数据 '||1/0||' 返回500错误 绕过尝试: 空白字符插入 分块传输 参数污染 垃圾数据 白名单绕过 高并发攻击 1.3 成功利用的IN关键字注入 有效Payload: 'OR+1+in+1+and+'a'+in+'a 当条件为真时响应变慢 当条件为假时返回空数据 利用技巧: 判断用户长度: 'OR+1+in+length(user)+and+'a'+in+'a 通过响应时间判断条件真假 使用INSTR函数获取用户名: 'OR+1+in+instr(user,'u')+and+'a'+in+'a instr('user','u') 返回1 instr('user','s') 返回2 2. 任意用户密码重置漏洞 2.1 漏洞发现 通过密码重置功能发现: 修改ID可重置不同用户密码 Token参数可为空 2.2 利用步骤 通过申诉功能获取用户ID: 输入手机号可返回关联ID 获取目标手机号: 通过游戏APP的"忘记账号"功能 输入UID可获取部分手机号信息(前3位+后4位) 爆破完整手机号: 在官网找回密码处枚举中间位数 通过响应差异判断有效手机号 关联UID验证: 使用获取的手机号在游戏APP登录界面验证 匹配返回的UID确认目标账户 执行密码重置: 使用获取的ID和空Token重置密码 3. 某站测试记录与绕过技巧 3.1 子域名发现 爆破发现demo站点: demo.atest.com demo.btest.com IP限制绕过: 使用多种XFF头伪造IP: 3.2 后台接口发现 通过前端代码分析: 发现Webpack打包的接口信息 获取API路径和接口配置 爆破获取测试站凭证: 返回Token但无法直接登录 接口未授权访问: 携带测试站Token访问生产接口 修改Host头访问真实数据 4. 关键知识点总结 4.1 SQL注入高级技巧 IN关键字在不使用括号时的特殊用法 基于响应时间的盲注技术 利用INSTR函数逐字符获取数据 4.2 密码重置漏洞利用链 信息碎片拼接(部分手机号+UID关联) 基于响应差异的枚举技术 参数篡改(ID替换+Token置空) 4.3 前端安全与接口安全 Webpack打包信息泄露风险 Host头篡改导致的越权访问 测试环境与生产环境的配置差异风险 4.4 IP限制绕过 多种XFF头的测试与利用 不同中间件/CDN对IP头的处理差异 5. 防御建议 5.1 针对SQL注入 使用参数化查询 实施严格的输入验证 统一错误处理机制 禁用详细的数据库错误信息 5.2 针对密码重置漏洞 使用不可预测的Token 实施严格的权限检查 限制密码重置尝试频率 敏感操作增加二次验证 5.3 针对接口安全 严格区分测试与生产环境 实施完善的认证机制 禁用前端敏感信息暴露 限制跨Host的请求 5.4 针对IP限制 使用可靠的IP获取方式 配置严格的源IP验证规则 限制代理头的影响范围