(一)漏洞描述
这个漏洞属于逻辑漏洞,逻辑漏洞是指开发者在开发过程中,实现业务上出现了逻辑上的漏洞。之所以出现逻辑漏洞,是因为一些开发者,在开发过程中,第一考虑是怎么实现功能,特别是一些新入行的开发者,能实现某个业务,对他们来说,都是一个难题,而没有考虑安全性。
这登录绕过漏洞是在身份验证过程中出现,这次登录绕过漏洞产生的原因:开发采用状态码来作为登录识别的参数。在用户输入账号和密码之后,点击提交,数据发送到后端服务器,服务器通过查询数据库,用不同的状态码来表示不同的响应,然后给前端发送这些状态码,前端接受之后,根据状态码,给予是否登录。
如果攻击者在过程中,拦截数据包,然后修改数据包的状态码,改为正确登录的状态码,这样的话,不管用户输入什么账号和密码,只要拦截响应数据包,修改数据包的状态码为给予登录的状态码,身份验证就形同虚设。
(二)漏洞过程描述:
- 在url中输入网址https://xxx.com,先用若口令账号admin,密码:123456,登录,发现用户不存在,这里可以测试爆破账号
2、按F12,,进入调试器,查看js代码,发现网页是通过状态码,进行判断是否通过,
其中,200是成功通过,201是用户不存在,202是密码不正确,
3、接下来尝试登录绕过,还是admin-123456,点击登录,然后用bp拦截数据包,之后右键,选择拦截,选择拦截请求的响应,点击放行
4、修改数据包,code字段应该就是状态码,改为200,is_admin字段应该是判断是否是管理员权限,索性也改为1,nick_name字段应该是用户名,因为之前用admin登录,显示用户不存在,nick_name字段也没有值,大概率是用户名,为了保险,就给nick_name赋值为admin,如图,修改结束之后,点击放行
4、点击放行,然后关闭bp的拦截,返回浏览器,发现已经成功进入后台,结果发现,这个网址什么都没有,应该是被遗弃。