当前位置:   article > 正文

逻辑漏洞-----登录前端验证漏洞_漏洞中改变路径js触发登录

漏洞中改变路径js触发登录

忘记密码----给邮箱/手机发验证码

当在"忘记密码"页面,输入邮箱或者手机号后,网站会给手机或者邮箱发送验证码。用户输入验证码后,服务器会将其与正确的验证码进行对比,若相同则验证成功并进行下一步操作。网站还贴心的考虑到:万一用户手输错了怎么办?此时,有两个选择

1.客户重新填验证码。网站重新给手机发一条短信------>短信轰炸漏洞。(一条短信一毛钱)

2.验证码再输一遍。----->验证码爆破漏洞

对于第二种,攻击方法和图片验证码相似,如果是四位,没有多余的防御措施,直接爆破即可。

四位,10000种可能,0-9直接爆破即可

忘记密码---前端验证绕过

客户端验证是不安全的,可能导致任意账号注册,登录及重置任意用户密码等一系列问题

1.直接返回明文验证码输入手机号后,点击获取验证码。按f12调出开发者工具,然后在网络中,监听到两条json数据

2.返回加密后的密码验证加密后,加密报文在应答数据包中,返回客户端,用户解密后即可获取验证码

忘记密码----设置新密码时改他人密码

修改密码时可否修改参数(用户名/邮箱/手机)达到修改其他用户密码的目的

首先在一个网站注册一个用户,然后修改这个用户的密码,通过抓取数据包中的参数判断哪里是校验用户,通过修改关键参数,达到任意修改其他用户密码的目的。

案例如下:

1.先到网站注册一个账号,然后去忘记密码

 2.点击下一步后,分析报文,看到报文中传递了用户名和邮箱,因此判断此数据包是用来判断是否存在此用户名,用户名和邮箱是否匹配的

3.攻击者收到网站给的验证码(到这里都是正常的)

4.继续填写验证码到下一步

碰到验证码,就可以将我们所学的验证码绕过--爆破等进行尝试

5.到了修改密码的页面,我们修改下密码,然后抓包

 

 对 username的值进行用户名爆破,可以修改别人的密码

6.发送后,发现修改成功;

漏洞点:在最后一步没有对校正的账号和修改的密码进行匹配,导致可以先通过用户验证去修改别人密码

忘记密码----链接的形式----链接token参数可逆

通过邮箱找回密码时,邮件中会出现一个含有token的重置url,该token即为重置凭证

从经验来看,开发人员习惯以时间戳,递增序号,关键字段(如邮箱地址)等三类信 16/40 息之一作为因子,采用某种加密算法或编码生成token,攻击者可以基于能收集到的关键字段,用常见加密算法计算一遍,以判断是否可以预测出token。下面举两个案例加以说明。

实验1:基于时间戳生成token

判断加密方式小技巧:看他的位数,32位可能是md5的

确定攻击流程:怎么确定admin的

先发送一个 aaa的重置链接---->返回一个时间戳1

 

再输入admin --->不返回时间戳

没有返回,为空

bbb重置链接 -----> 时间戳2

 

则 admin的时间戳一定在 aaa和 bbb 之间,拿到admin的时间戳之后就构造url即可

这个数字就是admin的时间戳区间,对这个区间进行爆破 ---->在bp中的intruder模块,对爆破字段进行md5加密处理

 

 

时间戳转化时间的链接

时间戳(Unix timestamp)转换工具 - 在线工具 (tool.lu)

实验2 基于关键字段生成的token

如某网站的找回密码功能,填好表格,发送请求

 通过抓包发现了表单,username就是邮箱,rvcode应该是验证码,sid就不懂,可能是用户在数据库中的id吧

 

2.重置的关键参数为key,直接丢到md5发现无法解密,对这个key进行组合,如 用户名+验证码 然后丢到md5里加密,尝试通过排列组合的方式去逆向破解这个key。最后发现这个key的值为 md5(用户名+sid)

3.猜测到key的生成算法后,就可以尝试直接对其他账号重置密码

4.类似的key算法还有 md5(手机号+验证码) , 或者 md5(手机号+验证码) + asdf 等这些字符;如果没有源码,可以尝试多次发包,找出规律。

 图中的加密方式就是将 md5(手机号码+验证码)再截取前10位,再加上固定的字符"F".

忘记密码---服务端验证逻辑缺陷

1.登录状态下,修改自己的密码时,通过修改截获的数据包,将部分参数替换,从而将他人密码修改为自己制定的密码;换句话说,就是在修改密码时,抓包,将账号换成别人的

可以看到,用户名这一栏是锁死的不让你直接改(可能可以通过抓包修改) 

2.具体的抓包数据

当然,有可能cookie中还有一种防御手段,但在这里不讨论

3.修改数据 

 4.拿修改后的账户密码去登录

 忘记密码----参数带用户名等多阶段验证

密码找回流程一般包括获取短信验证码,校验短信验证码是否有效,设置新密码等三个步骤

在第二步,校验短信验证码是否有效的结果应保存在服务端,某些网站未在服务端保存而是错误的将结果状态值下发客户端,后续又依靠前端JS判断是否可以进入第三步

那么,更改应答包中的状态值,可重置其他用户的密码。

案例1:在密码找回页面,用攻击者手机号进入密码找回全流程 

输入短信验证码 033128,输入图片验证码,输入短信验证码并提交

服务端校验通过后,系统应答如下

( 想要修改失败的,就需要知道成功的长什么样)

简单分析发现,校验通过时服务端并未向客户端set-cookie,猜测服务端并未记录校验状态,是否进入设置新密码页面完全是由前端js基于应答状态决定的。

那么,即便我没有短信验证码,通过将服务端下发给客户端的校验状态从“失败”改为“成功”也能成功重置找回账号密码。

具体而言,以信息搜集时找到的客服手机号为例

输入手机号,获取短信验证码,输入图片验证码,输入错误的短信验证码123123后提交

 我们随便输入的验证码肯定是回复错误的

 拦截该应答,用前面成功的替换

 这样就顺利进入修改密码的页面了

总结:先用自己的,做一遍正确的,并抓包保存。

然后拿别人的,在拦截返回包,并用正确的返回包替换错误的返回包,实现绕过

重置密码-重置后的默认密码

有些大型公司或者学校的网站上,会有介绍用户注册的指导手册,里面会介绍用户名和默认密码

这时候可以先用默认密码去爆破用户名,或者寻找重置密码的选项,重置密码后,用默认密码登录

因为可能存在未授权修改网站用户密码漏洞

可能需要用到学校的vpn来进行内网访问

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/610675
推荐阅读
相关标签
  

闽ICP备14008679号