目录
登录口枚举的防与攻
验证码防御
验证码不刷新
- 无条件
只要不刷新页面/不请求验证码接口,之前的验证码一直有效 - 有条件
登录失败之后,系统会打开一个新页面或者弹出一个新的警告窗口,提示用户登录失败,点击确定后返回登录界面且验证码刷新。这种情况下,只要不关闭新窗口或弹窗,验证码不刷新
通用验证码
测试用验证码未删除,phpstudy官网出现过
验证码出现条件可绕过
登录错误次数达到一定时才出现验证码
- 删cookie
- 登录错误次数写在cookie/post参数
验证码可控/可获取/可预测
- 内容可控
- 短信验证码发送目标可控
- 验证码藏在源码/cookie
- 验证码固定组合+组合数量有限
验证码可枚举
4/6位数字且无错误次数限制
验证码可识别
- PKAV 的 HTTP Fuzzer
- 自己写工具
- 打码平台
逻辑/设计问题
- 空值绕过/验证码无效
- Fuzz
IP试错限制
同一IP登陆错误次数过多时封IP
IP可伪造
服务端通过以下header头获取IP
X-Forwarded-For:253.22.36.225
X-Forwarded-Host:253.22.36.225
X-Client-IP:253.22.36.225
X-remote-IP:253.22.36.225
X-remote-addr:253.22.36.225
True-Client-IP:253.22.36.225
X-Client-IP:253.22.36.225
Client-IP:253.22.36.225
X-Real-IP:253.22.36.225
https://github.com/TheKingOfDuck/burpFakeIP
识别手段可绕过
删cookie
用户试错限制
同一用户登陆错误次数过多时封用户
对正常业务产生干扰
恶意利用规则
识别手段可绕过
删cookie
参数加密
部分加密导致可枚举
密码加密,则同一密码枚举用户名
加密规则泄露导致加密可逆
js文件
token限制
第一条请求返回的token,加在第二次请求里一起提交才算合法请求
以此类推
burp pitchfork+GrepExtract
其他风险
报错泄露敏感信息
数据库报错
- 某公安后台枚举过程中报错泄露数据库名+用户名,去年HW时遇到的,当时是个纯小白,不知道这也能交,虽然交了也还是前十守门员【哭哭哭】
框架报错
TP框架某些条件下报错泄露数据库用户名密码,最近的某篇文章看到的
返回信息泄露敏感信息
根据返回判断用户是否存在/密码是否错误
- '用户不存在' or '密码错误'
- 字段数相同=>burp正则匹配固定位置返回信息
假防御
逻辑/设计问题
Fuzz
其他功能泄露用户名存在与否
- 忘记密码
- 注册