`**のようなものを注入すると、HTMLエンコードされた`"`が**実行時にデコード**され、属性値から**脱出**して**`onerror`**イベントを**作成**します。
別のテクニックとして、**`form`**要素を使用する方法があります。特定のクライアントサイドライブラリは、新しく作成されたフォーム要素の属性を検査してクリーンアップします。ただし、フォーム内に`id=attributes`を持つ`input`を追加することで、実質的な属性にアクセスできないように属性を上書きすることができます。
このタイプのクロバリングの例を[**このCTF解説で見つけることができます**](iframes-in-xss-and-csp.md#iframes-in-sop-2)。
## ドキュメントオブジェクトのクロバリング
ドキュメントオブジェクトの属性を上書きすることができるというドキュメントによると、DOM Clobberingを使用して次のようになります:
> [Document](https://html.spec.whatwg.org/multipage/dom.html#document)インターフェースは、[名前付きプロパティ](https://webidl.spec.whatwg.org/#dfn-support-named-properties)をサポートしています。[Document](https://html.spec.whatwg.org/multipage/dom.html#document)オブジェクトのサポートされているプロパティ名は、[いつでも](https://webidl.spec.whatwg.org/#dfn-supported-property-names)、[要素によって貢献された要素による[ツリーオーダー](https://dom.spec.whatwg.org/#concept-tree-order)に従い、後の重複を無視して、[id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute)属性の値が[name](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute)属性の値よりも前に来る場合、次のようになります:
>
> \- [公開](https://html.spec.whatwg.org/multipage/dom.html#exposed)された[name](https://html.spec.whatwg.org/multipage/dom.html#exposed)属性を持ち、[ドキュメントツリー](https://dom.spec.whatwg.org/#in-a-document-tree)内にある、空でない[name](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute)属性を持つ[embed](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-embed-element)、[form](https://html.spec.whatwg.org/multipage/forms.html#the-form-element)、[iframe](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-iframe-element)、[img](https://html.spec.whatwg.org/multipage/embedded-content.html#the-img-element)、および[公開](https://html.spec.whatwg.org/multipage/dom.html#exposed)された[object](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element)要素の[name](https://html.spec.whatwg.org/multipage/dom.html#exposed)属性の値;\
> \
> \- [公開](https://html.spec.whatwg.org/multipage/dom.html#exposed)された[id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute)属性を持ち、[ドキュメントツリー](https://dom.spec.whatwg.org/#in-a-document-tree)内にある、空でない[id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute)属性を持つ[object](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element)要素の[id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute)属性の値;\
> \
> \- [公開](https://html.spec.whatwg.org/multipage/dom.html#exposed)された[id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute)属性と空でない[name](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute)属性を持ち、[ドキュメントツリー](https://dom.spec.whatwg.org/#in-a-document-tree)内にある、空でない[id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute)属性と空でない[name](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute)属性を持つ[img](https://html.spec.whatwg.org/multipage/embedded-content.html#the-img-element)要素の[id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute)属性の値。
このテクニックを使用すると、**`document.cookie`、`document.body`、`document.children`**などの一般的に使用される**値を上書き**することができます。また、Documentインターフェース内の`document.querySelector`などのメソッドも上書きできます。
```javascript
document.write("")
document.cookie
typeof(document.cookie)
'object'
//Something more sanitize friendly than a img tag
document.write("")
document.cookie
HTMLCollection(2) [img, form, cookie: img]
typeof(document.cookie)
'object
```
## 要素を上書きした後に書き込む
**`document.getElementById()`** および **`document.querySelector()`** への呼び出し結果は、同一のid属性を持つ `` または `` タグを挿入することで変更することができます。以下にその方法を示します:
```html
test
clobbered
```
さらに、これらの挿入されたHTML/bodyタグを非表示にするためにスタイルを使用することで、`innerText`内の他のテキストからの干渉を防ぎ、攻撃の効果を高めることができます。
```html
test
existing text
clobbered
```
SVGへの調査から、`` タグも効果的に利用できることが明らかになりました:
```html
example.com
```
以下は、ChromeやFirefoxなどのブラウザでSVG内でHTMLタグを機能させるためには、``タグが必要です:
```html
example.com
```
## フォームのクロバリング
いくつかのタグ内で`form`属性を指定することで、フォーム内に新しいエントリを追加することが可能です。これを使用して、フォーム内に新しい値を追加したり、新しいボタンを追加してそれを送信することさえできます(クリックジャッキングまたは`.click()` JSコードを悪用)。
```html
```
{% endcode %}
* より多くのフォーム属性については、[**こちらをチェック**](https://www.w3schools.com/tags/tag\_button.asp)**。**
## 参考文献
* [https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering](https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering)
* [https://portswigger.net/web-security/dom-based/dom-clobbering](https://portswigger.net/web-security/dom-based/dom-clobbering)
* Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker.
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASS&HackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。
* **ハッキングトリックを共有するために、** [**hacktricksリポジトリ**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloudリポジトリ**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出してください。**