本次案例的目标是一个企业在线培训平台。测试从最常见的登录环节开始,其界面是一个包含账号、密码和验证码输入框的登录页面。

图1:目标平台的登录界面
直接对登录请求进行抓包分析,发现账号密码为明文传输。初步尝试SQL注入,但触发了WAF拦截,常规注入路径受阻。

图2:登录请求的明文数据包
既然注入行不通,便转换思路。由于该登录存在验证码,但验证码似乎并未与特定会话强绑定,可以尝试通过脚本提取验证码,然后对用户名进行枚举爆破,目标是获取一批有效账号。
枚举脚本执行后,成功识别出十多个有效用户账号。

图3:通过脚本进行用户名枚举的结果
将获取到的账号列表导入 Burp Suite Intruder 模块进行下一步测试。接下来面临的问题是密码未知。分析业务场景:这是一个企业内训平台,账号很可能由管理员统一分发,而非个人注册。基于此,推测了几种可能性:
- 所有账号使用同一个默认密码。
- 账号密码相同(即用户名即密码)。
- 每个账号的密码由用户自行设置。
首先尝试第一种方案,将用户列表与常见密码字典进行交叉爆破,但尝试了上百个常见密码后无一命中。

图4:使用常见密码字典爆破无果
于是尝试第二种方案,即假设账号密码一致。由于账号数量不多,便手动使用“用户名/用户名”的组合进行登录测试。没想到这一尝试直接成功登录系统,并且验证了多个账号均存在此规律,这属于典型的弱口令或逻辑设计缺陷。

图5:利用账号密码一致的漏洞成功登录后台
进入系统后,重点测试增删改查等业务功能点。首先关注一个课程信息查询接口,测试是否存在SQL注入。虽然未发现注入点,但接口响应中直接返回了课程文件的服务器绝对路径。这是一个高危信号,通常意味着可能存在未授权访问或目录遍历漏洞。

图6:课程查询接口返回了敏感的文件绝对路径信息
通过观察,该接口的 courseId 参数用于指定课程。一个自然的渗透测试思路便是对该参数进行Fuzz,尝试遍历或读取其他课程文件。
对 courseId 参数进行爆破,成功获取到了系统内一系列的文件路径列表。

图7:通过参数爆破获取到的内部文件列表
从中任意选取一个文件路径进行直接访问,确认可以绕过权限校验直接读取,从而构成了一个未授权文件访问漏洞。这一系列漏洞的挖掘过程,体现了从信息收集、逻辑漏洞利用到敏感信息泄露的完整链条。

图8:通过泄露的路径直接访问内部文件
最终,该漏洞被评定为中危级别提交。在实际的渗透测试中,由浅入深、多角度尝试往往是发现深层问题的关键。更多实战技术与案例分析,欢迎在 云栈社区 交流探讨。
|