【验证码机制原理】
客户端发起请求>服务端响应并创建一个新的SessionID同时生成随机验证码,将验证码和SessionID一并返回给客户端>客户端提交验证码连同SessionID给服务端>服务端验证验证码同时销毁当前会话,返回给客户端结果
【可能存在的安全问题】
客户端(on client):
- 有的网站验证码由本地js生成仅仅在本地用js验证。可以在本地禁用js,用burp把验证字段删除。
- 有的网站把验证码输出到客户端html中,送到客户端Cookie或response headers中。
- 有些网站默认不显示验证码,而是在输入错误一定数量之后才需要验证验证码,开发人员可能在Cookie中写入一个标记loginErr,用来记录错误数量,则可以不更新Cookie中的loginErr值反复提交,验证码就不会出现。
服务端(on server):
- 验证码不过期,没有及时销毁会话导致同一验证码反复可用。攻击者可以在Cookie中带固定的sessionID和固定的验证码字符串。
- 没有对验证码进行非空判断,导致可以直接删除验证码参数。
- 产生的验证码问题有限。
验证码(不刷新)固定
原因:登录密码错误之后,session中的值没有更新,验证码不变。
无条件不刷新
只要