记一次网站测试引发的注入“血案”
字数 1232 2025-08-18 11:37:15

SQL注入漏洞实战教学文档

1. 漏洞发现过程

1.1 初始侦察

  • 目标网站:http://www.XXXX.com.cn
  • 主要测试点:登录页面(唯一动态交互点)
  • 初步测试:
    • 尝试常见弱口令:admin/admin
    • 测试SQL注入:or 1=1--等万能密码
    • 结果:仅返回"用户不存在",无明确注入迹象

1.2 暴力破解发现突破口

  • 使用Burp Suite对登录页面进行暴力破解
  • 意外发现:爆破过程中数据库报错
  • 初步判断:可能存在SQL注入漏洞
  • 直接结果:通过爆破成功获取管理员账号密码

2. 后台测试与注入点确认

2.1 后台功能分析

  • 成功登录后功能:
    • 发布网页信息
    • 查看用户身份信息
    • 资料更新上传点

2.2 上传点测试

  • 发现资料更新上传功能
  • 测试结果:
    • 上传限制严格,无法直接利用
    • 发现相关参数:address、id等

2.3 注入点确认

  • 对id参数进行测试:
    • 使用单引号'测试,触发数据库报错
    • 确认存在SQL注入漏洞

3. 注入技术细节

3.1 字段数探测

  • 使用order by n --+技术
  • 测试过程:
    • n=4时数据库报错
    • n=2时执行成功
  • 结论:注入点有2个字段

3.2 绕过过滤技术

  • 发现过滤:
    • 逗号被过滤
    • 大于号等特殊字符被过滤
  • 绕过方法:
    • 使用union select * from ((select sleep(5))a JOIN (select version())b)
    • 成功执行sleep(5)函数,确认注入存在

3.3 暴力破解列名

  • 技术原理:
    • and 列名 is not null--构造
    • 当列名不存在时报错
  • 实施步骤:
    1. 使用Burp Suite选中参数作为爆破对象
    2. 加载SQLMap自带字典作为payload
    3. 通过响应差异判断列名是否存在

4. 高级利用技术

4.1 文章分享功能发现

  • 发现文章分享功能
  • 生成特定URL:http://XXX/asd/id=1998
  • 此URL成为新的注入点

4.2 SQLMap自动化利用

  • 完整利用命令:
    sqlmap -u "url" --random-agent --dbms=mysql
    
  • 成功操作:
    • 列出数据库:--dbs
    • 文件读取:--file-read="/etc/passwd"

5. 防御建议

5.1 输入验证

  • 对所有用户输入进行严格过滤
  • 使用参数化查询或预编译语句

5.2 错误处理

  • 避免将数据库错误信息直接返回给用户
  • 使用统一的错误处理页面

5.3 权限控制

  • 最小权限原则:数据库账户仅需必要权限
  • 避免使用root或高权限账户连接数据库

5.4 其他措施

  • 定期进行安全测试和代码审计
  • 使用WAF作为额外防护层
  • 及时更新和修补数据库系统

6. 总结

本案例展示了从发现SQL注入点到最终利用的全过程,重点包括:

  1. 通过异常响应发现注入点
  2. 绕过各种过滤限制的技术
  3. 结合手工测试和自动化工具的综合利用
  4. 从低权限到高权限的逐步提升过程

此案例强调了即使看似简单的网站也可能存在严重的安全漏洞,开发人员和安全测试人员都应重视SQL注入这类基础但危害巨大的安全问题。

SQL注入漏洞实战教学文档 1. 漏洞发现过程 1.1 初始侦察 目标网站:http://www.XXXX.com.cn 主要测试点:登录页面(唯一动态交互点) 初步测试: 尝试常见弱口令:admin/admin 测试SQL注入: or 1=1-- 等万能密码 结果:仅返回"用户不存在",无明确注入迹象 1.2 暴力破解发现突破口 使用Burp Suite对登录页面进行暴力破解 意外发现:爆破过程中数据库报错 初步判断:可能存在SQL注入漏洞 直接结果:通过爆破成功获取管理员账号密码 2. 后台测试与注入点确认 2.1 后台功能分析 成功登录后功能: 发布网页信息 查看用户身份信息 资料更新上传点 2.2 上传点测试 发现资料更新上传功能 测试结果: 上传限制严格,无法直接利用 发现相关参数:address、id等 2.3 注入点确认 对id参数进行测试: 使用单引号 ' 测试,触发数据库报错 确认存在SQL注入漏洞 3. 注入技术细节 3.1 字段数探测 使用 order by n --+ 技术 测试过程: n=4时数据库报错 n=2时执行成功 结论:注入点有2个字段 3.2 绕过过滤技术 发现过滤: 逗号被过滤 大于号等特殊字符被过滤 绕过方法: 使用 union select * from ((select sleep(5))a JOIN (select version())b) 成功执行sleep(5)函数,确认注入存在 3.3 暴力破解列名 技术原理: and 列名 is not null-- 构造 当列名不存在时报错 实施步骤: 使用Burp Suite选中参数作为爆破对象 加载SQLMap自带字典作为payload 通过响应差异判断列名是否存在 4. 高级利用技术 4.1 文章分享功能发现 发现文章分享功能 生成特定URL:http://XXX/asd/id=1998 此URL成为新的注入点 4.2 SQLMap自动化利用 完整利用命令: 成功操作: 列出数据库: --dbs 文件读取: --file-read="/etc/passwd" 5. 防御建议 5.1 输入验证 对所有用户输入进行严格过滤 使用参数化查询或预编译语句 5.2 错误处理 避免将数据库错误信息直接返回给用户 使用统一的错误处理页面 5.3 权限控制 最小权限原则:数据库账户仅需必要权限 避免使用root或高权限账户连接数据库 5.4 其他措施 定期进行安全测试和代码审计 使用WAF作为额外防护层 及时更新和修补数据库系统 6. 总结 本案例展示了从发现SQL注入点到最终利用的全过程,重点包括: 通过异常响应发现注入点 绕过各种过滤限制的技术 结合手工测试和自动化工具的综合利用 从低权限到高权限的逐步提升过程 此案例强调了即使看似简单的网站也可能存在严重的安全漏洞,开发人员和安全测试人员都应重视SQL注入这类基础但危害巨大的安全问题。