ineedcodes 1.6.1 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -1
- package/skills/401-403-bypass-techniques/SKILL.md +348 -0
- package/skills/active-directory-acl-abuse/BLOODHOUND_PATHS.md +281 -0
- package/skills/active-directory-acl-abuse/SKILL.md +295 -0
- package/skills/active-directory-certificate-services/ADCS_ESC_MATRIX.md +197 -0
- package/skills/active-directory-certificate-services/SKILL.md +303 -0
- package/skills/active-directory-kerberos-attacks/KERBEROS_ATTACK_CHAINS.md +226 -0
- package/skills/active-directory-kerberos-attacks/SKILL.md +311 -0
- package/skills/ai-ml-security/SKILL.md +425 -0
- package/skills/android-pentesting-tricks/FRIDA_SCRIPTS.md +394 -0
- package/skills/android-pentesting-tricks/SKILL.md +369 -0
- package/skills/anti-debugging-techniques/ANTI_DEBUG_MATRIX.md +117 -0
- package/skills/anti-debugging-techniques/SKILL.md +407 -0
- package/skills/api-auth-and-jwt-abuse/SKILL.md +76 -0
- package/skills/api-authorization-and-bola/SKILL.md +48 -0
- package/skills/api-recon-and-docs/SKILL.md +61 -0
- package/skills/api-sec/SKILL.md +49 -0
- package/skills/arbitrary-write-to-rce/SKILL.md +361 -0
- package/skills/auth-sec/SKILL.md +41 -0
- package/skills/authbypass-authentication-flaws/SKILL.md +441 -0
- package/skills/bba-ad-attacker/SKILL.md +420 -0
- package/skills/bba-api-security/SKILL.md +95 -0
- package/skills/bba-attack-planner/SKILL.md +186 -0
- package/skills/bba-binary-exploit/SKILL.md +65 -0
- package/skills/bba-bizlogic-hunter/SKILL.md +304 -0
- package/skills/bba-bug-bounty/SKILL.md +245 -0
- package/skills/bba-cicd-redteam/SKILL.md +515 -0
- package/skills/bba-cloud-security/SKILL.md +97 -0
- package/skills/bba-container-escape/SKILL.md +161 -0
- package/skills/bba-credential-tester/SKILL.md +346 -0
- package/skills/bba-crypto-analyst/SKILL.md +54 -0
- package/skills/bba-ctf-solver/SKILL.md +166 -0
- package/skills/bba-detection-engineer/SKILL.md +93 -0
- package/skills/bba-engagement-planner/SKILL.md +68 -0
- package/skills/bba-exploit-chainer/SKILL.md +280 -0
- package/skills/bba-exploit-guide/SKILL.md +96 -0
- package/skills/bba-forensics-analyst/SKILL.md +512 -0
- package/skills/bba-graphql-hunter/SKILL.md +145 -0
- package/skills/bba-hardware-hacker/SKILL.md +57 -0
- package/skills/bba-jwt-cracker/SKILL.md +133 -0
- package/skills/bba-llm-redteam/SKILL.md +149 -0
- package/skills/bba-malware-analyst/SKILL.md +305 -0
- package/skills/bba-mobile-pentester/SKILL.md +350 -0
- package/skills/bba-osint-collector/SKILL.md +645 -0
- package/skills/bba-payload-crafter/SKILL.md +347 -0
- package/skills/bba-phishing-operator/SKILL.md +516 -0
- package/skills/bba-poc-validator/SKILL.md +249 -0
- package/skills/bba-privesc-advisor/SKILL.md +98 -0
- package/skills/bba-purple-team/SKILL.md +56 -0
- package/skills/bba-recon-advisor/SKILL.md +215 -0
- package/skills/bba-red-team-operator/SKILL.md +61 -0
- package/skills/bba-report-generator/SKILL.md +145 -0
- package/skills/bba-reverse-engineer/SKILL.md +298 -0
- package/skills/bba-social-engineer/SKILL.md +341 -0
- package/skills/bba-ssrf-hunter/SKILL.md +120 -0
- package/skills/bba-stig-analyst/SKILL.md +108 -0
- package/skills/bba-subdomain-takeover/SKILL.md +141 -0
- package/skills/bba-swarm-orchestrator/SKILL.md +351 -0
- package/skills/bba-threat-modeler/SKILL.md +574 -0
- package/skills/bba-vuln-scanner/SKILL.md +305 -0
- package/skills/bba-web-hunter/SKILL.md +285 -0
- package/skills/bba-wireless-pentester/SKILL.md +539 -0
- package/skills/binary-protection-bypass/PROTECTION_BYPASS_MATRIX.md +168 -0
- package/skills/binary-protection-bypass/SKILL.md +295 -0
- package/skills/browser-exploitation-v8/SKILL.md +334 -0
- package/skills/browser-exploitation-v8/V8_EXPLOITATION_PATTERNS.md +288 -0
- package/skills/business-logic-vuln/SKILL.md +33 -0
- package/skills/business-logic-vulnerabilities/CHECKLIST.md +375 -0
- package/skills/business-logic-vulnerabilities/METHODOLOGY.md +337 -0
- package/skills/business-logic-vulnerabilities/SCENARIOS.md +1095 -0
- package/skills/business-logic-vulnerabilities/SKILL.md +711 -0
- package/skills/classical-cipher-analysis/SKILL.md +663 -0
- package/skills/clickjacking/SKILL.md +163 -0
- package/skills/cmdi-command-injection/SKILL.md +687 -0
- package/skills/code-obfuscation-deobfuscation/SKILL.md +391 -0
- package/skills/container-escape-techniques/DOCKER_ESCAPE_CHAINS.md +296 -0
- package/skills/container-escape-techniques/SKILL.md +339 -0
- package/skills/cors-cross-origin-misconfiguration/SCENARIOS.md +152 -0
- package/skills/cors-cross-origin-misconfiguration/SKILL.md +270 -0
- package/skills/crlf-injection/SKILL.md +179 -0
- package/skills/csp-bypass-advanced/SKILL.md +259 -0
- package/skills/csrf-cross-site-request-forgery/SKILL.md +526 -0
- package/skills/csv-formula-injection/SKILL.md +144 -0
- package/skills/dangling-markup-injection/SKILL.md +321 -0
- package/skills/defi-attack-patterns/SKILL.md +355 -0
- package/skills/dependency-confusion/SKILL.md +178 -0
- package/skills/deserialization-insecure/JAVA_GADGET_CHAINS.md +511 -0
- package/skills/deserialization-insecure/SKILL.md +725 -0
- package/skills/dns-rebinding-attacks/SKILL.md +337 -0
- package/skills/email-header-injection/SKILL.md +349 -0
- package/skills/expression-language-injection/SKILL.md +243 -0
- package/skills/file-access-vuln/SKILL.md +33 -0
- package/skills/format-string-exploitation/SKILL.md +312 -0
- package/skills/ghost-bits-cast-attack/PAYLOAD_COOKBOOK.md +448 -0
- package/skills/ghost-bits-cast-attack/SKILL.md +799 -0
- package/skills/graphql-and-hidden-parameters/SKILL.md +50 -0
- package/skills/hack/SKILL.md +162 -0
- package/skills/hash-attack-techniques/SKILL.md +491 -0
- package/skills/heap-exploitation/HOUSE_OF_TECHNIQUES.md +244 -0
- package/skills/heap-exploitation/IO_FILE_EXPLOITATION.md +256 -0
- package/skills/heap-exploitation/SKILL.md +217 -0
- package/skills/http-host-header-attacks/SKILL.md +323 -0
- package/skills/http-parameter-pollution/SKILL.md +208 -0
- package/skills/http2-specific-attacks/SKILL.md +350 -0
- package/skills/idor-broken-object-authorization/SKILL.md +336 -0
- package/skills/injection-checking/EXTRA_INJECTION_TYPES.md +450 -0
- package/skills/injection-checking/SKILL.md +50 -0
- package/skills/insecure-source-code-management/SKILL.md +161 -0
- package/skills/ios-pentesting-tricks/IOS_RUNTIME_TRICKS.md +411 -0
- package/skills/ios-pentesting-tricks/SKILL.md +418 -0
- package/skills/jndi-injection/SKILL.md +265 -0
- package/skills/jwt-oauth-token-attacks/SKILL.md +301 -0
- package/skills/kernel-exploitation/KERNEL_HEAP_TECHNIQUES.md +293 -0
- package/skills/kernel-exploitation/KERNEL_MITIGATION_BYPASS.md +224 -0
- package/skills/kernel-exploitation/SKILL.md +307 -0
- package/skills/kubernetes-pentesting/SKILL.md +348 -0
- package/skills/lattice-crypto-attacks/SKILL.md +497 -0
- package/skills/linux-lateral-movement/SKILL.md +348 -0
- package/skills/linux-privilege-escalation/KERNEL_EXPLOITS_CHECKLIST.md +260 -0
- package/skills/linux-privilege-escalation/SKILL.md +346 -0
- package/skills/linux-privilege-escalation/SUID_CAPABILITIES_TRICKS.md +305 -0
- package/skills/linux-security-bypass/SKILL.md +345 -0
- package/skills/llm-prompt-injection/JAILBREAK_PATTERNS.md +306 -0
- package/skills/llm-prompt-injection/SKILL.md +357 -0
- package/skills/macos-process-injection/DYLIB_XPC_TECHNIQUES.md +373 -0
- package/skills/macos-process-injection/SKILL.md +384 -0
- package/skills/macos-security-bypass/SKILL.md +337 -0
- package/skills/macos-security-bypass/TCC_BYPASS_MATRIX.md +200 -0
- package/skills/memory-forensics-volatility/SKILL.md +323 -0
- package/skills/memory-forensics-volatility/VOLATILITY_CHEATSHEET.md +225 -0
- package/skills/mobile-ssl-pinning-bypass/SKILL.md +531 -0
- package/skills/network-protocol-attacks/NAME_RESOLUTION_POISONING.md +226 -0
- package/skills/network-protocol-attacks/SKILL.md +330 -0
- package/skills/nosql-injection/SKILL.md +341 -0
- package/skills/ntlm-relay-coercion/COERCION_METHODS.md +253 -0
- package/skills/ntlm-relay-coercion/SKILL.md +267 -0
- package/skills/oauth-oidc-misconfiguration/SKILL.md +46 -0
- package/skills/open-redirect/SKILL.md +380 -0
- package/skills/path-traversal-lfi/SKILL.md +802 -0
- package/skills/prototype-pollution/SKILL.md +190 -0
- package/skills/prototype-pollution-advanced/KNOWN_GADGETS.md +253 -0
- package/skills/prototype-pollution-advanced/SKILL.md +338 -0
- package/skills/race-condition/SKILL.md +526 -0
- package/skills/recon-and-methodology/SKILL.md +389 -0
- package/skills/recon-for-sec/SKILL.md +29 -0
- package/skills/request-smuggling/H2_SMUGGLING_VARIANTS.md +498 -0
- package/skills/request-smuggling/SKILL.md +314 -0
- package/skills/reverse-shell-techniques/SHELL_CHEATSHEET.md +196 -0
- package/skills/reverse-shell-techniques/SKILL.md +290 -0
- package/skills/rsa-attack-techniques/RSA_ATTACK_CATALOG.md +432 -0
- package/skills/rsa-attack-techniques/SKILL.md +437 -0
- package/skills/saml-sso-assertion-attacks/SKILL.md +41 -0
- package/skills/sandbox-escape-techniques/PYTHON_SANDBOX_ESCAPE.md +349 -0
- package/skills/sandbox-escape-techniques/SECCOMP_BYPASS.md +332 -0
- package/skills/sandbox-escape-techniques/SKILL.md +250 -0
- package/skills/smart-contract-vulnerabilities/SKILL.md +314 -0
- package/skills/smart-contract-vulnerabilities/SOLIDITY_VULN_PATTERNS.md +460 -0
- package/skills/sqli-sql-injection/SCENARIOS.md +575 -0
- package/skills/sqli-sql-injection/SKILL.md +489 -0
- package/skills/sqli-sql-injection/SQLMAP_ADVANCED.md +642 -0
- package/skills/ssrf-server-side-request-forgery/SCENARIOS.md +226 -0
- package/skills/ssrf-server-side-request-forgery/SKILL.md +323 -0
- package/skills/ssrf-server-side-request-forgery/URL_PARSER_TRICKS.md +650 -0
- package/skills/ssti-server-side-template-injection/ENGINE_PAYLOADS.md +456 -0
- package/skills/ssti-server-side-template-injection/SCENARIOS.md +319 -0
- package/skills/ssti-server-side-template-injection/SKILL.md +344 -0
- package/skills/stack-overflow-and-rop/ROP_ADVANCED_TECHNIQUES.md +249 -0
- package/skills/stack-overflow-and-rop/SKILL.md +304 -0
- package/skills/steganography-techniques/SKILL.md +348 -0
- package/skills/steganography-techniques/STEGO_TOOLS_GUIDE.md +335 -0
- package/skills/subdomain-takeover/SKILL.md +247 -0
- package/skills/symbolic-execution-tools/ANGR_COOKBOOK.md +437 -0
- package/skills/symbolic-execution-tools/SKILL.md +419 -0
- package/skills/symmetric-cipher-attacks/BLOCK_CIPHER_ATTACKS.md +364 -0
- package/skills/symmetric-cipher-attacks/SKILL.md +462 -0
- package/skills/traffic-analysis-pcap/SKILL.md +341 -0
- package/skills/tunneling-and-pivoting/SKILL.md +343 -0
- package/skills/type-juggling/SKILL.md +291 -0
- package/skills/unauthorized-access-common-services/PORT_SERVICE_MATRIX.md +340 -0
- package/skills/unauthorized-access-common-services/SKILL.md +388 -0
- package/skills/upload-insecure-files/SCENARIOS.md +158 -0
- package/skills/upload-insecure-files/SKILL.md +543 -0
- package/skills/vm-and-bytecode-reverse/SKILL.md +450 -0
- package/skills/vr-cheatsheet-authentication_bypass/SKILL.md +184 -0
- package/skills/vr-cheatsheet-dangerous_functions/SKILL.md +200 -0
- package/skills/vr-cheatsheet-linux_commands/SKILL.md +40 -0
- package/skills/vr-cheatsheet-rce/SKILL.md +177 -0
- package/skills/vr-cheatsheet-reverse_engineering/SKILL.md +144 -0
- package/skills/vr-cheatsheet-sqli/SKILL.md +270 -0
- package/skills/vr-cheatsheet-ssrf/SKILL.md +173 -0
- package/skills/vr-cheatsheet-xss/SKILL.md +177 -0
- package/skills/vr-methodology-mindset_and_tips/SKILL.md +51 -0
- package/skills/vr-template-vulnerability_report_template/SKILL.md +59 -0
- package/skills/vr-writeup-CVE-2026-9136/SKILL.md +171 -0
- package/skills/vr-writeup-ZVE-2026-3795/SKILL.md +350 -0
- package/skills/vr-writeup-api_key_leak/SKILL.md +103 -0
- package/skills/waf-bypass-techniques/SKILL.md +290 -0
- package/skills/waf-bypass-techniques/WAF_PRODUCT_MATRIX.md +202 -0
- package/skills/web-cache-deception/CACHE_POISONING_TECHNIQUES.md +637 -0
- package/skills/web-cache-deception/SKILL.md +222 -0
- package/skills/websocket-security/SKILL.md +454 -0
- package/skills/windows-av-evasion/AMSI_BYPASS_TECHNIQUES.md +289 -0
- package/skills/windows-av-evasion/SKILL.md +342 -0
- package/skills/windows-lateral-movement/CREDENTIAL_DUMPING.md +308 -0
- package/skills/windows-lateral-movement/SKILL.md +335 -0
- package/skills/windows-privilege-escalation/SKILL.md +328 -0
- package/skills/windows-privilege-escalation/TOKEN_POTATO_TRICKS.md +216 -0
- package/skills/windows-privilege-escalation/UAC_BYPASS_METHODS.md +225 -0
- package/skills/xslt-injection/SKILL.md +281 -0
- package/skills/xss-cross-site-scripting/ADVANCED_XSS_TRICKS.md +276 -0
- package/skills/xss-cross-site-scripting/SCENARIOS.md +278 -0
- package/skills/xss-cross-site-scripting/SKILL.md +379 -0
- package/skills/xxe-xml-external-entity/SCENARIOS.md +112 -0
- package/skills/xxe-xml-external-entity/SKILL.md +554 -0
- package/src/agent.js +1 -1
- package/src/session.js +6 -3
- package/src/skills.js +30 -6
- package/src/ui.js +1 -1
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
# Business Logic Vulnerability Testing Methodology / 业务逻辑漏洞测试方法论
|
|
2
|
+
|
|
3
|
+
> Companion to [SKILL.md](./SKILL.md) and [CHECKLIST.md](./CHECKLIST.md). Distilled from real-world payment / captcha / authentication / data-exposure logic flaw cases and live Java code-audit walkthroughs.
|
|
4
|
+
|
|
5
|
+
业务逻辑漏洞与传统注入/溢出类漏洞最大的不同在于:**它没有固定的特征签名,几乎无法被自动化工具发现,依赖测试者对目标业务的深度理解和经验**。本方法论给出一套可重复、可检索的工程化流程,把"凭感觉挖洞"压缩为"按图索骥"。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 0. Why this methodology / 为什么不是直接套 checklist
|
|
10
|
+
|
|
11
|
+
业务逻辑漏洞通常具有以下四个特征:
|
|
12
|
+
|
|
13
|
+
- **黑盒难发现**:规律性弱、条件苛刻(依赖会话 Cookie、特定登录态、特定业务流转),扫描器几乎无效。
|
|
14
|
+
- **必须人工**:每一类漏洞都强耦合于具体业务(支付、退款、注册、抽奖),换一个系统几乎要从零理解。
|
|
15
|
+
- **代码审计痛但有效**:黑盒覆盖不到所有 API;只看代码又脱离业务;必须双管齐下。
|
|
16
|
+
- **看到现象只是开始**:单个 200/302/`success:true` 不能说明问题,要回到业务上去推"它是不是本来就该这样"。
|
|
17
|
+
|
|
18
|
+
因此本方法论的核心是 **5 个阶段 + 1 张索引表**,每个阶段都给出"该做什么 / 不该做什么 / 看到什么算异常"。
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 1. Five-Phase Workflow / 五阶段工作流
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
26
|
+
│ PHASE 1: Business Modeling │
|
|
27
|
+
│ 业务建模:把目标产品当成一台状态机来读 │
|
|
28
|
+
│ ├── 角色清单 (admin / user / vip / guest / 内部接口调用方) │
|
|
29
|
+
│ ├── 资源清单 (订单 / 余额 / 优惠券 / 积分 / VIP / 个人资料) │
|
|
30
|
+
│ ├── 状态字段 (paid / unpaid / refunded / shipped / received) │
|
|
31
|
+
│ └── 关键金钱/资产流向 (谁付钱、谁拿钱、谁能撤销) │
|
|
32
|
+
└────────────────────────────┬────────────────────────────────────┘
|
|
33
|
+
▼
|
|
34
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
35
|
+
│ PHASE 2: State Machine & Data Flow Analysis │
|
|
36
|
+
│ 状态机/数据流分析:每一步状态由谁决定? │
|
|
37
|
+
│ ├── happy path 走通 │
|
|
38
|
+
│ ├── 抓全所有跳转请求 + 响应 │
|
|
39
|
+
│ ├── 标出哪些字段是"前端传的"vs"服务端回写的" │
|
|
40
|
+
│ └── 找跨步骤复用的 token / order_id / coupon_id / status │
|
|
41
|
+
└────────────────────────────┬────────────────────────────────────┘
|
|
42
|
+
▼
|
|
43
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
44
|
+
│ PHASE 3: Attack Surface Classification │
|
|
45
|
+
│ 攻击面分类:用 5×N 矩阵代替"凭感觉" │
|
|
46
|
+
│ ├── 5 类操作:参数篡改 / 流程跳跃 / 重放 / 并发 / 替换身份 │
|
|
47
|
+
│ └── N 个业务模块:注册 / 登录 / 找回 / 支付 / 优惠 / 订单 / ...│
|
|
48
|
+
└────────────────────────────┬────────────────────────────────────┘
|
|
49
|
+
▼
|
|
50
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
51
|
+
│ PHASE 4: Checklist-Driven Testing │
|
|
52
|
+
│ 按 CHECKLIST.md 逐条复测,每条带 "为什么会出问题 + 如何复测" │
|
|
53
|
+
└────────────────────────────┬────────────────────────────────────┘
|
|
54
|
+
▼
|
|
55
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
56
|
+
│ PHASE 5: Human Judgement & Reporting │
|
|
57
|
+
│ 人脑判断:服务端是否真的接受?业务上是不是真的"占便宜"? │
|
|
58
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 2. Phase 1: Business Modeling / 业务建模
|
|
64
|
+
|
|
65
|
+
> 业务逻辑漏洞的本质:**不了解业务功能,就找不到脆弱点。**
|
|
66
|
+
|
|
67
|
+
### 2.1 Role enumeration / 列清角色
|
|
68
|
+
|
|
69
|
+
不仅是 UI 上能切换的角色,**审计代码 / 抓包响应 / 错误回显**里出现过的所有角色都要列:
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
guest 不登录可以走到哪一步
|
|
73
|
+
user (普通) 绑定手机后能做什么
|
|
74
|
+
vip / paid 付费用户的特权接口列表
|
|
75
|
+
admin / super 管理员功能与 admin URL 路径
|
|
76
|
+
internal / cron /api/internal/* 这种"按理不该外网可达"的路径
|
|
77
|
+
third-party caller webhook、回调、签约方调起的接口
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**实战要点**:很多 Java Web 项目仅依赖 `if (user.role == "admin")` 跳页面,**没有 Filter 也没有 Spring Security 全局拦截**,意味着所有 `/teacher/*` 这类"按理只有特定角色能访问"的 URL,guest 直接 GET 也能拿到数据。这类系统应当默认所有非登录页都未授权。
|
|
81
|
+
|
|
82
|
+
### 2.2 Resource and asset inventory / 列清资产
|
|
83
|
+
|
|
84
|
+
凡涉及"钱、积分、库存、VIP 时长、优惠券、邀请码、个人隐私"的字段都列出来:
|
|
85
|
+
|
|
86
|
+
```text
|
|
87
|
+
amount / total / price / discount_amount / shipping_fee
|
|
88
|
+
balance / points / coupon_balance / gift_card_balance
|
|
89
|
+
quantity / stock / max_per_user
|
|
90
|
+
vip_level / vip_expire_at / membership_status
|
|
91
|
+
real_name / id_card / phone / email / avatar
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
任何**前端可见但又能被请求体改动**的资产字段,都是攻击优先级 P0。
|
|
95
|
+
|
|
96
|
+
### 2.3 Money / privilege flow / 画清钱权流向
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
支付场景: 退款场景:
|
|
100
|
+
user → pay → order order → refund → user
|
|
101
|
+
(能不能让钱回流的同时又不退货?)
|
|
102
|
+
|
|
103
|
+
VIP 场景: 邀请场景:
|
|
104
|
+
user → pay → vip(time) inviter ← reward ← invitee_register
|
|
105
|
+
(能不能 invitee 自己注册自己刷返佣?)
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
参考自 8.逻辑漏洞.pdf page_00009 的支付攻击面图:
|
|
109
|
+
|
|
110
|
+
- **订单**:改价 / 负数 / 库存冲突 / 零库存购买 / 改订单金额
|
|
111
|
+
- **结算**:优惠券复用 / 拦截改金额、改支付方式 / 伪造刷单
|
|
112
|
+
- **支付**:伪造第三方确认 / 窃取付款信息
|
|
113
|
+
- **退货**:绕过商家或商品类型限制
|
|
114
|
+
- **收货**:绕过客户确认
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 3. Phase 2: State Machine and Data Flow / 状态机分析
|
|
119
|
+
|
|
120
|
+
### 3.1 三步法(标准排查流程)
|
|
121
|
+
|
|
122
|
+
来自 逻辑漏洞checklist.pdf page_00003:
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
1. 明确流程 让真实账号把 happy path 完整走一遍,全程 Burp 抓包
|
|
126
|
+
2. 找可操控环节 每一步都问:这一步的状态是前端传的,还是服务端独立判定的
|
|
127
|
+
3. 改参重放对比 只改其中一个变量,与原始包对比响应差异
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### 3.2 Server-side vs client-side fields / 区分谁说了算
|
|
131
|
+
|
|
132
|
+
每抓到一个请求都要做一个分类:
|
|
133
|
+
|
|
134
|
+
| 字段类型 | 例子 | 风险 |
|
|
135
|
+
|---|---|---|
|
|
136
|
+
| 服务端必须强校验 | `price`, `amount`, `quantity`, `user_id`, `vip_level`, `payment_status` | P0:前端可改即漏洞 |
|
|
137
|
+
| 服务端二次计算 | `total = sum(items.price * items.qty)` | 看后端是否信任前端传过来的 total |
|
|
138
|
+
| 服务端只用作 hint | `currency_display`, `ui_theme` | 一般不构成漏洞 |
|
|
139
|
+
| 客户端伪状态 | `success:true`、`error_code:1`、`is_paid:1` | P0:响应包改了能影响后续业务 |
|
|
140
|
+
|
|
141
|
+
**真实案例**(8.逻辑漏洞.pdf page_00022/page_00023):修改手机号场景,服务端返回 `{"error_msg":"旧密码错误","error_code":99999,"success":false}`,攻击者把响应改成 `{"success": true,"error_code": 1}`,前端"看到 success 就放行"导致绕过密码校验直接换绑手机号。**根因是客户端过度信任服务端响应里的状态字段**,必须在服务端独立持久化"该用户是否已通过密码验证"。
|
|
142
|
+
|
|
143
|
+
### 3.3 跨步骤数据追踪
|
|
144
|
+
|
|
145
|
+
找出一切**会跨步骤复用**的标识符:
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
order_id 一笔订单从下单 → 支付 → 发货 → 售后用的是不是同一个?是否可被替换?
|
|
149
|
+
coupon_id 应用优惠券、提交订单、支付时是否每一步都重新校验?
|
|
150
|
+
auth token 找回密码 token / 邮箱验证 token / 邀请 token 是否有效期、是否一次性、是否绑会话
|
|
151
|
+
session_id 登录前后 session 是否换发?修改邮箱 / 密码后是否吊销
|
|
152
|
+
nonce 防重放参数有没有?服务端是否真的拒绝重复 nonce?
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
逻辑漏洞checklist.pdf page_00011 给出一个经典例子:找回密码 URL `resetpassword.php?id=MD5`,如果 auth 是用 PHP 老版本 Windows 下的 `rand()`(最大值 32768)生成 md5,攻击者可以本地遍历 0~32768 全量计算 md5 字典,**整个找回密码机制相当于失效**。
|
|
156
|
+
|
|
157
|
+
```php
|
|
158
|
+
$a=0; for ($a=0;$a<=32768;$a++){ $b=md5($a); echo "\r\n"; echo $b; }
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 4. Phase 3: Attack Surface Matrix / 攻击面 5×N 矩阵
|
|
164
|
+
|
|
165
|
+
把攻击面拆成"操作 × 业务模块"的二维表,每个格子有固定测试套路:
|
|
166
|
+
|
|
167
|
+
| | 注册 | 登录 | 找回密码 | 支付/充值 | 优惠/积分 | 订单 | VIP/会员 | 验证码 | 隐私/资料 | 第三方/回调 |
|
|
168
|
+
|---|------|------|---------|----------|----------|------|---------|--------|-----------|-------------|
|
|
169
|
+
| **参数篡改** | 改 token | 改 user_id | 改邮箱/手机号 | 改金额/数量 | 改面值/复用 | 改总价 | 改等级 | 删验证码字段 | 改 user_id | 改回调 url |
|
|
170
|
+
| **流程跳跃** | 跳过验证码 | 跳 2FA | 跳验证步直接到改密 | 跳支付到确认 | 跳活动时间窗口 | 跳收货 | 跳付费直接开通 | 跳人机验证 | 跳所有人审 | 跳签名校验 |
|
|
171
|
+
| **重放** | 重放注册请求 | 重放登录 | 重放重置 token | 重放支付回调 | 重放领券 | 重放下单 | 重放充值 | 重放短信触发 | 重放修改 | 重放回调 |
|
|
172
|
+
| **并发** | 同邮箱并发注册 | 撞库爆破 | 抢 token 窗口 | 双花 / 并发付款 | 优惠券双开 | 超卖 | 多端并发升级 | 验证码并发触发 | 并发改资料 | 回调并发触发 |
|
|
173
|
+
| **替换身份** | 改 cookie 注册他人 | 越权登录 | 改手机号收他人验证码 | 替换收款人 | 替换领券人 | 替换订单归属 | 替换 vip user | 改手机号收码 | 改 user_id 越权 | 替换商户号 |
|
|
174
|
+
|
|
175
|
+
**用法**:每个项目至少把矩阵全过一遍,能想出测试用例就在 CHECKLIST.md 里把对应行打钩。
|
|
176
|
+
|
|
177
|
+
### 4.1 真实案例索引到矩阵
|
|
178
|
+
|
|
179
|
+
| 案例 | 矩阵位置 | 出处 |
|
|
180
|
+
|------|---------|------|
|
|
181
|
+
| 删除 `prizeIdList` 字段实现 0 元购 | 参数篡改 × 支付 | 8.逻辑漏洞.pdf page_00010 (Keep 跑步活动) |
|
|
182
|
+
| `quantity:0.02` 实现半价 | 参数篡改 × 订单 | 8.逻辑漏洞.pdf page_00011 (商城) |
|
|
183
|
+
| `quantity=999999999` 整数溢出归零 | 参数篡改 × 支付 | 8.逻辑漏洞.pdf page_00008 |
|
|
184
|
+
| Burp Turbo Intruder `concurrentConnections=30` 绕过短信限频 | 并发 × 验证码 | 8.逻辑漏洞.pdf page_00016 |
|
|
185
|
+
| 删除 `JSESSIONID` 重置验证码次数 | 参数篡改 × 验证码 | 8.逻辑漏洞.pdf page_00017 |
|
|
186
|
+
| 修改响应 `success:false → true` 绕过改手机号 | 参数篡改 × 隐私 | 8.逻辑漏洞.pdf page_00022 |
|
|
187
|
+
| 故意填错身份证使审核驳回,反复修改实名 | 流程跳跃 × 隐私 | 8.逻辑漏洞.pdf page_00029 |
|
|
188
|
+
| 抓包发现 `previewPullUrl: *.flv` 直链下载 VIP 资源 | 参数篡改 × VIP | 8.逻辑漏洞.pdf page_00032 |
|
|
189
|
+
| 多设备并发签约领新人优惠 | 并发 × VIP | 逻辑漏洞checklist.pdf page_00012 |
|
|
190
|
+
| Cookie 替换实现水平/垂直越权 | 替换身份 × 隐私 | Java Web 鉴权审计经典案例 |
|
|
191
|
+
| `..//` 路径截断绕过 Filter | 流程跳跃 × 登录 | Java Filter 路径规范化缺陷 |
|
|
192
|
+
| `;` 分号截断 Servlet 路径绕过 Filter | 流程跳跃 × 登录 | Servlet getRequestURI 不规范化 |
|
|
193
|
+
| 数据库 `sys_menu` 重复行致权限残留 | 替换身份 × VIP | RBAC 数据一致性审计 |
|
|
194
|
+
| `host_scan.py` Host 碰撞 | 业务建模 × 第三方 | 内部资产发现实战 |
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## 5. Phase 4: Checklist-Driven Testing / 按 CHECKLIST 复测
|
|
199
|
+
|
|
200
|
+
实际操作阶段直接打开 [CHECKLIST.md](./CHECKLIST.md),**按业务模块从上到下走**,每条都问:
|
|
201
|
+
|
|
202
|
+
1. **为什么会出问题**:这条 checklist 项的根因(前端校验、状态机缺失、并发竞态、签名缺失……)
|
|
203
|
+
2. **如何复测**:精确到 Burp 步骤 / payload / 期望响应,能让另一个人按描述复现
|
|
204
|
+
|
|
205
|
+
CHECKLIST.md 里每条都已经按这两栏给出,本节不再重复。
|
|
206
|
+
|
|
207
|
+
### 5.1 工具栈最佳实践
|
|
208
|
+
|
|
209
|
+
| 工作 | 推荐工具 | 备注 |
|
|
210
|
+
|------|---------|------|
|
|
211
|
+
| 抓包/重放 | Burp Suite Repeater | 必备 |
|
|
212
|
+
| 并发竞态 | Burp Turbo Intruder / Repeater Group "Send in parallel" | 课件多次出现 |
|
|
213
|
+
| 撞库爆破 | Burp Intruder + 字典 | 4 位纯数字验证码 5 分钟可枚举完毕 |
|
|
214
|
+
| Host 碰撞 | `python3 host_scan.py -d target.com -t 100` | github.com/AlphaSec/host_scan |
|
|
215
|
+
| OCR 验证码 | tesseract | 弱验证码可识别 |
|
|
216
|
+
| Java 代码审计 | IntelliJ IDEA + Find in Path 搜 `Filter`、`@PreAuthorize`、`request.getRequestURI` | Spring/Servlet 鉴权代码审计标配 |
|
|
217
|
+
| 数据库一致性核对 | Navicat | 验证"前端删了、库里还在" |
|
|
218
|
+
| 自动化签名爆破 | 本地 PHP/Python `for $i = 0..32768: md5($i)` | 弱随机数 token 直接全量 |
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## 6. Phase 5: Human Judgement / 人脑判断要点
|
|
223
|
+
|
|
224
|
+
> 看到 200 不等于打到漏洞。
|
|
225
|
+
|
|
226
|
+
### 6.1 三个关键追问
|
|
227
|
+
|
|
228
|
+
每个疑似漏洞触发后,**先问自己这三件事再写报告**:
|
|
229
|
+
|
|
230
|
+
1. **业务真的占了便宜吗?**
|
|
231
|
+
- 例:响应 `success:true` 但实际个人中心没看到订单 → 不算
|
|
232
|
+
- 例:抢到了优惠券但提交订单时被服务端二次校验拒绝 → 不算
|
|
233
|
+
- 必须看到"会员时长真增加了/钱真扣了别人的/数据真返了不该返的"才算实证
|
|
234
|
+
|
|
235
|
+
2. **是技术成功还是业务成功?**
|
|
236
|
+
- 0.019 元充值实际只扣 0.01 元但钱包真增加 0.02 元 → 业务成功(8.逻辑漏洞.pdf page_00013)
|
|
237
|
+
- 抓到 flv 直链但带 token/Referer 校验导致 VLC 播不开 → 仅技术成功,要继续测试看能否绕过签名
|
|
238
|
+
|
|
239
|
+
3. **可复现吗?**
|
|
240
|
+
- 并发漏洞:复测 5 次至少 3 次成功才算稳
|
|
241
|
+
- 整数溢出:注意可能引发服务端崩溃,**必须有书面授权**才打(8.逻辑漏洞.pdf page_00008)
|
|
242
|
+
|
|
243
|
+
### 6.2 别误把功能当成漏洞
|
|
244
|
+
|
|
245
|
+
业务逻辑漏洞实践中反复强调一个判定标准:
|
|
246
|
+
|
|
247
|
+
> "判断是否为有效漏洞的标准是:最终获得的权益价值 > 正常单独购买所需成本。"
|
|
248
|
+
|
|
249
|
+
例:发现可以"先支付 1 元试用,再补 99 元升级 VIP" → 这本来就是产品设计的会员升级路径,不是漏洞。
|
|
250
|
+
真的漏洞是:"多端并发补差价 → 多次到账 VIP 时长" → 同一笔补差价获得了 N 倍权益。
|
|
251
|
+
|
|
252
|
+
### 6.3 法律边界
|
|
253
|
+
|
|
254
|
+
8.逻辑漏洞.pdf page_00001 / page_00002 把法律红线讲得非常具体,**任何团队培训时都应该带着读一遍**:
|
|
255
|
+
|
|
256
|
+
- 《网络安全法》第 22 条:禁止任何形式的网络入侵、干扰、窃密以及工具/方法提供
|
|
257
|
+
- 《网络安全法》第 38 条:严禁非法获取、出售或提供公民个人信息
|
|
258
|
+
- 《刑法》第 285 条 + 修正案 7:非法控制或获数情节严重可判七年;提供入侵工具/明知他人犯罪仍提供支持,按共犯论处
|
|
259
|
+
|
|
260
|
+
实操底线:
|
|
261
|
+
|
|
262
|
+
- 必须有书面授权(且明确目标系统范围、时间窗口、可触及的数据类型)
|
|
263
|
+
- 不接触/不存储/不传输任何真实公民个人信息(实名认证类漏洞复测严禁用真人身份证)
|
|
264
|
+
- 测试工具不应为"专为入侵而设计"(同时审查脚本来源、用途说明、是否被列为恶意软件)
|
|
265
|
+
- 触发整数溢出/资源耗尽类漏洞前需取得二次确认,避免造成服务停摆
|
|
266
|
+
|
|
267
|
+
参见 8.逻辑漏洞.pdf page_00001 的合规 checklist:
|
|
268
|
+
|
|
269
|
+
```
|
|
270
|
+
□ 测试活动未涉及未经授权的系统访问或数据提取
|
|
271
|
+
why: 违反网安法第 22 条及刑法 285 条可能构成犯罪
|
|
272
|
+
verify: 检查授权书范围 / 目标系统清单 / 数据采集日志
|
|
273
|
+
|
|
274
|
+
□ 所用测试工具非专为入侵或非法控制设计
|
|
275
|
+
why: 刑法 285 条修正案禁止提供专门用于侵入的工具
|
|
276
|
+
verify: 审查工具来源 / 用途说明 / 是否被公开列为恶意软件
|
|
277
|
+
|
|
278
|
+
□ 不接触、存储或传输任何公民个人信息
|
|
279
|
+
why: 网安法第 38 条禁止非法获取或提供个人信息
|
|
280
|
+
verify: 审计测试数据样本 / 数据库查询记录 / 导出文件内容
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## 7. Quick Reference: A One-Page Decision Tree / 单页决策树
|
|
286
|
+
|
|
287
|
+
```text
|
|
288
|
+
看到一个新接口 / 新业务流,按以下顺序问问题:
|
|
289
|
+
|
|
290
|
+
Q1 这一步的关键状态字段(金额、用户身份、订单状态、权限)有没有走前端?
|
|
291
|
+
└── 有 → 改一下试试,参数篡改 P0
|
|
292
|
+
└── 没成功 → Q2
|
|
293
|
+
└── 成功了 → 看 6.1 三个追问,写报告
|
|
294
|
+
|
|
295
|
+
Q2 能不能跳过这一步直接到下一步?
|
|
296
|
+
└── 后端有没有 Filter / 中间件做全局校验?
|
|
297
|
+
└── 没有 → 直接打下一个 URL(Java Web 仅靠 Servlet 跳页面而无 Filter 的经典缺陷)
|
|
298
|
+
└── 有 → 试试 ../ 截断(Filter 路径规范化缺陷)或 ; 分号截断(getRequestURI 不规范化)
|
|
299
|
+
└── 都不行 → Q3
|
|
300
|
+
|
|
301
|
+
Q3 能不能并发突破限制?
|
|
302
|
+
└── 限频接口 → Burp Turbo Intruder concurrentConnections=30
|
|
303
|
+
└── 限单接口 → 双花、双领券、双签约
|
|
304
|
+
└── 都不行 → Q4
|
|
305
|
+
|
|
306
|
+
Q4 能不能改身份?
|
|
307
|
+
└── Cookie 替换:低权 cookie 拿不到,admin cookie 拿到 → 越权
|
|
308
|
+
└── user_id 替换:改请求里的 uid 拿到他人数据 → 水平越权
|
|
309
|
+
└── 替换收款方:改 username 让他人扣款 → 用户替换攻击 (checklist.pdf page_00017)
|
|
310
|
+
└── 都不行 → Q5
|
|
311
|
+
|
|
312
|
+
Q5 能不能重放?
|
|
313
|
+
└── 支付回调签名校验?没有 → 重放成功 → 重复发货
|
|
314
|
+
└── 找回密码 token 一次性?没有 → 重复改密
|
|
315
|
+
└── 都不行 → 转 Q6
|
|
316
|
+
|
|
317
|
+
Q6 能不能改响应?
|
|
318
|
+
└── 客户端是不是只看 success/error_code 字段?
|
|
319
|
+
└── Burp 改响应 success:false → success:true 看前端会不会放行
|
|
320
|
+
└── 都不行 → 这个接口暂判可信,去打下一个
|
|
321
|
+
|
|
322
|
+
Q7 实在没思路 → 回 PHASE 1,对着没读懂的业务再读一遍代码
|
|
323
|
+
└── Find in Path: Filter / @PreAuthorize / request.getRequestURI / sessionAttribute
|
|
324
|
+
└── 找数据库一致性问题(如 sys_menu 重复行导致权限取消未生效)
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## 8. References / 参考索引
|
|
330
|
+
|
|
331
|
+
- [SKILL.md](./SKILL.md) — 业务逻辑漏洞 attack playbook(英文)
|
|
332
|
+
- [SCENARIOS.md](./SCENARIOS.md) — 支付精度/竞态/验证码/找回密码/枚举的细化 scenario(英文)
|
|
333
|
+
- [CHECKLIST.md](./CHECKLIST.md) — 按业务模块分组的可勾选检查项(双语)
|
|
334
|
+
- 蒸馏原始素材(外部,未入库):
|
|
335
|
+
- 业务逻辑漏洞审计课程录像
|
|
336
|
+
- 业务逻辑漏洞 PDF 教材与 checklist 教材
|
|
337
|
+
- 蒸馏管道脚本:托管在 yaklang-ai-training-materials 仓库的 `scripts/` 目录下,包含 `distill-vuln-videos-by-omni.yak` / `distill-vuln-pdfs-by-omni.yak` / `aggregate-vuln-dumps.yak` / `distill-business-logic-vuln-videos.yak` / `aggregate-distill-topics.yak` / `clean-distill-buckets-by-llm.yak`。
|