文章目录:
一:前言
1.定义
业务逻辑漏洞是指由于程序逻辑不严或逻辑太复杂,导致一些逻辑分支不能够正常处理或处理错误 攻击者可以利用业务或功能上的设计缺陷,获取敏感信息或破坏业务的完整性 这类漏洞一般出现在密码修改、越权访问、密码找回、交易支付金额等功能处 言简意赅:代码之后是人的逻辑,人更容易犯错,是随着人的思维逻辑产生的 大部分缺陷表现在:开发者在思考过程中做出的特殊假设,存在明显或者隐含的错误
2.类型
越权漏洞 水平越权 定义:相同级别(权限)的用户或者同一角色中不同的用户之间,可以越权访问、修改或者删除其他用户信息的非法操作 【身份ID改变 权限类型不变】 原理:通过更换某个ID之类的身份标识,从而使得A账号获取(修改,删除等)B账号的数据 容易出现的地方:权限页面(需要登陆的页面)增,删,改,查的地方 示例:某网站的用户A和用户B具有相同的权限。攻击者通过修改数据包中的用户ID参数,可以访问或修改用户B的信息 危害:在游戏中,假如我们是平民玩家,我们仅仅通过修改ID,就变成了其他玩家,甚至有可能变成氪金大佬 垂直越权 定义:不同级别之间的用户或不同角色之间用户的越权,比如普通用户可以执行管理员才能执行的功能 【身份ID不变 权限类型改变】 原理:使用低权限身份的账号,发送高权限账号才能有的请求,获得其高权限的操作 容易出现的地方:低权限用户是否能越权使用高权限用户的功能,比如普通用户可以使用管理员的功能 示例:某网站的管理员页面需要管理员权限才能访问。然而,攻击者通过修改数据包中的权限参数,可以以普通用户的身份访问管理员页面 危害:信息泄露,篡改用户信息,严重者可修改密码等等 密码修改/找回漏洞 漏洞描述:如果后台没有对旧密码进行验证,就直接允许输入新密码,会形成漏洞 找回密码时,如果验证码的发送和验证机制存在缺陷,也可能被攻击者利用 示例:某网站在找回密码时,通过邮箱发送一个包含auth链接的邮件 然而,该auth链接的生成采用了rand()函数,在Windows环境下最大值为32768,因此可以被枚举 攻击者通过枚举auth的值,可以重置任意用户的密码 验证码漏洞 漏洞描述:服务端未对验证时间、次数作出限制,存在爆破的可能性 验证码复用、绕过等也是常见的漏洞类型 示例:某网站在找回密码或注册账号时,发送验证码到用户的邮箱或手机 然而,攻击者通过抓取数据包,可以轻松地获取验证码的值,并使用该验证码进行非法操作 支付漏洞 漏洞描述:攻击者可能通过修改支付金额、支付状态等方式,进行越权支付或盗刷 示例:某网站的支付页面没有对支付金额进行严格的校验 攻击者通过修改支付金额的参数,可以将支付金额修改为负数或任意值,从而进行非法支付 订单金额任意修改 漏洞描述:在购物网站中,攻击者可以通过修改前端代码或抓取数据包的方式,对订单的金额进行任意修改 这可能导致用户支付的金额与实际购买的商品价值不符,从而给企业带来经济损失。 示例:某网站在选择商品放入购物车时,用户可以直接修改价格参数,如将价格从1337元修改为1元 在购物车页面和结账页面,系统均接受了这个修改后的价格 短信轰炸 漏洞描述:攻击者通过发送大量短信验证码请求,对目标用户进行短信轰炸,导致用户无法正常接收短信验证码 用户信息泄露:如果网站没有对用户信息进行严格的保护,攻击者可以通过漏洞获取用户信息,如用户名、密码、邮箱等
3.危害
业务逻辑漏洞的危害极大,可能导致敏感信息泄露、业务完整性被破坏、经济损失等严重后果 例如,越权漏洞可能导致大批量数据泄露,严重的甚至会造成用户信息被恶意篡改;支付漏洞则可能导致企业遭受经济损失,用户资金被盗刷
4.防护
加强权限管理 严格限制用户的访问和操作权限,确保用户只能访问和操作其权限范围内的数据 对敏感操作进行双重验证或多重验证,以提高安全性 完善验证码机制 对验证码的发送和验证过程进行严格控制,防止验证码被爆破或复用 限制验证码的使用次数和有效期,防止其被滥用 强化支付安全 对支付金额、支付状态等进行严格校验和监控,防止被篡改或盗刷 采用安全的支付协议和加密技术,确保支付过程的安全性 加强代码审计和测试 定期对代码进行审计和测试,发现并修复潜在的逻辑漏洞 采用自动化测试工具和手动测试相结合的方式,提高测试效率和准确性 提高安全意识 对开发人员进行安全培训和教育,提高他们的安全意识 鼓励用户报告发现的安全问题,并及时进行处理和修复
5.测试业务漏洞
理解业务功能确定业务流程—>寻找流程中可以被操控的环节—>分析可被操控环节中可能产生的逻辑问题—>尝试修改参数触发逻辑问题
6.漏洞场景
账户 注册 任意用户注册/验证码失效绕过 遍历账号/短信操作 恶意注册/用户覆盖 短信接收 邮箱:前后空格、大小写变换 手机号:前后空格、+86 登录 身份认证安全 异地登录等机制 账号劫持 恶意尝试锁死用户 任意用户登录/短信轰炸 验证码:返回包中回显;JS校验;撞库攻击;撞库攻击;验证码空值绕过;验证码可重复使用;验证码可控;验证码有规则;万能验证码000000 短信验证码绕过 图形验证码绕过 cookie/session 密码 密码没有使用哈希算法保存 没有验证密码强度 密码找回 前端校验 短信轰炸 验证码爆破 任意密码重置 越权修改密码 返回凭证 账户权限 水平越权 垂直越权 会员系统 用户越权访问 订单查看修改 收获地址越权查看修改 资料越权查看修改 换绑手机修改 换绑短信轰炸 水平垂直越权 业务活动 活动福利重复提交领取:刷积分、刷优惠券 修改领取数量 购物订单类 支付逻辑 价格修改 状态修改 越权查看订单 刷优惠券 购买逻辑 物品价格:负值/零 物品数量:小数/分数/负数 物品编号:付款商品类型 购买限制 业务风控:刷优惠劵、套现 业务流程顺序:跳过某些步骤
二:靶场练习
万能密码
用户:admin' or 1=1 # 密码:随意 用户:admin' or '1'='1 密码:随意
1.越权
水平越权
一共两个用户,我们登陆到kobe用户,来测试越权到luck用户 1.我们首先登录到kobe账户里面,点击查看个人信息,抓到包 2.我们将这里的kobe改为lucy,放包 3.成功越权到lucy用户
垂直越权
普通用户可以执行管理员才能执行的功能 1.首先用admin/123456进行登陆抓包:放在重发器 2.紧接着用pikachu/000000进行登陆抓包:将pikachu的cookie替换admin用户的cookie 3.发送包:用户利用admin的cookie成功创建了test账户
2.支付漏洞
修改支付状态
假设A商品,我们进行了购买,用bp进行抓包,我们看到某一个字段 0:表示支付成功 1:表示支付失败 假设我们暂时还未支付,bp显示的是1,我们将1修改为0 去购买A商品,是10元,B商品是1000元 我们先购买A商品,将A商品的数据包,给B商品 那么我们就能通过10元购买10000元的商品
修改商品的数量
假如1个馒头10元钱,那么10个馒头就是100元 那么-1个馒头那?这种会不会产生零元购
修改商品金额
burp软件抓包:Proxy——>Options——>match and replace 将请求数据包中的金额(999)全部替换成(0.01)
最小支付和最大支付
最小支付 0元等于100积分,50元相当于500积分 修改为0.01和负数会显示支付失败,但是如果你修改金额为1元,那么支付就会成功 当你修改为1元支付接口时存在的,然后修改跳转过去支付就会以1元购买到比它多得多的积分 最大支付 一般在开发当中,商品的金额都会用int型来定义,最大值2147483647 我们尝试修改为2147483648,看看是否能造成整数的溢出,有可能支付状态异常,从而导致支付成功
3.账号密码破解
1.随机输入账号和密码和验证码——>点击登录 2.账号密码爆破 burp工具——>intercept if off——>鼠标右键——>send to repeater——>positions模块 clear——>对账号密码点击add——>load——>start attack 3.输入正确的账号密码,验证码
4.验证码
验证码暴力破解
burp工具——>proxy——>intercept——>intercept if on——>随机输入验证码提交 鼠标右键——>send to intruder——>positions——>clear——>选中验证码add payloads——>payload type设置为numbers(from 111111 to 999999 step1) 通过返回的长度和内容来进行破解
验证码客户端回显
burp工具——>intercept if off——>raw——>鼠标右键Do intercept——>Response to this request
验证码绕过
burp工具——>intercept if off——>raw——>鼠标右键Do intercept——>Response to this request flase——>true 0——>1
验证码自动识别
一般对于图片验证码的识别流程为 图像二值化处理(图片上像素点设置为0或255黑白效果) 去干扰(点 线 色彩) 字符分割(字符区域划分成单个字符) 字符识别(字符图片还原成字符文本 pkav http fuzzer软件)