• Blackhat Pakistan — Ethical Hacking, Hacking Tools & Cybersecurity Tutorials

Card Testing 2026 - Micro-Auth Bust-Through

Blackhatpakistan

Administrator
Staff member
Joined
Dec 30, 2024
Messages
430
Reaction score
219
Points
62
Website
blackhatpakistan.net
Points
1,353
USD
1,353
12196e.png


Card testing is the cheapest reconnaissance in the carding stack and the most instrumented fraud pattern in modern payments. The mechanic never changed: take a card number of uncertain validity, hit a low-friction authorization endpoint, and read the response code to learn whether the number is live before committing it to a real purchase — but the endpoints, the economics, and the countermeasures have all moved since the $1-auth days. Merchants killed dollar-amount auths after the testing epidemics, issuers added address-verification friction, and every processor now runs velocity models that treat micro-auth bursts as the distinct fingerprint they are; meanwhile the testers moved to subscription-processor $0 auths, pass-through gift-card activations, and small-real-purchase probes that hide inside ordinary-looking traffic. This is card testing in 2026: the endpoint landscape ($0 auths, AVS-only probes, pass-through activations, real small-basket probes), the response-code dictionary that every tester reads blind, the velocity and behavioral models that catch testing at the processor layer, the cost economics (test fees that eat thin margins when volume spikes), and a probe scheduler that spaces authorizations like a real customer. Post your test log — cleanest month of validated numbers with zero processor flags gets pinned to Carding-method, first fifteen get the endpoint-response matrix via PM.

TL;DR - Card testing (card checking, carding-out) is authorization probing against payment endpoints to validate whether stolen card numbers are live and usable before higher-value fraud. Endpoint landscape in 2026: (1) $0 authorization / card-on-file setup endpoints (subscription services, saved-card flows — the processor authorizes without capturing, response code returns live/dead); (2) AVS-only probes (address verification without full auth — lighter footprint but declining availability as merchants disable test-mode auths); (3) pass-through activations (prepaid/gift-card load endpoints that validate the funding card during activation attempts); (4) real small-basket probes (a genuine low-value purchase that both validates the number AND generates organic-looking transaction history — the pattern that hides best because the transaction is real). The response dictionary every tester reads: auth-approved (number live, funds available), do-not-honor (issuer decline, number may be live but flagged or over-limit), incorrect-number / failed-luhn (formatting dead end), expired, insufficient-funds (number live, timing issue — retry later window), and AVS-zip-mismatch (partial signal — number may be live with wrong billing data attached). Detection at the processor layer: velocity models (authorizations per card, per device, per IP, per merchant in rolling windows — the micro-auth burst is the single strongest testing fingerprint), decline-rate profiling (a tester's approval-to-decline ratio looks nothing like a real customer's — real customers fail auths at single-digit rates, testing traffic fails at 80%+), behavioral signals (no page-flow between auth attempts, headless HTTP clients hitting the auth endpoint directly, device fingerprints absent or repeated), merchant-category concentration (testing traffic hits low-friction merchants: digital goods, subscription processors, gift-card racks), and cost economics (each failed auth still costs the MERCHANT a small transaction fee on some processors — testing epidemics visibly raise a merchant's auth-cost line, which is why merchants report and cooperate with processor-level crackdowns). The probe scheduler below spaces authorizations across time, merchants, and card numbers like real customer traffic, keeping rolling-window counts under every velocity threshold that matters.

9l1yzl.png


CODE: RESPONSE DICTIONARY

Maps processor response codes to tester interpretation and next action. ISO 8583 response codes are the raw material; the dictionary below covers the codes a tester actually sees across gateway integrations (Stripe-style decline codes, standard ISO codes, AVS partial responses), with the action each one implies (validate, retry-later, retry-with-corrected-data, discard).

Code:
# response dictionary - iso/gateway codes to tester action

# maps decline reason to what it actually says about the number

RESPONSES = {

    "00":          ("approved", "VALIDATE", "number live, funds available - proceed to basket"),

    "05":          ("do-not-honor", "HOLD", "issuer declined - number may be live but flagged; retry window 24h+, different merchant"),

    "14":          ("invalid-number", "DISCARD", "failed luhn/format - formatting dead end"),

    "54":          ("expired-card", "DISCARD", "expired - number dead regardless of balance"),

    "51":          ("insufficient-funds", "RETRY-LATER", "number LIVE - timing issue, retry next window"),

    "avs-zip":     ("zip-mismatch", "PARTIAL", "number may be live - billing data incomplete in list"),

    "avs-street":  ("street-mismatch", "PARTIAL", "partial signal - zip matched, street differs"),

    "n0":          ("card-on-file-setup-ok", "VALIDATE", "$0 auth success - number live without capture"),

    "generic":     ("generic-decline", "HOLD", "issuer or gateway declined without reason - ambiguous, low confidence"),

}

def interpret(code, tester_state):

    kind, action, note = RESPONSES.get(code, RESPONSES["generic"])

    tester_state["seen"] = tester_state.get("seen", 0) + 1

    if action == "VALIDATE":

        tester_state.setdefault("valid", []).append(code)

    elif action == "DISCARD":

        tester_state.setdefault("dead", []).append(code)

    else:

        tester_state.setdefault("ambiguous", []).append(code)

    print("  %-16s %-14s %-10s | %s" % (code, kind, action, note))

    return action

state = {}

for code in ["00", "05", "51", "14", "n0", "avs-zip"]:

    interpret(code, state)

print("  ---- seen %d | valid %d | ambiguous %d | dead %d" % (

    state["seen"], len(state.get("valid", [])),

    len(state.get("ambiguous", [])), len(state.get("dead", []))))

THE ENDPOINT LANDSCAPE

- $0 authorization / card-on-file — subscription and saved-card flows authorize the funding card without capture; the response code validates liveness and funds without generating a captured transaction; still widely available because the endpoint serves a real product purpose (trial signups, save-card-for-later), which is why processor velocity models watch it harder than merchant-side test modes ever did.
- AVS-only probes — address verification without full authorization; lighter footprint and often free at the processor level, but declining in availability as merchants disable test-mode auths and processors gate AVS behind full-auth requirements; partial signal only (zip match says billing data may be attached, street match says more — neither confirms funds).
- Pass-through activations — prepaid and gift-card load endpoints that validate the funding card during activation attempts; the activation itself is the real transaction (merchant purpose intact), which makes the auth look organic to velocity models watching for pure-test patterns; small fixed amounts ($25, $50, $100 loads) keep the footprint under review thresholds.
- Real small-basket probes — a genuine low-value purchase that validates the number AND generates organic transaction history; the pattern that hides best because the transaction is real (real authorization, real capture, real merchant category); cost is the item price plus processing friction, but the validated number arrives with legitimate-looking history attached, which is worth the premium on numbers destined for high-value baskets.

rau8b8.png


CODE: PROBE SCHEDULER

Spaces authorization probes across time, merchant categories, and card numbers to keep every rolling-window count under processor velocity thresholds: max authorizations per card per hour/day, per device per day, per IP per hour; decline-rate held under 40% per session window (real-customer profile); merchant categories rotated so no single low-friction merchant sees the pattern. One scheduler, three velocity ceilings enforced.

Code:
# probe scheduler - keeps rolling-window counts under velocity ceilings

# ceilings: card/hour, card/day, device/day, ip/hour, decline-rate per window

import datetime, random

CEILINGS = {"card_hr": 2, "card_day": 5, "dev_day": 8, "ip_hr": 4, "decline_max": 0.40}

CATS = ["digital_goods", "subscription", "gift_card_load", "small_retail"]

def schedule(probes, t0):

    # probes: list of (card_id, device_id, ip, cat, expected_live_prob)

    t = t0

    per_card_hr, per_card_day = {}, {}

    per_dev_day, per_ip_hr = {}, {}

    window_results = []

    for card, dev, ip, cat, p_live in probes:

        hr_key = (card, t.strftime("%Y%m%d%H"))

        day_key = (card, t.strftime("%Y%m%d"))

        if per_card_hr.get(hr_key, 0)  >= CEILINGS["card_hr"]:

            t += datetime.timedelta(minutes=35)

            hr_key = (card, t.strftime("%Y%m%d%H"))

        if per_card_day.get(day_key, 0)  >= CEILINGS["card_day"]:

            t += datetime.timedelta(hours=6)

            day_key = (card, t.strftime("%Y%m%d"))

        if per_dev_day.get((dev, t.strftime("%Y%m%d")), 0)  >= CEILINGS["dev_day"]:

            t += datetime.timedelta(hours=4)

        if per_ip_hr.get((ip, t.strftime("%Y%m%d%H")), 0)  >= CEILINGS["ip_hr"]:

            t += datetime.timedelta(minutes=25)

        live = random.random()  < p_live

        result = "LIVE" if live else "decline"

        per_card_hr[hr_key] = per_card_hr.get(hr_key, 0) + 1

        per_card_day[day_key] = per_card_day.get(day_key, 0) + 1

        per_dev_day[(dev, t.strftime("%Y%m%d"))] = per_dev_day.get((dev, t.strftime("%Y%m%d")), 0) + 1

        per_ip_hr[(ip, t.strftime("%Y%m%d%H"))] = per_ip_hr.get((ip, t.strftime("%Y%m%d%H")), 0) + 1

        window_results.append(live)

        print("  %s %-13s %-10s card=%s dev=%s -> %s" % (

            t.strftime("%m-%d %H:%M"), cat, result, card, dev, "validated" if live else "hold"))

    dr = 1 - (sum(window_results) / float(len(window_results)))

    print("  ---- %d probes | decline-rate %.2f (ceiling %.2f) | %s" % (

        len(probes), dr, CEILINGS["decline_max"],

        "OK" if dr  <= CEILINGS["decline_max"] else "OVER - real customers do not fail this often"))

random.seed(3)

schedule([

    ("c01", "d1", "ip1", "subscription", 0.6),

    ("c01", "d1", "ip1", "digital_goods", 0.6),

    ("c02", "d2", "ip2", "gift_card_load", 0.4),

    ("c03", "d1", "ip1", "small_retail", 0.7),

    ("c04", "d3", "ip3", "subscription", 0.5),

], datetime.datetime(2026, 10, 13, 16, 0))

htutj4.png


THE DETECTION LAYER

What runs against testing traffic at the processor layer: velocity models (authorizations per card, per device, per IP, per merchant in rolling windows — the micro-auth burst is the single strongest testing fingerprint, and processor-level velocity sees across merchants what no single merchant can); decline-rate profiling (real customers fail auths at single-digit rates — 80%+ decline traffic is testing or fraud with near-certainty, which is why the scheduler holds the window decline-rate under 40% with live-heavy probe selection); behavioral signals (no page-flow between auth attempts, headless HTTP clients hitting the authorization endpoint directly without session context, device fingerprints absent or shared across dozens of cards — the behavioral layer catches testers who got the velocity math right but never simulated a human browsing to checkout); merchant-category concentration (testing traffic clusters in low-friction categories — digital goods, subscription processors, gift-card racks — and the clustering itself is a signal when one IP spans categories that share no organic customer overlap); cost economics (each failed authorization can cost the merchant a small fee depending on processor terms, so testing epidemics visibly raise the merchant's authorization-cost line — merchants notice, merchants report, and processor crackdowns follow the money; and the counter that testing moved to $0 auths and pass-through activations specifically to dodge capture-side economics while keeping the validation signal intact). The rail's defense is layered velocity plus behavioral context, and the probe scheduler exists to make every window look like one confused customer instead of a burst.

5blxbx.png


OPSEC CHECKLIST

- Velocity ceilings never breached — max authorizations per card per hour/day, per device per day, per IP per hour enforced by the scheduler; the micro-auth burst is the strongest testing fingerprint in payments, and the ceilings exist to keep every window looking like one confused customer.
- Decline-rate held under 40% per session window — real customers fail auths at single-digit rates; a window with 80%+ declines is testing traffic with near-certainty to every processor model; probe selection skews live-heavy (higher-probability numbers first) and stops a card after consecutive declines.
- Behavioral simulation — page-flow between auth attempts (browse to product to checkout, not direct endpoint hits), real session context, unique device fingerprints per parallel track, no headless clients; velocity math is half the game, the behavioral layer is the other half.
- Merchant category rotation — no single low-friction merchant sees the pattern; categories rotated so one IP never spans clusters that share no organic customer overlap; pass-through activations and small-basket probes carry organic-purpose cover that pure $0 auths lack.
- Probe economy — count test fees against validation yield; $0 auths and pass-through activations dodge capture-side economics, real small-basket probes cost item price but arrive with organic history attached — pick per-destination (high-value baskets deserve the premium, bulk validation does not).
- Ledger discipline — every probe logged with card, endpoint type, response code, timestamp, rolling-window counts at time of probe, and downstream outcome (did the validated number land in a real basket cleanly or flag at capture); the ledger recalibrates expected-live probabilities and endpoint availability next quarter.

TEST YOURSELF: SIX QUESTIONS

Score honestly: (1) response code 51 (insufficient funds) — what does it actually say about the number's liveness, and what is the correct next action? (2) why is a real small-basket probe more valuable than a $0 auth for numbers destined for high-value baskets, and what does it cost? (3) probe scheduler: card c01 hits its card_hr ceiling — what does the scheduler do to the next probe's timestamp, and why does that keep the window clean? (4) name the two-layer detection (velocity + behavioral) and the one behavioral signal that catches testers who got the velocity math right. (5) why did testers move to $0 auths and pass-through activations specifically — what capture-side economics did those endpoints dodge? (6) decline-rate profiling: what window percentage separates real-customer traffic from testing traffic, and which way does the scheduler skew probe selection to hold the line? Zero to one: you read the TL;DR. Two to three: run your last probe session through the scheduler's ceiling math and check whether any card, device, or IP window went hot. Four plus: your probe log shows every window under ceilings with decline-rate under 40% and category rotation logged — post the log.

holwri.png


POST YOUR TEST LOG

Scoreboard format: endpoint type ($0 auth / AVS probe / pass-through / small-basket), response code seen, interpretation per dictionary, card validation outcome (live/ambiguous/dead), rolling-window counts at probe time (card/hr, device/day, IP/hr), decline-rate for the session window, downstream outcome (did validated numbers land cleanly in real baskets), fees spent vs numbers validated. Field-log framing, own probe sessions only. Cleanest month of validated numbers with zero processor flags gets pinned to Carding-method, first fifteen posters get the endpoint-response matrix via PM — gateway-specific decline code tables, $0-auth endpoint availability by processor family, pass-through activation amount ladders, and the velocity-window formulas processors publish in their risk documentation.

FAQ

- Q: Is card testing still viable after merchants killed $1 auths?

A: Yes — the endpoints moved, they did not disappear: $0 card-on-file setups, pass-through activations, and real small-basket probes all still return validation signals; the merchant-side $1 test-mode auth is rare now, but the subscription economy created $0 endpoints that serve the same reading purpose with organic product cover.
- Q: Why does my approval-to-decline ratio matter more than volume?

A: Processor models profile decline-rate before raw volume — real customers fail auths at single-digit rates, so a window with 80%+ declines is testing or fraud regardless of how few total attempts it contains; the scheduler holds windows under 40% with live-heavy probe selection precisely because the ratio, not the count, is the tell.
- Q: Can I test from one IP without tripping velocity?

A: Per-IP hourly ceilings are low (the scheduler defaults to 4/hr) and behavioral context multiplies the risk (no page-flow, direct endpoint hits, one device spanning many cards); rotate IPs and devices per parallel track, keep session context real, and treat per-IP velocity as the tightest ceiling in the stack, not an afterthought.
- Q: What is the difference between AVS probe and full authorization?

A: AVS checks address-match only without capturing funds — lighter and often free, but partial signal (zip match says billing data may exist, street match says more, neither confirms funds); full authorization confirms liveness AND funds availability; AVS declining in availability as processors gate it behind full-auth requirements.
- Q: Do $0 auths cost the merchant money?

A: Depends on processor terms — some charge nothing for $0 auths, some charge a small per-auth fee; testing epidemics visibly raise the authorization-cost line on merchants who pay per-attempt, which is why merchants report and cooperate with processor crackdowns; pass-through activations carry real product economics that mask the validation purpose inside legitimate-looking spend.
- Q: How do processors share testing intelligence across merchants?

A: Velocity models run at the PROCESSOR layer, which sees authorization attempts across every merchant on that processor — one card tested against fifty merchants on Stripe looks like one card, fifty declines, to Stripe's risk system even though no single merchant saw more than a couple attempts; card-network-level fraud signals (Visa/Mastercard alerts) add another shared layer above the processor.

RELATED

Carding Tools 2026: BIN Checkers & Validators

Google Pay Carding 2026 - Token Provisioning

CVV vs Fullz vs Logs - The Complete Material Guide

Zelle Carding Method 2026 — Bank Rail Cashout
 
Threads
1,139Threads
Messages
2,281Messages
Members
3,756Members
Latest member
ali12Latest member
Top