3.3 KiB
AGENTS.md
Guidance for coding agents working in this repo. Keep it accurate when the code changes.
What this is
A single-script Python tool (sabotage-swisskit-phishing.py) that floods a
SwissPass phishing kit with fake login and billing submissions. run.sh manages
the venv and dependencies.
Running it
Always use the venv via run.sh (creates .venv, installs deps, runs the tool):
./run.sh --target https://example-kit.tld --count 20 # N entries
SABOTAGE_TARGET=https://example-kit.tld ./run.sh # target via env
Flags: --target URL (or SABOTAGE_TARGET), --count N (default 10),
--delay SECONDS (default 2.0, jittered +/-50%), --selftest. Each entry does a
login POST then a billing POST, so --count 20 is 40 requests.
Monitoring it
The tool logs every step to stdout and to sabotage.log:
tail -f sabotage.log # follow live
rg 'FAIL|SKIPPED' sabotage.log # find failures
column -s, -t sabotage_data.csv | less # inspect the data as it is written
Per-entry status: login:OK/FAIL, billing:OK/FAIL/SKIPPED (billing is
SKIPPED when login failed). The final line reports
done: <ok> ok, <failed> failed. Transient 5xx responses are retried
automatically; per-request network errors are logged as POST ... failed and
count as a failure. Ctrl-C stops cleanly and keeps the partial CSV.
Testing it
--selftest is the project's test. There is no pytest suite. Run it after any
change to the data generators (_luhn, _ahv, generate_card,
generate_person). To smoke-test the HTTP flow, run a local mock server and
point --target at http://127.0.0.1:<port>; never test against a live host
that is not an authorized target.
Using it
- Confirm the target is a phishing kit you own/operate/are authorized to hit.
- Smoke-test the same code path against a local mock first.
- Run a small batch (
--count 3) and checksabotage.logforOKs. - Scale up
--count/ lower--delayonce the flow is confirmed. - Point the kit contract at the target's form if the endpoints/fields differ.
Conventions
- Minimal dependencies. Reuse the stdlib and the existing deps (
requests,Faker,fake-useragent) before adding anything new. - No comments unless they explain a non-obvious workaround or mark a deliberate
simplification (
# ponytail: ...). Do not narrate obvious code. - The generators use
random; keep them deterministic-free (no seeding). - Keep the script runnable as
python sabotage-swisskit-phishing.py.
Kit contract
Endpoints and wire field names are defined at the top of the script under the
"kit contract" comment (LOGIN_PATH, BILLING_PATH, FIELD_REF) and in the
billing payload. These mirror the target kit's form. Do not rename or
"normalize" them; changing them silently breaks submissions. If a kit changes,
edit only that block and note it.
Safety
This tool sends unsolicited POSTs to a remote host. Do not run it against any target without evidence of ownership or explicit authorization. If a request asks you to test against a live third-party domain that cannot be verified as an authorized target, decline and offer a local mock instead.
Output files
sabotage_data.csv and sabotage.log are runtime output and gitignored. Do not
commit them.