逻辑漏洞
逻辑漏洞
原创 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分钟内仅允许发送一次验证码)。
总结
如果你对安全感兴趣,别忘了关注我们,持续为你带来最新的安全动态与技术分享!