hacktricks/pentesting-web/reverse-tab-nabbing.md

117 lines
6.6 KiB
Markdown
Raw Normal View History

{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2022-04-28 16:01:33 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
# 설명
2021-05-01 15:23:19 +00:00
**공격자**가 **피해자**가 클릭할 **`<a`** 태그의 **`href`** 인자를 **제어**할 수 있는 상황에서, **공격자**는 이 **링크**를 자신의 제어 하에 있는 웹( **악성** **웹사이트**)으로 **지정**합니다. 그런 다음, **피해자가 링크를 클릭**하고 공격자의 웹사이트에 접근하면, 이 **악성** **웹사이트**는 **자바스크립트** 객체 **`window.opener`**를 통해 **원래** **페이지**를 **제어**할 수 있습니다.\
페이지에 **`rel="opener"`**가 없지만 **`target="_blank"`**가 포함되어 있고 **`rel="noopener"`**가 없으면, 또한 취약할 수 있습니다.
2021-05-01 15:23:19 +00:00
이 행동을 악용하는 일반적인 방법은 `window.opener.location = https://attacker.com/victim.html`을 통해 **원래 웹의 위치**를 공격자가 제어하는 웹으로 **변경**하는 것입니다. 이 웹은 **원래 웹사이트**처럼 보이도록 **구성**되어, **로그인** **폼**을 **모방**하고 사용자에게 자격 증명을 요청할 수 있습니다.
2021-05-01 15:23:19 +00:00
그러나 **공격자가 이제 원래 웹사이트의 윈도우 객체를 제어할 수 있으므로**, 그는 이를 다른 방법으로 악용하여 **은밀한 공격**을 수행할 수 있습니다(아마도 자바스크립트 이벤트를 수정하여 그가 제어하는 서버로 정보를 유출할 수 있겠죠?).
2021-05-01 15:23:19 +00:00
2024-02-10 21:30:13 +00:00
# 개요
2021-05-01 15:23:19 +00:00
## 백 링크가 있는 경우
2021-05-01 15:23:19 +00:00
예방 속성이 사용되지 않을 때 부모 페이지와 자식 페이지 간의 링크:
2021-05-01 15:23:19 +00:00
2024-02-06 03:10:38 +00:00
![https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITH_LINK.png](https://owasp.org/www-community/assets/images/TABNABBING\_OVERVIEW\_WITH\_LINK.png)
2021-05-01 15:23:19 +00:00
## 백 링크가 없는 경우
2021-05-01 15:23:19 +00:00
예방 속성이 사용될 때 부모 페이지와 자식 페이지 간의 링크:
2021-05-01 15:23:19 +00:00
2024-02-06 03:10:38 +00:00
![https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITHOUT_LINK.png](https://owasp.org/www-community/assets/images/TABNABBING\_OVERVIEW\_WITHOUT\_LINK.png)
2021-05-01 15:23:19 +00:00
## 예시 <a href="#examples" id="examples"></a>
2021-05-01 15:23:19 +00:00
다음 페이지를 폴더에 생성하고 `python3 -m http.server`로 웹 서버를 실행합니다.\
그런 다음, **접근** `http://127.0.0.1:8000/`vulnerable.html, **클릭**하여 **원래** **웹사이트** **URL**이 **변경**되는 것을 확인합니다.
2021-05-01 15:23:19 +00:00
{% code title="vulnerable.html" %}
```markup
<!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>
```
{% endcode %}
2021-05-01 15:23:19 +00:00
{% code title="malicious.html" %}
```markup
<!DOCTYPE html>
<html>
2024-02-10 21:30:13 +00:00
<body>
<script>
window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</script>
</body>
2021-05-01 15:23:19 +00:00
</html>
```
{% endcode %}
{% code title="malicious_redir.html" %}
2021-05-01 15:23:19 +00:00
```markup
<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>
```
{% endcode %}
2024-02-10 21:30:13 +00:00
## 접근 가능한 속성 <a href="#accessible-properties" id="accessible-properties"></a>
2021-05-01 15:23:19 +00:00
**교차 출처** 접근이 발생하는 시나리오에서는, **opener** JavaScript 객체 참조로 지칭되는 **window** JavaScript 클래스 인스턴스의 속성에 대해 악의적인 사이트가 접근할 수 있는 것은 다음과 같습니다:
2021-05-01 15:23:19 +00:00
- **`opener.closed`**: 이 속성은 창이 닫혔는지 여부를 확인하기 위해 접근되며, 불리언 값을 반환합니다.
- **`opener.frames`**: 이 속성은 현재 창 내의 모든 iframe 요소에 대한 접근을 제공합니다.
- **`opener.length`**: 현재 창에 존재하는 iframe 요소의 수를 반환합니다.
- **`opener.opener`**: 현재 창을 연 창에 대한 참조를 이 속성을 통해 얻을 수 있습니다.
2024-02-10 21:30:13 +00:00
- **`opener.parent`**: 이 속성은 현재 창의 부모 창을 반환합니다.
- **`opener.self`**: 이 속성은 현재 창 자체에 대한 접근을 제공합니다.
- **`opener.top`**: 이 속성은 가장 상위의 브라우저 창을 반환합니다.
2021-05-01 15:23:19 +00:00
그러나 도메인이 동일한 경우, 악의적인 사이트는 [**window**](https://developer.mozilla.org/en-US/docs/Web/API/Window) JavaScript 객체 참조에 의해 노출된 모든 속성에 접근할 수 있습니다.
2021-05-01 15:23:19 +00:00
# 예방
2021-05-01 15:23:19 +00:00
2024-02-10 21:30:13 +00:00
예방 정보는 [HTML5 Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/HTML5\_Security\_Cheat\_Sheet.html#tabnabbing)에 문서화되어 있습니다.
2021-05-01 15:23:19 +00:00
## 참고 문헌
2021-05-01 15:23:19 +00:00
2024-02-06 03:10:38 +00:00
* [https://owasp.org/www-community/attacks/Reverse_Tabnabbing](https://owasp.org/www-community/attacks/Reverse_Tabnabbing)
2021-05-01 15:23:19 +00:00
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
<summary>Support HackTricks</summary>
2022-04-28 16:01:33 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}