漏洞挖掘-记一次有趣的逻辑漏洞挖掘
前言
此文章是小白的学习笔记,请不要利用文章内相关知识点进行非法渗透,仅做学习经验思路参考使用,产生的一切后果与文章作者无关。实战案例已上交src平台,实战案例已经进行打码处理,请遵守网络安全法律法规,禁止未授权测试。若有侵权请联系我删除,感谢!
简述
某天心血来潮想挖挖逻辑漏洞,想挖一下登录框处的逻辑漏洞,就简单的信息收集。随便找的一个登录框网站进行挖掘,最后发现注册点、找回密码处存在逻辑缺陷,可以通过一个手机号注册另一个手机号、可以修改userid值进行垂直越权进行任意密码重置获得后台权限。
1、信息收集
登录框漏洞挖掘信息收集思路
fofa语法
host="com" && body="login/findpwd"
host="com" && body="登录"
host="com" && body="注册"
通过浏览器
site:com intext:注册
site:com body:注册
site:com title:注册
通过钟馗之眼、360等等
2、找功能点
潦草的进行信息收集找到一个登录框功能点,发现有注册和找回的逻辑功能点,这种类型的功能点一般有任意用户注册就有极大可能有任意用户密码重置
3、挖掘漏洞
案例一:任意用户注册漏洞
-
简述
任意用户注册漏洞,由于开发人员没有严格校验注册,或者是逻辑上有缺陷,导致攻击者可以进行任意用户注册。 -
漏洞思路
由于此注册处没有校验手机号与验证码,导致我们可以利用自己的手机号正常注册。获取到验证码后把注册手机号修改成任意用户即可。
我们通过自己的手机号正常注册得到验证码(155254)然后抓包修改自己的手机号为测试手机号发现成功注册
发现注册成功
案例二-垂直越权导致管理员密码重置获得管理员后台权限
- 漏洞思路
受到此网站有任意用户注册的启发,由于没有校验验证码与手机号是否匹配导致任意用户注册,那么我想此网站会不会存在任意用户密码重置漏洞呢
在我正确走流程找回密码的时候,仔细抓取数据包,发现修改密码的数据包与验证码是分开的,那么我就在想,是不是修改密码和获取验证码流程是独立的呢,也就是修改密码没有与手机号相互校验。我单独抓取修改密码的数据包发现可以无限制提交,那么确定修改密码是独立流程,没有校验用户身份。
这里的思路是
正确走流程找回密码>验证码正确填>由于修改密码流程没有进行用户校验,抓取修改密码的数据包>修改参数即可任意用户密码重置
输入已经注册好的手机号158********
获取验证码601959
发现修改密码数据包中并没有用户校验,数据包中没有验证码参数,那么此处修改密码就是和获取验证码流程独立了,也就是说刚刚获取验证码是纸老虎。找回密码处校验用户与修改密码流程没有层层校验,导致逻辑缺陷。
修改密码数据包有三个参数,为重置密码、用户名、用户userid。此处的关键参数为userid,而且id是可遍历参数,一般来说userid为1就是管理员的id,我们碰碰运气把loginname参数改成管理员账户admin,userid改为1。发现密码重置成功,通过修改密码处更改userid造成垂直越权获得后台管理员权限,后台敏感信息太多就不截图了
漏洞总结
这里运气好,猜到admin的userid是1,修改了管理员密码,然后成功进入管理员后台。泄露大量信息,也知道所有用户的用户名和id,也可以进行任意用户密码重置了。其实此网站有此漏洞主要原因就是找回密码流程没有相互校验,校验手机验证码与修改密码流程独立,并且在数据包有可遍历参数userid。还有就是注册流程只校验手机号与验证码是否正确,没有校验手机号与验证码是否匹配,导致可以用自己手机号注册任意手机号。
修复建议
1、校验手机号与验证码是否匹配,不能只判断验证码是否正确。
2、增强验证码复杂度
3、修改密码和验证码校验不要完全独立,严格相互验证重置密码几个步骤。