一次简单渗透测试
字数 1404 2025-08-11 22:57:12
一次简单渗透测试教学文档
1. 测试背景
- 测试对象:甲方新开发的系统
- 测试类型:授权渗透测试
- 测试地点:湖北省(根据IP属地判断)
2. 漏洞发现与利用过程
2.1 用户名枚举漏洞
发现过程:
- 尝试常规弱口令登录失败
- 发现系统对不存在的用户会返回"用户不存在"的明确提示
利用方法:
- 准备用户名字典进行枚举测试
- 通过系统返回的不同信息判断用户名是否存在
- 有效用户:返回"密码错误"
- 无效用户:返回"用户不存在"
实际结果:
- 初始用户名字典未能枚举出有效用户
- 后续通过其他途径获取了有效用户名(后门接口泄露)
2.2 验证码无效漏洞
发现过程:
- 分析系统验证流程:账号→密码→验证码
- 验证码校验在最后一步
漏洞原理:
- 验证码校验顺序错误导致可绕过
- 攻击者可以在不知道正确验证码的情况下尝试密码
利用方法:
- 固定一个任意验证码值
- 针对已知用户名进行密码爆破
2.3 未授权访问漏洞
发现过程:
- 进行目录扫描发现Swagger API UI接口文档
- 访问接口文档发现敏感接口
具体利用:
- 发现"获取当前用户信息"的接口
- 直接访问该接口获取username字段
- 确认该用户名为有效账户(登录时返回"密码错误"而非"用户不存在")
2.4 密码爆破
前提条件:
- 已获取有效用户名
- 验证码可绕过
加密分析:
- 检查前端代码发现RSA加密
- 定位到公钥(public key)
- 使用在线加密网站制作加密后的密码字典
爆破过程:
- 准备明文密码字典
- 使用获取的公钥对字典进行RSA加密
- 使用加密后的字典进行爆破
- 成功获取正确密码
3. 后续利用尝试
- 成功登录后台后:
- 寻找文件上传功能未果
- 检查Swagger文档未发现上传接口
- 未能进一步深入利用
4. 漏洞修复建议
4.1 用户名枚举修复
- 统一登录失败提示信息(如"用户名或密码错误")
- 增加登录失败延迟机制
- 实施账户锁定策略(多次失败后临时锁定)
4.2 验证码漏洞修复
- 将验证码校验提前到第一步
- 增加验证码一次性使用机制
- 加强验证码复杂度(如行为验证码)
4.3 未授权访问修复
- 生产环境禁用或限制访问Swagger等开发文档
- 对API接口实施严格的权限控制
- 敏感接口需要身份认证
4.4 密码爆破防护
- 实施强密码策略
- 增加登录失败次数限制
- 使用多因素认证
- 考虑使用Web应用防火墙(WAF)防护爆破行为
4.5 其他建议
- 定期进行安全审计
- 实施安全的开发生命周期(SDL)
- 对敏感操作增加二次验证
5. 渗透测试方法论总结
-
信息收集阶段:
- 尝试常规弱口令
- 分析系统响应差异
- 目录扫描发现敏感文件/接口
-
漏洞挖掘阶段:
- 识别验证流程缺陷
- 寻找未授权访问点
- 分析前端加密机制
-
漏洞利用阶段:
- 用户名枚举
- 验证码绕过
- 密码爆破(需处理加密机制)
-
权限提升与横向移动:
- 本案例中未能实现进一步利用
- 通常需要寻找上传点或其它漏洞链
-
报告与修复:
- 记录所有发现的安全问题
- 提供详细的修复建议
- 协助验证修复效果
6. 技术要点总结
- 响应差异分析:不同响应可能泄露系统状态信息
- 验证流程审计:校验顺序错误会导致安全机制失效
- 接口文档暴露:开发文档可能包含敏感信息
- 前端加密分析:即使有加密也可能被绕过或破解
- 漏洞链利用:通常需要组合多个漏洞实现深度渗透
本案例展示了如何通过系统设计缺陷和配置问题逐步深入系统,强调了安全开发和安全运维的重要性。