原理:验证码的校验分为客户端校验和服务器端校验,前者是将输入的验证码在本地进行校验,不传到服务器上,在代码页就可以看到相应代码,后者是将用户输入的验证码与服务器端进行对比,比对成功才能登陆。
服务器端(on server):
在进行测试时,首先要看验证码是前端验证还是后端验证,我们可以随意抓个包;
将数据包发送到重发器中,修改验证码,检查后端是否会校验验证码
- 验证码正确的返回值:
- 验证码置空后的返回值:
- 输入错误验证码后的返回值:
可以看到后端进行了验证码的检查。
当我们再次输入正确验证码后,bp中页面验证码已经刷新,但是旧验证码依然通过了校验,返回用户名或密码不存在,说明我们的旧验证码只要不刷新就能一直用。
那么我们可以不用管验证码的问题,直接intruder!
放入payload
最后爆破出结果
客户端(on client):
前端验证时,我们需要输入正确的验证码才能抓到包,这一点和后端验证时不一样的。
输入正确验证码后,页面返回用户名或者密码不存在
修改验证码,再次发送
仍然返回用户名不存在,说明虽然验证码被传入了后端,但是并没有在后端校验,这一点也可以看页面的源代码,
检查验证码的函数被写在了前端代码中,因此我们接下来开始破解!
中间步骤同上
最后得到结果