本文最后更新于 417 天前,其中的信息可能已经有所发展或是发生改变。
目标系统: https://lm.xxxxxx.com/
测试日期: 2024/02/23
测试人员:
说明:
- 本系统为生产环境,允许互联网访问
- 本次测试主要针对登录认证相关模块。
测试结果
漏洞汇总:
威胁等级 | 漏洞数量 | 漏洞名称 |
---|---|---|
高危 | 1 | 任意密码重置 |
漏洞详情:
漏洞类型 | 漏洞名称 | 漏洞位置 | 测试结果 |
---|---|---|---|
越权类 | 任意用户登录 | https://lm.xxxxxxxxx.com/login | Failed |
测试过程
点击忘记密码,发现需要账号与邮箱
收集企业信息,得到企业邮箱后缀(脱敏打码)
输入任意用户名与匹配的邮箱,爆破
常见的用户企业邮箱格式:
- 用户名全拼@邮箱后缀
- 用户名全拼+序号@邮箱后缀
- 用户名全拼+部门简写@邮箱后缀
根据相应长度分析,得到 2 个账号
且根据回显信息得知,邮箱验证码已正常发送,回显如下(图有点模糊)
response 包含一个 data 字符串,但用意暂时未知。
暴力破解邮箱验证码
不确定是否存在超时机制,暂认定理论可行,但耗时较久,切换至后台运行,继续分析
提交验证码的请求包中包含一个参数 adminId,与之前返回的 data 相同,猜测是用户唯一标识。
- 疑似上一个请求中返回的 data
- 确认。这里的 adminId 就是上个请求中返回的 data 字段
审计 JS 代码
修改密码接口 validAdminInfoSubmit,疑似无身份验证
url 为:admin/validAdminInfoSubmit
参数为:password、confirmpassword、adminid、type
adminid 已知
type 固定为 update
只需要设置两次新密码
构造数据包,发送请求
回显:密码强度不够。
尝试修改密码强度,重新发送。
回显:ok
登录系统
登录成功
风险评估
造成此次风险的主要原因为:账号可爆破、接口未授权访问。
进入系统后可获取并操作直播课程、主播信息、学员信息等关键信息,风险评估为高危,需紧急修复。
改进建议
- 找回密码处模糊化回显信息,如:系统中统一回显 true,具体是否真实返回以是否收到邮件为主;
- 登录功能、找回密码处的“发送验证码”功能及“提交验证码”功能需限制调用频率,建议调用 3 次以上增加验证码校验;
- 获取邮箱验证码时,禁止回显 adminId 等唯一标识符(如满足 4、5,此条非必须);
- 修改密码接口采用合理的身份认证(如 cookie、session 等),禁止单独使用用户唯一标识符(adminId)校验;
- 重置密码功能使用双因子认证(如输入短信验证码、邮箱验证码等);
- 其余所有非公开接口,统一按照上述第 4 条自查并修复认证机制。