记一次客户系统的测试--多种经典类型漏洞
字数 1787 2025-08-22 12:23:06
渗透测试实战教学:多种经典漏洞的发现与利用
0X00 前言
本教学文档基于一次真实的客户系统渗透测试案例,展示了多种经典漏洞的发现和利用过程。这些漏洞包括:用户枚举、弱口令爆破、任意用户登录、SQL注入和垂直越权。通过学习本案例,您将掌握这些常见漏洞的测试方法和利用技巧。
0X01 测试开始
1. 目标系统初始分析
目标系统提供以下功能入口:
- 账号登录
- 短信登录
- 忘记密码
这些入口点都可能成为渗透测试的突破口。
2. 用户枚举漏洞利用
漏洞发现:
通过"忘记密码"功能可以进行用户枚举测试。当输入不存在的账号时,系统会提示"手机号无效";而输入存在的账号则会显示其他信息。
利用方法:
- 使用Burp Suite等工具拦截"忘记密码"请求
- 准备手机号字典进行爆破
- 根据系统响应判断账号是否存在
字典准备技巧:
- 使用现成的手机号字典
- 使用GitHub上的手机号生成脚本(如:https://github.com/search?q=%E6%89%8B%E6%9C%BA%E5%8F%B7%E7%94%9F%E6%88%90&type=repositories)
- 根据目标所在地区生成特定号段的手机号
3. 弱口令爆破
测试过程:
- 系统存在账号锁定机制:连续5次密码错误会锁定账号
- 使用精心准备的密码字典进行爆破
- 在达到锁定阈值前成功爆破出有效凭证
密码字典优化建议:
- 日常收集常见弱口令
- 按使用频率排序(高频在前)
- 针对特定行业定制字典(如金融、医疗等行业的常用密码模式)
- 包含常见变形(如大小写变化、数字替换字母等)
0X02 漏洞深入利用
1. 任意用户登录漏洞
发现过程:
- 成功登录后系统会跳转到身份选择界面
- 通过浏览器开发者工具(F12)检查页面元素,发现隐藏的ID值
- 拦截请求修改ID参数,实现任意用户登录
技术要点:
- 关注页面隐藏字段和JS代码
- 使用Burp Suite拦截和修改请求参数
- 测试ID参数的可预测性和可遍历性
2. SQL注入漏洞
发现过程:
- 系统多个功能点存在SQL注入
- 初步使用SQLMap测试,但遇到卡顿问题
- 转入手工注入测试
手工注入步骤:
第一步:识别闭合方式
- 测试单引号:
'和''返回不同 → 可能存在注入 - 测试简单逻辑:
1 '||' 1 '=' 1和1 '||' 1 '=' 2无差异 → 非简单单引号闭合 - 测试带括号闭合:
1 ')||(1=' 1和1 ')||(1=' 2→ 确认存在括号闭合
第二步:信息收集
- 确定数据库名长度:
1 ')||(length(database())=7)and(1=' 1 - 逐字符获取库名:
1 ')||(substr(database(),1,1)='X')and(1=' 1
技术要点:
- 掌握不同闭合方式的测试方法
- 理解布尔型盲注的原理
- 熟悉substr、length等SQL函数的使用
3. 垂直越权漏洞
发现过程:
- 某功能模块提示无权限访问
- 拦截响应包,发现权限状态码为1(无权限)
- 修改状态码为0(有权限)后成功访问
利用方法:
- 使用Burp Suite拦截响应
- 修改状态码或权限标志位
- 转发响应给客户端
防护建议:
- 权限验证应在服务端完成
- 避免在客户端传输或存储权限状态
- 实现严格的访问控制列表(ACL)
0X03 总结与建议
1. 漏洞总结
本次测试发现的漏洞类型:
- 用户枚举漏洞
- 弱口令问题
- 任意用户登录漏洞
- SQL注入漏洞
- 垂直越权漏洞
2. 防护建议
通用防护措施:
- 实施安全的身份验证机制
- 使用强密码策略和账户锁定机制
- 对所有输入进行严格的过滤和验证
- 实施最小权限原则
针对具体漏洞的防护:
用户枚举:
- 统一不存在账号和存在账号的错误提示
- 实施验证码或速率限制
弱口令:
- 强制使用复杂密码
- 实施多因素认证
- 定期扫描和禁用弱口令
SQL注入:
- 使用参数化查询
- 实施ORM框架
- 最小化数据库账户权限
越权访问:
- 实施基于角色的访问控制(RBAC)
- 服务端验证每次请求的权限
- 避免客户端决定权限状态
3. 渗透测试技巧
- 字典优化:持续收集和优化字典是成功爆破的关键
- 全面测试:不放过任何输入点和功能模块
- 工具结合:自动化工具与手工测试相结合
- 响应分析:仔细分析正常与异常的响应差异
- 权限测试:始终测试水平越权和垂直越权可能性
通过本案例的学习,您应该掌握了多种常见漏洞的测试方法和利用技巧。在实际测试中,需要灵活运用这些技术,并根据目标系统的特点进行调整。