12.3 接口参数账号修改测试
12.3.1 测试原理和方法
找回密码功能逻辑中常常会在用户修改密码接口提交参数中存在传递用户账号的参
数,而用户账号参数作为一个可控的变量是可以被篡改的,从而导致修改账号密码的凭证
或修改的目标账号出现偏差,最终造成任意账号密码修改的漏洞,如图 12-11 所示。
图 12-11 修改密码接口存在 email 参数
通常在找回密码逻辑中,服务端会要求用户提供要修改的账号,然后给这个账号发送
只有账号主人才能看到的凭证。比如给这个账号主人绑定的邮箱或手机号发送验证码,或
者找回密码的链接,这样可以保证只有账号主人才可以看到这些凭证。但是如果服务端对
账号的控制逻辑不当,就会导致原有账号被篡改为其他账号,服务端把凭证发送给篡改后
的账号的邮箱或手机,最终造成可利用凭证重置任意账号密码的漏洞。
12.3.2 测试流程
接口参数账号修改测试流程为拦截前端请求,通过修改请求内邮箱或手机号等参数,
将修改后数据发送给服务器进行欺骗达到密码重置的目的,如图 12-12 所示。
步骤一:在某网站的找回密码功能中,当输入用户账号后会出现发送重置密码邮件的
按钮。在单击发送按钮时抓包,可以看到用户的邮箱已经出现在了数据包的 email 参数值
中,那么尝试将 email 参数修改为我们自己的邮箱会出现什么情况?如图 12-13 所示。
步骤二:修改 email 参数的值后,网站提示邮件已经发送成功,此时可以打开我们自
己的邮箱查看修改密码邮件是否收到,如图 12-14 所示。
图 12-12 接口参数修改流程
图 12-13 修改密码绑定邮箱可修改
图 12-14 发送邮件成功
步骤三:可以看到修改密码的链接已经发送到邮箱中,打开链接即可修改目标用户的
密码,尽管目标用户绑定的并不是我们的邮箱,服务端仍将邮件发送到了我们篡改后的邮
箱中,如图 12-15 所示。
图 12-15 接收到修改密码邮件
步骤四:通过上面的案例可以看到,服务端并没有校验这个邮箱是否是该账号绑定的
邮箱,而是直接向请求中的 email 参数对应的邮箱发送邮件。类似这种直接修改请求参数
的情况不仅在发送邮件时存在,如果修改密码请求中包含目标账号参数,也可以通过篡改
账号参数重置目标账号密码,如图 12-16 所示。
图 12-16 重置密码页面
例如,某个找回密码发送给用户邮件中的接口 URL 如下:
http://www.xxx.com/repwd?account=abcabc@126.com&token=1239392342234
那么只需要将 account 参数修改为我们需要的账号,如 foo@163.com,修改后如下:
http://www.xxx.com/repwd?account=foo@163&token=1239392342234
因为这里的 Token 可重复使用,这样就可以直接修改掉 foo@163.com 账号的密码了,
在测试找回密码功能模块时要留意数据包参数中的账号是否可修改。
12.3.3 修复建议
对找回密码的 Token 做一对一的校验,一个 Token 只能修改一个用户,同时一定要
保证 Token 不泄露。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论