# Clickjacking {{#include ../banners/hacktricks-training.md}} ## What is Clickjacking 클릭재킹 공격에서 **사용자**는 **보이지 않거나** 다른 요소로 위장된 웹페이지의 **요소**를 **클릭하도록 속아** 넘어갑니다. 이 조작은 사용자에게 의도하지 않은 결과를 초래할 수 있으며, 예를 들어 악성 소프트웨어 다운로드, 악성 웹 페이지로의 리디렉션, 자격 증명 또는 민감한 정보 제공, 금전 이체, 또는 제품의 온라인 구매 등이 있습니다. ### Prepopulate forms trick 때때로 **페이지 로딩 시 GET 매개변수를 사용하여 양식의 필드 값을 채우는 것이 가능합니다**. 공격자는 이 동작을 악용하여 임의의 데이터로 양식을 채우고 클릭재킹 페이로드를 전송하여 사용자가 제출 버튼을 누르도록 할 수 있습니다. ### Populate form with Drag\&Drop 사용자에게 **양식을 작성하도록** 요구해야 하지만 특정 정보를 직접적으로 요청하고 싶지 않은 경우(예: 알고 있는 이메일 또는 특정 비밀번호), 사용자가 **Drag\&Drop**하여 제어된 데이터를 입력하도록 요청할 수 있습니다. [**이 예제**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/)와 같이요. ### Basic Payload ```css
Click me
``` ### 다단계 페이로드 ```css
Click me first
Click me next
``` ### Drag\&Drop + Click 페이로드 ```css
.
1. Click and press delete button
3.Click me

2.DRAG ME TO THE RED BOX

``` ### XSS + Clickjacking 사용자가 XSS를 **트리거**하기 위해 어떤 요소를 클릭해야 하는 **XSS 공격**을 식별하고 페이지가 **클릭재킹**에 취약하다면, 사용자를 속여 버튼/링크를 클릭하도록 할 수 있습니다.\ 예시:\ 계정의 일부 개인 정보에서 **자기 XSS**를 발견했습니다(정보는 **오직 당신만 설정하고 읽을 수 있는** 정보입니다). 이러한 세부 정보를 설정하는 **양식**이 **클릭재킹**에 **취약**하며 GET 매개변수로 **양식**을 **미리 채울** 수 있습니다.\ 공격자는 해당 페이지에 대한 **클릭재킹** 공격을 준비하여 **XSS 페이로드**로 **양식**을 **미리 채우고** **사용자**를 **제출**하도록 속일 수 있습니다. 따라서 **양식이 제출되고** 값이 수정되면, **사용자는 XSS를 실행하게 됩니다**. ### DoubleClickjacking 먼저 [이 게시물에서 설명됨](https://securityaffairs.com/172572/hacking/doubleclickjacking-clickjacking-on-major-websites.html), 이 기술은 피해자에게 특정 위치에 배치된 사용자 정의 페이지의 버튼을 두 번 클릭하도록 요청하며, 마우스 다운 이벤트와 클릭 이벤트 간의 시간 차이를 이용하여 두 번 클릭하는 동안 피해자 페이지를 로드하여 **피해자가 실제로 피해자 페이지의 정당한 버튼을 클릭하게 만듭니다**. 예시는 이 비디오에서 볼 수 있습니다: [https://www.youtube.com/watch?v=4rGvRRMrD18](https://www.youtube.com/watch?v=4rGvRRMrD18) 코드 예시는 [이 페이지](https://www.paulosyibelo.com/2024/12/doubleclickjacking-what.html)에서 찾을 수 있습니다. > [!WARNING] > 이 기술은 사용자가 클릭재킹에 대한 모든 보호를 우회하여 피해자 페이지의 1곳을 클릭하도록 속일 수 있게 합니다. 따라서 공격자는 **단 1회의 클릭으로 수행할 수 있는 민감한 작업, 예를 들어 OAuth 권한 수락 프롬프트**를 찾아야 합니다. ## Clickjacking 완화 전략 ### 클라이언트 측 방어 클라이언트 측에서 실행되는 스크립트는 클릭재킹을 방지하기 위한 작업을 수행할 수 있습니다: - 애플리케이션 창이 주 창 또는 최상위 창인지 확인합니다. - 모든 프레임을 표시합니다. - 보이지 않는 프레임에서 클릭을 방지합니다. - 잠재적인 클릭재킹 시도에 대해 사용자에게 감지하고 경고합니다. 그러나 이러한 프레임 파괴 스크립트는 우회될 수 있습니다: - **브라우저 보안 설정:** 일부 브라우저는 보안 설정이나 JavaScript 지원 부족에 따라 이러한 스크립트를 차단할 수 있습니다. - **HTML5 iframe `sandbox` 속성:** 공격자는 `allow-top-navigation` 없이 `allow-forms` 또는 `allow-scripts` 값으로 `sandbox` 속성을 설정하여 프레임 파괴 스크립트를 무력화할 수 있습니다. 이는 iframe이 최상위 창인지 확인하는 것을 방지합니다, 예를 들어, ```html ``` `allow-forms` 및 `allow-scripts` 값은 iframe 내에서의 작업을 활성화하면서 최상위 탐색을 비활성화합니다. 공격 유형에 따라 대상 사이트의 의도된 기능을 보장하기 위해 `allow-same-origin` 및 `allow-modals`와 같은 추가 권한이 필요할 수 있습니다. 브라우저 콘솔 메시지는 어떤 권한을 허용해야 하는지 안내할 수 있습니다. ### 서버 측 방어 #### X-Frame-Options **`X-Frame-Options` HTTP 응답 헤더**는 브라우저에 `` 또는 `