1. 逻辑漏洞主要产生的位置有哪些?
逻辑漏洞通常源于业务逻辑设计缺陷或实现错误,常见位置包括:
身份认证与授权:登录、注册、密码找回、权限校验等环节。
数据处理:表单提交、参数验证、数据流转(如金额篡改、订单状态伪造)。
业务流程:支付、退款、优惠券使用、库存管理等。
验证码机制:验证码生成、验证、有效期管理。
会话管理:Session 固定、会话劫持、超时设置。
2. 登录处存在的逻辑漏洞有哪些?
暴力破解:无验证码或频率限制,可通过穷举密码登录。
验证码绕过:验证码未严格校验(如前端验证、可复用)。
弱口令校验:密码复杂度要求过低(如仅 6 位数字)。
用户名枚举:通过错误提示区分 “用户名不存在” 与 “密码错误”。
认证绕过:直接访问登录后页面(未验证 Session)或利用逻辑缺陷跳过验证。
3. 验证码处存在的逻辑漏洞有哪些?
前端验证漏洞
漏洞原理:仅在前端进行验证码验证,后端未做校验。
绕过方式:直接抓包,绕过前端验证,进行跑数据包操作,因为没有验证码的阻碍。
验证码未校验漏洞
漏洞原理:设置了验证码但未进行有效校验。
绕过方式:乱输验证码也能成功登录。
验证码可重复使用漏洞
漏洞原理:Session 中的验证码未清空,可重复使用。
绕过方式:如当前验证码为 1111,登录失败后验证码虽变,但输入 1111 仍会被判定正确,可抓包重放验证码请求,多次使用同一验证码。
验证码空值绕过漏洞
漏洞原理:未对验证码参数进行必填校验。
绕过方式:抓包后去掉验证码传参,如登录参数为
user=admin&password=admin&yzm=4123
,去掉yzm
参数后,直接传参user=admin&password=admin
,即可绕过验证码机制。
验证码干扰过低漏洞
漏洞原理:验证码的干扰程度不足,容易被脚本识别。
绕过方式:使用脚本轻松识别验证码,实现绕过。
验证码回显到客户端
漏洞原理:响应包直接返回验证码(如 {“code”:”1234″} )。
绕过方式:抓包获取验证码,无需接收短信 / 邮件。
验证码可控制漏洞
漏洞原理:验证码包含在 URL 中,作为 URL 传参。
绕过方式:将 URL 设置为固定值,从而控制验证码。
验证码有规则漏洞
漏洞原理:验证码的生成有一定规则,如为时间戳的后 6 位或通过 rand 函数生成有规律的随机数。
绕过方式:根据规则推测出验证码。
万能验证码漏洞
漏洞原理:存在无论输入什么,只要输入特定验证码(如 000000)就能绕过的情况。
绕过方式:输入万能验证码,如 000000。
验证码藏在 cookie 里漏洞
漏洞原理:验证码参数存在于 cookie 中。
绕过方式:分析 cookie,获取验证码参数。
4. 支付处存在的逻辑漏洞有哪些?
修改支付价格:在订购、确认信息、付款三个步骤中尝试修改价格,可尝试小数目或负数。
修改支付状态:未对支付状态的值跟实际订单支付状态进行校验,抓包修改决定支付或未支付的参数为支付状态的值从而达到支付成功。
修改商品数量:修改数量值为负数,导致金额变为负数,产生支付问题。
修改附属值:包括修改优惠券金额和积分金额,若未做好校验,可实现 0 元支付等。
修改支付接口:抓包修改支付接口为不存在的接口,若没做好处理会支付成功。
重复支付:未对订单多重提交进行校验,可导致无限制刷取相关资源。
最大额支付:修改支付金额值或附属值为最大值,若逻辑设计有问题,支付金额会变为 0。
无限制试用:试用接口没做好分配,导致可无限制试用商品。
支付回调漏洞:伪造支付成功通知(如篡改回调参数)。
越权支付:修改用户 ID 为其他用户 ID,用其他用户账号支付自己的商品。
5. 密码找回处的逻辑漏洞有哪些?
验证码绕过:同登录处的验证码漏洞。
Session 覆盖:同时找回多个账号密码时,后一个 Session 会覆盖前一个,导致权限混淆。
流程绕过:业务流程未校验前置步骤(如旧密码验证、身份信息确认),允许直接访问后续页面。
越权修改密码漏洞:未校验当前用户与目标账号的绑定关系,允许通过修改参数越权操作。
6. 登录框的攻击面矩阵如何构建?有哪些常见攻击方式?
攻击面矩阵从攻击者视角分析登录框的潜在漏洞点:
输入验证:
SQL 注入、XSS、代码注入(如未过滤特殊字符)。
认证机制:
暴力破解、弱口令、会话固定、认证绕过。
验证码:
绕过、复用、预测、回显。
协议安全:
明文传输(HTTP)、重放攻击、中间人攻击。
逻辑缺陷:
用户名枚举、多因素认证绕过、错误提示泄露信息。
7. 如何避免逻辑漏洞的产生?
代码层面修复
补充权限校验代码(如越权漏洞中添加用户 ID 与数据 ID 的绑定校验)。
完善流程状态控制(如密码找回流程添加步骤状态检查)。
架构层面优化
引入权限中间件,对所有接口进行统一的权限校验。
使用分布式事务解决支付等场景的条件竞争问题。
安全测试强化
手动测试业务流程(如越权、流程绕过),使用 Burp Suite 等工具抓包分析。
8. 未授权概念是什么?常见的未授权漏洞有哪些?
未授权指攻击者绕过身份验证或权限校验,访问受保护资源。
常见漏洞类型:
Jboss 未授权访问
vnc 未授权访问
Jenkins 未授权访问
ldap 未授权访问
Redis 未授权访问
elasticsearch 未授权访问
MenCache 未授权访问
Mongodb 未授权访问
Rsync 未授权访问
Zookeeper 未授权访问
Docker 未授权访问
9. 什么是越权漏洞?有哪些分类?每一类常见的有哪些?
越权漏洞指用户超出其权限范围访问资源,分两类:
水平越权(Horizontal Privilege Escalation):
访问其他用户的相同权限资源(如修改他人个人信息)。
常见方式:
ID 遍历(如修改 URL 中的用户 ID);
参数篡改(如
user_id=1
改为user_id=2
);会话劫持(窃取他人 Session)。
垂直越权(Vertical Privilege Escalation):
低权限用户获取高权限(如普通用户访问管理员页面)。
常见方式:
未验证权限的接口(如直接调用管理员 API);
角色值篡改(如
role=user
改为role=admin
);会话固定(强制管理员使用已知 Session)。
10. 越权的防御措施有哪些?
前后端双重校验,同时对用户输入信息进行校验。
执行关键操作前验证用户身份及是否具备操作数据权限。
敏感操作让用户再次输入密码或其他验证信息。
从加密认证 cookie 中获取当前用户 id,或在 session、cookie 中加入不可预测、不可猜解的 user 信息,防止修改。
加密资源 ID,防止攻击者枚举 ID,对敏感数据特殊化处理。
对可控参数严格检查与过滤,永远不要相信来自用户的输入。
未授权请求返回 403 而非 404(避免信息泄露)。
11. 变量覆盖原理是什么?变量覆盖相关函数有哪些?防御措施有哪些?
变量覆盖指攻击者通过修改外部输入(如 URL 参数)覆盖程序内部变量,导致非预期行为。
原理:
程序直接将用户输入赋值给变量(如
$$
、extract()
、parse_str()
);未过滤特殊字符(如
&
、=
)导致变量被篡改。
相关函数(以 PHP 为例):
extract()
:将数组键名转为变量名;parse_str()
:解析字符串为变量;$$
:可变变量(如$$name = 'value'
);import_request_variables()
:导入 GET/POST 变量。
防御措施:
禁用危险函数(如
import_request_variables
);严格控制变量覆盖范围(如白名单);
避免直接使用用户输入(如先验证再赋值);
配置
register_globals = off
(PHP 5.4+ 默认关闭)。
12. 身份认证漏洞最常见的是?
弱口令 / 默认口令:用户使用简单密码(如
123456
)或系统保留默认密码(如admin/admin
)。明文传输:密码在登录时以明文形式发送(未加密),可被中间人截获。
认证绕过:通过跳过登录逻辑(如直接访问后台 URL)、修改参数(如
isLogin=true
)绕过认证。会话固定:攻击者预先获取会话 ID(如未登录时的 Cookie),诱导用户使用该 ID 登录,之后复用该 ID 冒充用户。
密码找回逻辑漏洞:如验证码可复用、找回链接未过期、验证手机号 / 邮箱时未校验所有权。
多因素认证缺失:仅依赖单因素(如密码),无二次验证(如短信验证码、U 盾)。
会话超时设置不合理