← ClaudeAtlas

otp-bruteforce-testinglisted

Detect, validate, and exploit OTP (one-time password) brute-force vulnerabilities in phone/email verification, MFA, password-reset, and transaction-confirmation flows. Use when a target issues numeric one-time codes (4-8 digits via SMS/email), when OTP verification endpoints appear unthrottled, when reviewing authentication or account-recovery code, or when assessing rate limiting on verification APIs. Produces PoC scripts, response-oracle analysis, CVSS scoring, and remediation guidance.
SecurityTalent/bugskill-ai · ★ 3 · Testing & QA · score 76
Install: claude install-skill SecurityTalent/bugskill-ai
# OTP Brute-Force Testing Validate whether an OTP verification endpoint can be brute-forced: unlimited attempts, no lockout, long TTL, weak entropy, or a response oracle that reveals the correct code. Targets must be within the scope of the engagement you are authorized to test. ## When to use - Phone/email verification flows (e.g., "add phone number to profile") - MFA / 2FA challenge steps and login-by-OTP - Password reset and account recovery - Transaction confirmation (payments, withdrawals, admin actions) - Any endpoint that accepts a 4-8 digit numeric code and returns success/failure ## Core attack pattern (reference: HackerOne #3265780, CoinMate.io) 1. Trigger an OTP challenge, submit any code, and **intercept the verification request** (Burp proxy). 2. Brute-force the OTP space (100000–999999) with Burp Intruder or the bundled script. 3. Detect the valid OTP via a **response oracle** — in the CoinMate case, the response containing a valid OTP had a **Content-Length of 961 bytes** vs. ~150 for failures. 4. Replay the **original** intercepted request with the recovered OTP to complete the operation (the phone number is added to the profile). 5. Chain the impact: attacker-controlled phone number on the account → the number receives login/reset OTPs → **account takeover**. ## Phase 0 — Recon the OTP flow - Map all OTP-issuing and OTP-verifying endpoints; note parameter names (`otp`, `code`, `token`, `verificationCode`), length (4/6/8 digits), format