hacktricks/pentesting-web/reverse-tab-nabbing.md
2024-02-10 21:30:13 +00:00

6.7 KiB

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

설명

공격자가 피해자가 클릭할 target="_blank" rel="opener" 속성을 가진 <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_WITHOUT_LINK.png

예제

다음과 같은 페이지를 폴더에 생성하고 python3 -m http.server로 웹 서버를 실행하세요.
그런 다음, http://127.0.0.1:8000/vulnerable.html에 접속하여 링크를 클릭하고 원래 웹사이트의 URL이 변경되는 것을 확인하세요.

{% code title="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>

{% code title="malicious.html" %}

<!DOCTYPE html>
<html>
<body>
<script>
window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</script>
</body>
</html>

{% code title="malicious_redir.html" %}

<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>

{% endcode %}

접근 가능한 속성

교차 출처(다른 도메인 간의 접근) 액세스가 발생하는 시나리오에서, 악성 사이트에서 접근할 수 있는 opener JavaScript 객체 참조에 의해 참조되는 window JavaScript 클래스 인스턴스의 속성은 다음과 같이 제한됩니다:

  • opener.closed: 이 속성은 창이 닫혔는지 여부를 확인하기 위해 액세스되며, 부울 값이 반환됩니다.
  • opener.frames: 이 속성은 현재 창 내의 모든 iframe 요소에 대한 액세스를 제공합니다.
  • opener.length: 이 속성은 현재 창에 있는 iframe 요소의 수를 반환합니다.
  • opener.opener: 이 속성을 통해 현재 창을 열었던 창에 대한 참조를 얻을 수 있습니다.
  • opener.parent: 이 속성은 현재 창의 부모 창을 반환합니다.
  • opener.self: 이 속성은 현재 창 자체에 대한 액세스를 제공합니다.
  • opener.top: 이 속성은 가장 위에 있는 브라우저 창을 반환합니다.

그러나 도메인이 동일한 경우, 악성 사이트는 window JavaScript 객체 참조에 의해 노출된 모든 속성에 액세스할 수 있습니다.

예방 방법

예방 정보는 HTML5 Cheat Sheet에 문서화되어 있습니다.

참고 자료

htARTE (HackTricks AWS Red Team Expert)를 통해 제로에서 영웅까지 AWS 해킹 배우기!

HackTricks를 지원하는 다른 방법: