スキル一覧に戻る
Ed1s0nZ

business-logic-testing

by Ed1s0nZ

business-logic-testingは、システム間の統合と連携を実現するスキルです。APIとデータの統合により、シームレスな情報フローと業務効率の向上をサポートします。

564🍴 90📅 2026年1月23日
GitHubで見るManusで実行

SKILL.md


name: business-logic-testing description: 业务逻辑漏洞测试的专业技能和方法论 version: 1.0.0

业务逻辑漏洞测试

概述

业务逻辑漏洞是应用程序在业务处理流程中的设计缺陷,可能导致未授权操作、数据篡改、资金损失等。本技能提供业务逻辑漏洞的检测、利用和防护方法。

漏洞类型

1. 工作流绕过

跳过验证步骤:

  • 直接访问最终步骤
  • 修改步骤顺序
  • 重复执行步骤

2. 价格操作

负数价格:

  • 输入负数金额
  • 导致账户余额增加

价格篡改:

  • 修改前端价格
  • 修改API请求中的价格

3. 数量限制绕过

负数数量:

  • 输入负数
  • 可能导致库存增加

超出限制:

  • 修改数量限制
  • 批量操作绕过

4. 时间竞争

并发请求:

  • 同时发送多个请求
  • 绕过单次限制

5. 状态操作

状态回退:

  • 将已完成订单改为待支付
  • 修改订单状态

测试方法

1. 工作流分析

识别业务流程:

  • 注册流程
  • 购买流程
  • 提现流程
  • 审核流程

测试步骤跳过:

正常流程: 步骤1 → 步骤2 → 步骤3
测试: 直接访问步骤3
测试: 步骤1 → 步骤3(跳过步骤2)

2. 参数篡改

修改关键参数:

POST /api/purchase
{
  "product_id": 123,
  "quantity": 1,
  "price": 100.00  # 修改为 0.01
}

负数测试:

{
  "quantity": -1,
  "price": -100.00
}

3. 并发测试

同时发送请求:

import threading
import requests

def purchase():
    requests.post('https://target.com/api/purchase', 
                  json={'product_id': 123, 'quantity': 1})

# 同时发送10个请求
for i in range(10):
    threading.Thread(target=purchase).start()

4. 状态修改

修改订单状态:

PATCH /api/order/123
{
  "status": "completed"  # 修改为已完成
}

回退状态:

PATCH /api/order/123
{
  "status": "pending"  # 从已完成回退到待支付
}

利用技术

价格操作

负数价格:

{
  "product_id": 123,
  "price": -100.00,
  "quantity": 1
}

修改前端价格:

// 前端代码
const price = 100.00;

// 修改为
const price = 0.01;

API价格修改:

POST /api/checkout
{
  "items": [
    {
      "product_id": 123,
      "price": 0.01,  # 原价100.00
      "quantity": 1
    }
  ]
}

数量限制绕过

负数数量:

{
  "product_id": 123,
  "quantity": -10  # 可能导致库存增加
}

超出限制:

{
  "product_id": 123,
  "quantity": 999999  # 超出单次购买限制
}

优惠券滥用

重复使用:

POST /api/checkout
{
  "coupon": "DISCOUNT50",
  "items": [...]
}

# 重复使用同一优惠券

未激活优惠券:

POST /api/checkout
{
  "coupon": "EXPIRED_COUPON",  # 使用过期优惠券
  "items": [...]
}

提现漏洞

负数提现:

{
  "amount": -1000.00  # 可能导致账户余额增加
}

超出余额:

{
  "amount": 999999.00  # 超出账户余额
}

时间竞争

并发购买:

import threading
import requests

def buy():
    requests.post('https://target.com/api/purchase',
                  json={'product_id': 123, 'quantity': 1})

# 限时抢购,并发请求
for i in range(100):
    threading.Thread(target=buy).start()

绕过技术

前端验证绕过

直接调用API:

  • 绕过前端JavaScript验证
  • 直接发送API请求

修改请求:

  • 使用Burp Suite拦截
  • 修改参数后发送

状态码分析

观察响应:

  • 200 OK - 可能成功
  • 400 Bad Request - 参数错误
  • 403 Forbidden - 权限不足
  • 500 Internal Server Error - 服务器错误

错误信息利用

从错误信息获取信息:

错误: "余额不足,当前余额: 100.00"
→ 可以获取账户余额信息

工具使用

Burp Suite

使用Repeater:

  1. 拦截业务请求
  2. 修改关键参数
  3. 观察响应

使用Intruder:

  1. 标记参数
  2. 使用Payload列表
  3. 批量测试

自定义脚本

import requests
import json

def test_price_manipulation():
    # 测试价格修改
    for price in [0.01, -100, 0, 999999]:
        data = {
            "product_id": 123,
            "price": price,
            "quantity": 1
        }
        response = requests.post('https://target.com/api/purchase',
                                json=data)
        print(f"Price {price}: {response.status_code}")

test_price_manipulation()

验证和报告

验证步骤

  1. 确认可以绕过业务逻辑限制
  2. 验证可以执行未授权操作
  3. 评估影响(资金损失、数据篡改等)
  4. 记录完整的POC

报告要点

  • 漏洞位置和业务流程
  • 可执行的未授权操作
  • 完整的利用步骤和PoC
  • 修复建议(服务端验证、业务规则检查等)

防护措施

推荐方案

  1. 服务端验证

    def process_purchase(product_id, quantity, price):
        # 从数据库获取真实价格
        real_price = db.get_product_price(product_id)
        
        # 验证价格
        if price != real_price:
            raise ValueError("Price mismatch")
        
        # 验证数量
        if quantity <= 0:
            raise ValueError("Invalid quantity")
        
        # 处理购买
        process_order(product_id, quantity, real_price)
    
  2. 状态机验证

    class OrderState:
        PENDING = "pending"
        PAID = "paid"
        SHIPPED = "shipped"
        COMPLETED = "completed"
        
        TRANSITIONS = {
            PENDING: [PAID],
            PAID: [SHIPPED],
            SHIPPED: [COMPLETED]
        }
        
        def can_transition(self, from_state, to_state):
            return to_state in self.TRANSITIONS.get(from_state, [])
    
  3. 并发控制

    import threading
    
    lock = threading.Lock()
    
    def process_order(order_id):
        with lock:
            # 检查订单状态
            order = db.get_order(order_id)
            if order.status != 'pending':
                raise ValueError("Order already processed")
            
            # 处理订单
            process(order)
    
  4. 业务规则验证

    def validate_business_rules(order):
        # 验证数量限制
        if order.quantity > MAX_QUANTITY:
            raise ValueError("Quantity exceeds limit")
        
        # 验证价格范围
        if order.price <= 0:
            raise ValueError("Invalid price")
        
        # 验证库存
        if order.quantity > get_stock(order.product_id):
            raise ValueError("Insufficient stock")
    
  5. 审计日志

    def log_business_action(user_id, action, details):
        log_entry = {
            "user_id": user_id,
            "action": action,
            "details": details,
            "timestamp": datetime.now()
        }
        db.log_action(log_entry)
    

注意事项

  • 仅在授权测试环境中进行
  • 避免对业务造成实际影响
  • 注意不同业务流程的差异
  • 测试时注意数据一致性

スコア

総合スコア

80/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

+10
人気

GitHub Stars 500以上

+10
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

+5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

レビュー

💬

レビュー機能は近日公開予定です