记一次网站测试引发的注入“血案”
字数 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--构造- 当列名不存在时报错
- 实施步骤:
- 使用Burp Suite选中参数作为爆破对象
- 加载SQLMap自带字典作为payload
- 通过响应差异判断列名是否存在
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注入点到最终利用的全过程,重点包括:
- 通过异常响应发现注入点
- 绕过各种过滤限制的技术
- 结合手工测试和自动化工具的综合利用
- 从低权限到高权限的逐步提升过程
此案例强调了即使看似简单的网站也可能存在严重的安全漏洞,开发人员和安全测试人员都应重视SQL注入这类基础但危害巨大的安全问题。