复现业务逻辑漏洞

业务逻辑漏洞

定义:由于开发者的逻辑不严谨,造成的程序功能异常。简单来说就是开发者的代码有问题。

特点:业务逻辑漏洞无法被扫描器扫描到

举例

  • 暴力破解

  • 任意用户/密码登录

  • 短信/邮箱轰炸

  • 验证码绕过/爆破/重放/回传

  • 用户名/手机号枚举

  • 越权登录(例如修改数据包中用户ID) 越权=>高危

  • 商品金额/数据篡改

  • 整数溢出,int 最大值为 2147482647(2的31次方-1)

复现

1. 修改商品任意价格

BP抓包

提交,修改,放包

此时成功修改单价,0元购

2. 整数溢出

int 最大值为 2147482647(2的31次方-1),在一些小型购物网站可能仍存在

数量在2147482647,输出正常

将数量提高到2147482647以上,触发整数溢出

以Java的 “int” 为例

public class Int {
    public static void main(String[] args) {
        int p1 = 2147483647;
        int p2 = p1+1;
        System.out.println("未溢出的支持支付的最大金额:"+p1);
        System.out.println("溢出后要支付的金额:"+p2);
    }
}

3. 验证码绕过

演示于Pikachu靶场

3.1 前端绕过

原理:

        根据浏览器要求输入验证码,抓到数据包之后,直接在数据包里面把数据包给删掉都不影响爆破操作。

        前端的验证码都存在一个验证码复用的问题,抓到包之后不动包里的验证码,直接修改需要用于爆破的用户名密码,然后发包,就能进行爆破,因为爆破过程不会触发前端的验证码更改逻辑,验证码还是抓包抓到的那个。

演示:

账号密码随便输入(假装爆破

先输入错误的验证码,查看报错信息

输入正确验证码并抓包

发送给Repeater

发现左侧验证码改变

但包内的验证码仍为改变之前的验证码,并重新发包

此时仍然能得到正确的回显(右侧提示内容显示当前登录用户名或密码不存在,证明成功绕过验证码)

更改用户名,甚至更改包内验证码并重新发包验证,仍能成功回显

(即使删掉包内验证码也能成功回显,可以进行爆破)

3.2 后端(服务器)绕过

原理:

验证码在后台不过期,可以长期被使用

演示:

输入正确的验证码,并抓包

上图的        ”username or password is not exists~“        可以视作验证码输入成功的回显

发送给Repeater,此时验证码触发刷新条件,自动更新

在Repeater中修改验证码为左侧新的验证码,并重新发包

此时左侧验证码没有刷新,右侧提示内容显示当前登录用户名或密码不存在,证明成功绕过验证码

不更改包内验证码,更改用户名并重新发包验证

验证成功,绕过前端验证码,可进行爆破

<think>嗯,用户问的是如何高效挖掘移动应用的业务逻辑漏洞。这个问题很专业,看来用户应该是有一定安全测试基础的工程师或研究员。 从之前的对话看,用户对渗透测试流程已经比较熟悉了,现在聚焦在业务逻辑这个具体领域。业务逻辑漏洞确实很关键,OWASP统计这类漏洞在移动应用中的占比高达24%[^3],而且往往直接关系到核心业务安全。 用户引用的资料很有意思,特别是提到LLM与Fuzzing结合的新方向[^3]。不过当前实际测试中,传统方法还是主流。需要重点考虑几个维度: 首先是测试策略。业务逻辑漏洞不像SQL注入有固定模式,必须深入理解业务流程。比如金融APP的转账和电商的优惠券逻辑就完全不同。建议用户从业务流程图入手,标记出所有决策点和状态转换节点,这些往往是漏洞高发区。 工具链方面,动态测试工具组合很关键。Burp Suite的Intruder模块对批量测试授权漏洞特别有效,配合Logger++插件可以自动捕获异常响应。对于需要模拟复杂交互的场景,Postman的Collection Runner能实现多步骤自动化测试。 数据构造有讲究。测试数据要覆盖边界值,比如0元支付、超长字符串、负数库存等。最近遇到个案例,某APP没校验负数金额,导致充值-100元实际增加账户余额[^1]。 运行时监控容易被忽视。用Frida Hook关键验证函数,比如isAdmin(),可以实时看到权限校验是否被绕过。Objection的android hooking watch命令在这方面特别高效。 新技术的应用确实值得关注。虽然LLM+Fuzzing还在实验阶段,但GitHub上已经有些开源项目在做尝试,比如用GPT生成异常测试用例。不过当前效果还不稳定,传统方法更可靠。 最后强调下报告环节。业务逻辑漏洞复现步骤一定要详细记录操作序列,因为这类漏洞往往涉及多步骤交互。建议用户使用ScreenRecorder同步录屏,比文字描述直观得多。 用户可能还需要具体案例参考,补充了一个平行越权的实战示例,展示如何用Burp快速测试。这个案例很典型,多数APP的订单查询接口都可能存在类似问题。</think>高效挖掘移动应用业务逻辑漏洞需结合**深度业务理解**与**精准测试技术**,核心方法如下: --- ### 一、业务逻辑漏洞挖掘框架 ```mermaid graph TD A[业务流程图解构] --> B[关键节点标记] B --> C[异常输入构造] C --> D[权限边界测试] D --> E[状态机篡改验证] ``` 1. **业务流建模** - 绘制完整业务流程图(如:用户注册→登录→支付→订单修改) - **重点标记**: - 身份验证节点(如OTP验证) - 状态转换点(如待支付→已支付) - 数据依赖环节(如优惠券关联订单金额)[^1] 2. **漏洞模式库匹配** | 漏洞类型 | 测试手法 | 工具支持 | |-------------------|-----------------------------------|-----------------------| | **越权访问** | 修改`user_id`/`session_token` | Burp Intruder, Postman| | **业务流程绕过** | 跳过验证步骤(如直接访问支付完成页)| Frida Hook关键函数 | | **资源竞争** | 并发请求(如重复领取优惠券) | JMeter, Locust | | **参数篡改** | 修改金额/数量为负值或超大数 | Burp Repeater | --- ### 二、动态测试关键技术 #### 1. **流量拦截与篡改** - **HTTPS抓包**: ```bash # Android证书导入 adb push burp-cert.der /sdcard ``` - **关键篡改点**: - 支付金额:`{"amount": -100}` → 服务端未校验负数 - 订单状态:`{"status": "completed"}` → 绕过支付流程[^1] #### 2. **运行时代码注入** - **Frida脚本示例**(绕过权限检查): ```javascript Java.perform(() => { const checkAuth = Java.use("com.app.AuthUtil"); checkAuth.isAdmin.implementation = () => { return true; } // 强制返回true }); ``` - **应用场景**:垂直越权(普通用户→管理员权限) #### 3. **自动化遍历技术** - **工具组合**: - `Appium` + `Selenium`:模拟用户操作路径 - `Burp Turbo Intruder`:批量测试接口参数 - **检测逻辑**:对比响应差异(如不同用户访问相同资源的响应码) --- ### 三、业务场景深度测试 #### 1. **身份认证体系** - **密码重置漏洞**: - 修改`phone`参数劫持他人账户 - 重放验证码请求(拦截→重放100次) - **会话管理缺陷**: - 退出登录后Session未失效 - 多设备登录会话冲突 #### 2. **交易业务链** ```mermaid sequenceDiagram 用户->>APP: 创建订单(金额100元) APP->>服务器: 生成未支付订单 用户->>APP: 支付请求(篡改金额=0.01元) 服务器-->>APP: 支付成功 ``` - **漏洞点**:客户端计算最终金额(应服务端校验) #### 3. **营销活动漏洞** - **优惠券逻辑**: - 叠加使用规则绕过(多次领取同批次券) - 无限领取:修改`coupon_id`序列批量请求 - **抽奖机制缺陷**: - 修改中奖概率参数(如`prob=99.9`) - 并发请求消耗奖品池 --- ### 四、高效工具链推荐 | 类别 | 工具 | 应用场景 | |-------------------|----------------------------------------------------------------------|-----------------------------------| | **流量分析** | Burp Suite, Charles, HTTP Toolkit | 参数篡改/重放攻击 | | **运行时Hook** | Frida, Objection | 绕过逻辑校验/修改内存数据 | | **自动化遍历** | Appium + Selenium, MobSF动态分析 | 业务流自动化探测 | | **API测试** | Postman Collections, Swagger Fuzzer | 接口未授权/批量测试 | | **状态监控** | Logcat (Android), oslog (iOS) | 敏感操作日志泄露检测 | --- ### 五、漏洞挖掘实战案例 **漏洞**:平行越权查看他人订单 **复现步骤**: 1. 用户A登录后查看订单:`GET /api/order?id=123` 2. 抓包修改`id=456`(他人订单) 3. 响应200并返回订单详情 **根因**:服务端未校验订单所属用户[^1] **修复方案**: ```python # 伪代码:添加归属校验 def get_order(order_id): current_user = get_current_user() order = Order.query.get(order_id) if order.user_id != current_user.id: # 关键校验 raise PermissionDenied() ``` --- ### 未来趋势:LLM辅助挖掘 1. **智能用例生成**: - 输入业务描述,LLM自动输出测试场景(如:"测试优惠券叠加规则" → 生成多券组合用例) 2. **异常模式识别**: - 分析日志/流量,LLM标记非常规操作序列(如短时间内连续密码重置)[^3] --- ### 相关问题 1. 如何用Frida动态修改APP的加密算法参数? 2. 业务逻辑漏洞自动化扫描的局限性是什么? 3. 如何测试APP的并发资源竞争漏洞? 4. 越权访问漏洞在Android和iOS平台的表现差异? 5. LLM如何提升模糊测试(Fuzzing)的精准度?[^3] > 数据参考:业务逻辑漏洞中,越权访问占比达34%,业务流程绕过占28%,参数篡改占19%[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值