逻辑漏洞 - 密码重置

admin 2022年1月21日01:12:06评论129 views字数 2035阅读6分47秒阅读模式

逻辑漏洞 - 密码重置

前言、


任意用户密码重置漏洞在渗透测试中属于逻辑漏洞的一种,形成的原因是开发者在开发时没有对各项参数进行准确的校验从而导致此漏洞的诞生。

#挖掘方法


01、验证码不失效
测试方法:输入目标手机号,获取验证码随意输入验证码1234点击下一步拦截数据包进行爆破,通关枚举找到真实正确的验证码。

总结:找回密码的时候获取的验证码缺少时间限制,仅判断了验证码是否正确,未判断验证码是否过期。

02、验证码直接返回
测试方法:输入目标手机号,点击获取验证码,并观察返回包即可,在返回包中得到目标手机号获取的验证码,进而完成验证,重置密码成功。


总结:由于获取的验证码由客户端生成,并直接返回在Response内容里面。

03、验证码未绑定用户
测试方法:输入自己的手机号接收验证码,提交时拦截数据包,把自己的改成他人的手机号进行测试,成功重置他人密码。

总结:输入手机号和验证码进行密码重置的时候,仅对验证码是否正确进行了判断,未对验证码与手机号是否匹配做验证。

04、修改接收的手机或邮箱
测试方法:输入用户名点击获取验证码,修改接收验证码的手机号为自己的手机号码,后使用自己手机接收到的验证码提交进行验证。

总结:用户名,手机号,验证码三者没有统一进行验证,仅判断了三者中的手机号(邮箱),和验证码是否匹配正确,如果正确则判断成功并进入下一流程。


05、本地验证的绕过
测试方法:输入错误验证码,修改返回包,把错误改成正确,即可绕过验证步骤,最终重置用户密码。

总结:客户端在本地进行验证码是否正确的判断,而该判断的结果也可以在本地修改,最终导致欺骗客户端,误以为输入了正确的验证码。

06、跳过验证步骤
测试方法:先正常修改密码走一遍,记录通过验证码后输入密码的页面信息,如url再重新输入用户名在验证码页面输入url跳转到修改密码页面进行修改。

总结:对修改密码的步骤,没有做校验,导致可以直接输入最终修改密码的网址进行密码修改。

07、未校验用户字段的值
测试方法:使用自己的用户信息进行验证,到修改密码处拦截数据包,修改数据包中的用户信息,导致密码重置成功。


总结:在整个重置密码的流程中,只对验证码和手机号做了校验,未对后面设置新密码的用户身份做判断导致在最后一步通过修改用户身份来重置他人密码

08、修改密码处id可替换
测试方法:个人主页,修改自己的密码,抓取数据包,替换数据包中用户对应的id值,即可修改他人密码。

总结:修改密码的时候,没有对原密码进行判断,且仅根据id的值进行判断

09、Cookie值替换
测试方法:输入目标账户,点击下一步,可以获取目标对应得cookie信息,再正常修改账号密码,到最后一步得时候,替换目标得Cookie,导致任意密码重置成功。

总结:重置密码走到最后一步的时候仅判断唯一的用户标识Cookie是否存在,并没有判断该Cookie有没有通过重置密码过程的验证,导致可替换Cookie替换他人的密码。


10、修改信息时替换字段值
测试方法:保存个人信息时,拦截数据包,发现手机号的参数为mobieNo,通过页面源代码发现保存用户名的为login,修改mobieNo为login,手机号为他人用户名,发送数据包他人密码和自己一样。

总结:在保存个人信息时,用户的密码也被当做字符按执行了,而且是根据参数login隐藏函数执行,这样就导致了修改隐藏login的值修改特任密码。

11、正确验证码修改他人密码
测试方法:正常步骤,点击忘记密码,输入用户id获取邮箱,再返回上一步,输入受害者id,输入前者的验证码点击下一步发现成功跳转到修改密码界面。

总结:此问题出现原因在于验证码没有跟账号做绑定,验证时只做了验证码是否有效的判断。

12、参数隐藏
测试方法:输入用户名时抓包,复制用户参数,输入正确密保跳转到修改密码页面,输入密码进行修改拦截数据包发现用户参数不可见,在密码前面添加用户参数,并把参数值修改为他人参数值,即可修改他人密码。

总结:隐写并不能解决漏洞本身问题。

#案例分享


1、某cms任意密码重置漏洞复现

先注册两个账号,分别为test1和test2


逻辑漏洞 - 密码重置

登录test1账号,设置修改密码时的问题


逻辑漏洞 - 密码重置


退出账号,输入test1账号,输入设置的密保问题

逻辑漏洞 - 密码重置


逻辑漏洞 - 密码重置


设置新密码,点击完成时抓包发现用户ID


逻辑漏洞 - 密码重置

逻辑漏洞 - 密码重置


修改test1为test2,发送数据包发现修改成功,登录test2账号成功


逻辑漏洞 - 密码重置

2、参数隐藏?


注册一个账号

逻辑漏洞 - 密码重置


这里我注册的账号名为:xxx


逻辑漏洞 - 密码重置


注销登录,选择密码找回


逻辑漏洞 - 密码重置


输入用户名xxx,点击下一步的时候利用burp工具进行拦截数据包


逻辑漏洞 - 密码重置

这里需要注意下数据包中的&TxtUserName=xxx参数


逻辑漏洞 - 密码重置


跳转到密码修改页面,进行修改密码

逻辑漏洞 - 密码重置

点击修改密码的同时,使用burp抓包


逻辑漏洞 - 密码重置

这里看到在数据包中并未显示用户的id,盲猜是隐藏了,下一步在数据包&TxtPassword=12345678前面添加:&TxtUserName=xxx,并把xxx修改成管理员用户admin


逻辑漏洞 - 密码重置

显示修改成功,登录下试试,登录成功


逻辑漏洞 - 密码重置

逻辑漏洞 - 密码重置


逻辑漏洞 - 密码重置

本文始发于微信公众号(疯猫网络):逻辑漏洞 - 密码重置

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月21日01:12:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   逻辑漏洞 - 密码重置https://cn-sec.com/archives/504308.html

发表评论

匿名网友 填写信息