某网络安全培训机构的教学平台修改密码处存在逻辑缺陷漏洞

本文最后更新于 2024年7月24日 下午

前言:第一次遇到这么奇葩的漏洞,故想记录一下,可惜后面没有危害提升成功,只是一个低危(但其实没有什么危害哈哈,只是很奇葩,打破了我”看上去就做得特别好的网站或者做网安的网站不存在漏洞”的天真认知,哈哈),要是能CSRF绝对高危。因为刚出这个漏洞,厂商还未修复,不得不厚码。但是不影响看思路(其实也没有啥思路可言),目标是一家有些名气的某网络安全培训机构的教学平台

漏洞URL

https://xxxx.yyyyyy.com/login (你还真点了啊【狗头保命】)

漏洞复现

  1. 登录一个测试账号
  1. 进入平台,来到 个人设置 –> 修改密码处
  1. 看到需要填写原始密码 新密码 确认密码三项(最初我怎么发现这里有问题的呢?就是我把这三项都填相同的任意字符串时,发现提示:修改密码成功,于是我就笃定这里的代码肯定写得有问题!
  • 我当前正确的原始密码是:admin123,但是当我 “原始密码 新密码 确认密码”三项都填写:123456 时,返回了修改密码成功!!!
  1. 于是尝试使用密码:123456 登录,验证密码是否修改成功。很不幸,修改失败,看来只是前端返回了修改成功的提示信息,后端数据库中并没有修改成功
  1. 但是我不相信这里不存在漏洞,也不愿意轻易”放过”它,于是在一番尝试之下,震惊地发现:修改密码时,原始密码填写除新密码之外的任意值,用户密码都会被成功修改为新密码
  • 提示:原密码不正确,但是你先别急,直接尝试使用:123456 登录 –> 登录成功,成功在原密码错误的情况下,重置了密码
  1. 到此已经证明漏洞存在,但是光是修改自己的密码,没有任何危害,于是又辛苦要到了一个另外的账号,想测试CSRF,打一套组合拳使得低危变高危
  2. 抓最后修改提交密码的数据包,发现使用PUT,json格式提交数据,使用json传参的话对同源策略限制很死,CSRF基本没戏,尝试强制修改传参方式为普通表单提交,正常响应,但是经测试发现受害者的密码还是没有被修改成功,猜测是后端只允许json格式提交数据,于是到这里就没戏了,因为有同源策略的限制,除非又在该站点的同源站点发现XSS,利用XSS执行CSRF的POC打出组合拳

漏洞修复

正确校验原密码是否正确,修复该处逻辑缺陷