逻辑漏洞

逻辑漏洞

原创 SOAD Laboratory 安全攻防实验室 2025-04-11 09:00

逻辑漏洞

逻辑漏洞是程序设计或业务流程中存在的缺陷,攻击者可以利用这些缺陷对系统或用户造成一些安全问题。

身份认证

登录绕过

漏洞原理:登录成功或失败,前端通过判断返回包中的某个字段(code、isLogin、success等)来决定是否登录成功。

测试方法:修改返回包中的字段值(字段名可能有不同),比如状态码401或其他改为200,false改为true,0改为1等等。

修复建议:由后端通过判断用户名和密码来决定是否登录成功。

密码重置

漏洞原理:在重置密码流程中,接收验证码的邮箱用户可控,且后端未对邮箱和账号的关系做校验。

测试方法:拦截重置密码请求,修改接收验证码的邮箱为自己的邮箱,看是否可以手动验证码,收到后,尝试重置密码,完成账号接管。

修复建议:邮箱与账号绑定,避免暴露在请求中,严禁用户自定义邮箱,并且验证邮箱与账号的绑定关系。

任意注册

漏洞原理:使用手机号进行注册账号时,无需验证码或对验证码没有校验,比如只验证验证码是否正确。

测试方法:在注册账号时,先用自己的手机接收一个正确的验证码,再将注册手机改成其他手机号,查看是否可以注册成功;也可以随意输入一个验证码,然后修改返回包测试。

修复建议:注册时使用验证码验证,并对手机号和验证码的绑定关系进行校验。

会话固定

漏洞原理:用户退出后,SessionID没有被清除,用户再次登录后,使用的还是原来的SessionID。

测试方法:使用Burp拦截退出时和登录后的请求,对比SessionID,如果相同则漏洞存在。

修复建议:用户登录成功后,强制更新SessionID。

权限控制

水平越权

漏洞原理:对用户的权限没有校验,相同权限账户之间可以互相访问数据和执行操作。

测试方法:修改请求中的用户身份标识,比如用户名、ID或其他身份标识,观察是否可以以其他用户身份操作。

修复建议:服务端对用户身份进行严格校验,避免可以操作其他用户。

垂直越权

漏洞原理:对用户的权限没有校验,普通权限用户可以访问或执行管理员权限用户的数据或操作。

测试方法:修改请求中的用户身份标识为管理员,比如uid=1、role=admin等,观察是否可以以管理员身份操作。

修复建议:服务端对用户身份进行严格校验,避免可以操作其他用户。

未授权

漏洞原理:未对用户身份进行验证,可以在未经授权的情况下访问数据或执行操作。

测试方法:用户登录后,在隐私窗口再次访问该页面,如果成功访问则存在未授权。

修复建议:对用户Session进行校验,确保未认证用户无法访问。

支付漏洞

金额篡改

漏洞原理:服务器没有对前端提交的金额进行校验,导致可以篡改金额实现0元购。

测试方法:拦截购买请求,修改商品金额,查看是否以修改后的金额购买商品。

修复建议:对敏感参数进行签名,防止数据被篡改,服务器验证签名和参数值。

请求重放

漏洞原理:服务器没有校验同一笔订单是否已经处理,允许重复提交支付结果。

测试方法:对支付成功的数据包进行重放,观察是否重复发货。

修复建议:使用Token验证,相同订单支付请求仅生效一次,后续请求返回已处理。

验证码漏洞

前端校验

漏洞原理:系统只在前端校验验证码,后端无校验。

测试方法:拦截登录请求后,在Burp Repeater中修改密码或删除验证码进行重放测试,观察响应,如果返回密码错误而不是验证码错误则漏洞存在。

修复建议:前端校验加后端校验。

重复使用

漏洞原理:服务器在验证码验证成功后,没有刷新验证码,导致验证码依然有效,可以重复使用。

测试方法:登录时输入正确的验证码,拦截登录请求后,在Burp Repeater中修改密码进行重放测试,观察响应,如果返回密码错误而不是验证码错误则漏洞存在。

修复建议:验证码在服务端验证成功后应立即失效,无论操作是否成功。

绑定关系

漏洞原理:服务器没有验证手机号和验证码的绑定关系,同上任意用户注册漏洞。

测试方法:登录或注册时,获取验证码后,换成其他用户手机号进行登录或注册,查看是否可以成功。

修复建议:服务器对手机号和验证码的绑定关系进行校验。

短信轰炸

漏洞原理:获取短信验证码时,服务器未对请求频率、请求次数等做限制。

测试方法:拦截获取验证码请求,在Burp Intruder中进行并发,查看是否短时间内收到大量短信验证码。

修复建议:设置请求频率限制(如:1分钟内仅允许发送一次验证码)。

总结

如果你对安全感兴趣,别忘了关注我们,持续为你带来最新的安全动态与技术分享!