mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-24 21:53:54 +00:00
Translated ['pentesting-web/race-condition.md'] to kr
This commit is contained in:
parent
5f0466d7a6
commit
417e94653f
1 changed files with 20 additions and 19 deletions
|
@ -55,9 +55,9 @@ GCP 해킹 배우기 및 연습하기: <img src="../.gitbook/assets/grte.png" al
|
|||
|
||||
PHP의 세션 핸들러와 같은 프레임워크는 세션별로 요청을 직렬화하여 취약점을 숨길 수 있습니다. 각 요청에 대해 다른 세션 토큰을 사용하면 이 문제를 우회할 수 있습니다.
|
||||
|
||||
#### 속도 또는 리소스 한계 극복
|
||||
#### 속도 또는 리소스 제한 극복
|
||||
|
||||
연결 준비가 효과적이지 않은 경우, 더미 요청의 홍수를 통해 웹 서버의 속도 또는 리소스 한계 지연을 의도적으로 유발하여 레이스 조건에 유리한 서버 측 지연을 유도할 수 있습니다.
|
||||
연결 준비가 효과적이지 않은 경우, 더미 요청의 홍수를 통해 웹 서버의 속도 또는 리소스 제한 지연을 의도적으로 유발하여 레이스 조건에 유리한 서버 측 지연을 유도할 수 있습니다.
|
||||
|
||||
## 공격 예시
|
||||
|
||||
|
@ -306,7 +306,7 @@ asyncio.run(main())
|
|||
|
||||
### Limit-overrun / TOCTOU
|
||||
|
||||
이것은 **행동을 수행할 수 있는 횟수를 제한하는** 곳에서 **발생하는 취약점**의 가장 기본적인 유형입니다. 예를 들어, 웹 스토어에서 동일한 할인 코드를 여러 번 사용하는 경우입니다. 매우 쉬운 예는 [**이 보고서**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) 또는 [**이 버그**](https://hackerone.com/reports/759247)**에서 찾을 수 있습니다.**
|
||||
이것은 **행동을 수행할 수 있는 횟수를 제한하는** 곳에서 **발생하는 취약점**의 가장 기본적인 유형입니다. 예를 들어, 웹 상점에서 동일한 할인 코드를 여러 번 사용하는 경우입니다. 매우 쉬운 예는 [**이 보고서**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) 또는 [**이 버그**](https://hackerone.com/reports/759247)**에서 찾을 수 있습니다.**
|
||||
|
||||
이러한 종류의 공격에는 여러 가지 변형이 있습니다:
|
||||
|
||||
|
@ -320,21 +320,21 @@ asyncio.run(main())
|
|||
|
||||
복잡한 레이스 조건을 악용하는 것은 종종 숨겨진 또는 **의도하지 않은 기계 하위 상태**와 상호작용할 수 있는 짧은 기회를 이용하는 것을 포함합니다. 접근 방법은 다음과 같습니다:
|
||||
|
||||
1. **잠재적 숨겨진 하위 상태 식별하기**
|
||||
1. **잠재적 숨겨진 하위 상태 식별**
|
||||
* 사용자 프로필이나 비밀번호 재설정 프로세스와 같은 중요한 데이터를 수정하거나 상호작용하는 엔드포인트를 파악하는 것부터 시작합니다. 다음에 집중하세요:
|
||||
* **저장소**: 클라이언트 측 데이터를 처리하는 것보다 서버 측 지속 데이터를 조작하는 엔드포인트를 선호합니다.
|
||||
* **작업**: 기존 데이터를 변경하는 작업을 찾습니다. 이는 새로운 데이터를 추가하는 것보다 악용 가능한 조건을 생성할 가능성이 더 높습니다.
|
||||
* **키잉**: 성공적인 공격은 일반적으로 동일한 식별자(예: 사용자 이름 또는 재설정 토큰)에 키가 지정된 작업을 포함합니다.
|
||||
2. **초기 탐색 수행하기**
|
||||
* 식별된 엔드포인트에 대해 레이스 조건 공격을 테스트하고 예상 결과에서의 편차를 관찰합니다. 예상치 못한 응답이나 애플리케이션 동작의 변화는 취약점을 신호할 수 있습니다.
|
||||
3. **취약점 입증하기**
|
||||
* 취약점을 악용하는 데 필요한 최소 요청 수로 공격을 좁힙니다. 종종 두 개의 요청만 필요합니다. 이 단계는 정밀한 타이밍이 필요하기 때문에 여러 번의 시도나 자동화가 필요할 수 있습니다.
|
||||
2. **초기 탐색 수행**
|
||||
* 식별된 엔드포인트에 대해 레이스 조건 공격을 테스트하고 예상 결과와의 편차를 관찰합니다. 예상치 못한 응답이나 애플리케이션 동작의 변화는 취약점을 신호할 수 있습니다.
|
||||
3. **취약점 입증**
|
||||
* 취약점을 악용하는 데 필요한 최소한의 요청 수로 공격을 좁힙니다. 종종 두 개의 요청만 필요합니다. 이 단계는 정밀한 타이밍이 필요하기 때문에 여러 번의 시도나 자동화가 필요할 수 있습니다.
|
||||
|
||||
### 시간 민감 공격
|
||||
|
||||
요청의 타이밍을 정밀하게 조정하면 취약점을 드러낼 수 있습니다. 특히 보안 토큰에 타임스탬프와 같은 예측 가능한 방법이 사용될 때 그렇습니다. 예를 들어, 타임스탬프를 기반으로 비밀번호 재설정 토큰을 생성하면 동시에 요청에 대해 동일한 토큰이 허용될 수 있습니다.
|
||||
|
||||
**악용하기 위해:**
|
||||
**악용 방법:**
|
||||
|
||||
* 단일 패킷 공격과 같은 정밀한 타이밍을 사용하여 동시 비밀번호 재설정 요청을 합니다. 동일한 토큰은 취약점을 나타냅니다.
|
||||
|
||||
|
@ -344,15 +344,15 @@ asyncio.run(main())
|
|||
|
||||
**이것을 확인하세요** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) **에서 시도해 보세요.**
|
||||
|
||||
## Hidden substates case studies
|
||||
## Hidden substates 사례 연구
|
||||
|
||||
### Pay & add an Item
|
||||
|
||||
이 [**PortSwigger Lab**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation)를 확인하여 상점에서 **지불**하고 **추가 항목을 추가하는 방법**을 알아보세요. **지불할 필요가 없습니다.**
|
||||
이 [**PortSwigger Lab**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation)를 확인하여 상점에서 **지불**하고 **추가 아이템을 추가하는 방법**을 알아보세요. **지불할 필요가 없습니다.**
|
||||
|
||||
### Confirm other emails
|
||||
|
||||
아이디어는 **이메일 주소를 확인하고 동시에 다른 이메일로 변경하여 플랫폼이 새로 변경된 이메일을 확인하는지 알아보는 것입니다.**
|
||||
아이디어는 **이메일 주소를 확인하고 동시에 다른 이메일로 변경하여 플랫폼이 변경된 새 이메일을 확인하는지 알아보는 것입니다.**
|
||||
|
||||
### Change email to 2 emails addresses Cookie based
|
||||
|
||||
|
@ -364,7 +364,7 @@ asyncio.run(main())
|
|||
|
||||
**데이터베이스**에 **정보를 추가하기 위해 2개의 서로 다른 쓰기**가 사용되면, **첫 번째 데이터만 데이터베이스에 기록된** 짧은 시간이 있습니다. 예를 들어, 사용자를 생성할 때 **사용자 이름**과 **비밀번호**가 **기록되고** **새로 생성된 계정을 확인하기 위한 토큰**이 기록됩니다. 이는 짧은 시간 동안 **계정을 확인하기 위한 토큰이 null**임을 의미합니다.
|
||||
|
||||
따라서 **계정을 등록하고 빈 토큰**(`token=` 또는 `token[]=` 또는 기타 변형)을 사용하여 여러 요청을 보내 즉시 계정을 확인하면 이메일을 제어하지 않는 **계정을 확인할 수 있습니다.**
|
||||
따라서 **계정을 등록하고 빈 토큰**(`token=` 또는 `token[]=` 또는 기타 변형)을 사용하여 즉시 계정을 확인하기 위한 여러 요청을 보내면 이메일을 제어하지 않는 **계정을 확인할 수 있습니다.**
|
||||
|
||||
**이것을 확인하세요** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) **에서 시도해 보세요.**
|
||||
|
||||
|
@ -380,16 +380,16 @@ session['enforce_mfa'] = True
|
|||
```
|
||||
### OAuth2 영구 지속성
|
||||
|
||||
여러 [**OAUth 제공자**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers)가 있습니다. 이러한 서비스는 애플리케이션을 생성하고 제공자가 등록한 사용자를 인증할 수 있도록 합니다. 이를 위해 **클라이언트**는 **귀하의 애플리케이션**이 **OAUth 제공자** 내의 일부 데이터에 접근할 수 있도록 **허용해야** 합니다.\
|
||||
여기까지는 구글/링크드인/깃허브 등에서 "_애플리케이션 \<InsertCoolName>이 귀하의 정보에 접근하고자 합니다. 허용하시겠습니까?_"라는 페이지가 표시되는 일반적인 로그인입니다.
|
||||
여러 [**OAUth 제공자**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers)가 있습니다. 이러한 서비스는 애플리케이션을 생성하고 제공자가 등록한 사용자를 인증할 수 있게 해줍니다. 이를 위해 **클라이언트**는 **귀하의 애플리케이션**이 **OAUth 제공자** 내의 일부 데이터에 접근할 수 있도록 **허용해야** 합니다.\
|
||||
여기까지는 구글/링크드인/깃허브 등으로 로그인하는 일반적인 과정으로, "_애플리케이션 \<InsertCoolName>이 귀하의 정보에 접근하고자 합니다. 허용하시겠습니까?_"라는 페이지가 표시됩니다.
|
||||
|
||||
#### `authorization_code`의 경쟁 조건
|
||||
|
||||
**문제**는 사용자가 **허용**할 때 발생하며, 악의적인 애플리케이션에 **`authorization_code`**가 자동으로 전송됩니다. 그런 다음 이 **애플리케이션은 OAUth 서비스 제공자의 경쟁 조건을 악용하여 귀하의 계정에 대해 **`authorization_code`**로부터 여러 개의 AT/RT** (_인증 토큰/리프레시 토큰_)를 생성합니다. 기본적으로, 애플리케이션이 귀하의 데이터에 접근하도록 허용한 사실을 악용하여 **여러 계정을 생성**합니다. 그런 다음, 애플리케이션이 귀하의 데이터에 접근하는 것을 **중지하면 AT/RT 쌍 중 하나는 삭제되지만, 나머지는 여전히 유효합니다**.
|
||||
**문제**는 귀하가 **허용**할 때 발생하며, 악의적인 애플리케이션에 **`authorization_code`**가 자동으로 전송됩니다. 그런 다음 이 **애플리케이션은 OAUth 서비스 제공자의 경쟁 조건을 악용하여 귀하의 계정에 대해 **`authorization_code`**로부터 여러 개의 AT/RT** (_인증 토큰/리프레시 토큰_)를 생성합니다. 기본적으로, 애플리케이션이 귀하의 데이터에 접근하도록 허용한 사실을 악용하여 **여러 계정을 생성**합니다. 그런 다음, 귀하가 **애플리케이션이 귀하의 데이터에 접근하는 것을 중지하면 한 쌍의 AT/RT가 삭제되지만, 다른 것들은 여전히 유효합니다**.
|
||||
|
||||
#### `Refresh Token`의 경쟁 조건
|
||||
|
||||
**유효한 RT를 얻은 후** 여러 개의 AT/RT를 생성하기 위해 **악용할 수 있으며**, **사용자가 악의적인 애플리케이션이 자신의 데이터에 접근하는 권한을 취소하더라도, 여러 RT는 여전히 유효합니다.**
|
||||
**유효한 RT**를 **얻은 후**, 여러 개의 AT/RT를 생성하기 위해 **악용**할 수 있으며, **사용자가 악의적인 애플리케이션이 자신의 데이터에 접근하는 권한을 취소하더라도, 여러 RT는 여전히 유효합니다.**
|
||||
|
||||
## **웹소켓의 RC**
|
||||
|
||||
|
@ -402,6 +402,7 @@ session['enforce_mfa'] = True
|
|||
* [https://hackerone.com/reports/55140](https://hackerone.com/reports/55140)
|
||||
* [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
|
||||
* [https://portswigger.net/web-security/race-conditions](https://portswigger.net/web-security/race-conditions)
|
||||
* [https://flatt.tech/research/posts/beyond-the-limit-expanding-single-packet-race-condition-with-first-sequence-sync/](https://flatt.tech/research/posts/beyond-the-limit-expanding-single-packet-race-condition-with-first-sequence-sync/)
|
||||
|
||||
{% hint style="success" %}
|
||||
AWS 해킹 배우기 및 연습하기:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
|
@ -412,7 +413,7 @@ GCP 해킹 배우기 및 연습하기: <img src="../.gitbook/assets/grte.png" al
|
|||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나, **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나, **Twitter**에서 **팔로우**하세요** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||
|
||||
</details>
|
||||
|
@ -422,6 +423,6 @@ GCP 해킹 배우기 및 연습하기: <img src="../.gitbook/assets/grte.png" al
|
|||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=race-condition)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
|
||||
지금 액세스하세요:
|
||||
오늘 바로 접근하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=race-condition" %}
|
||||
|
|
Loading…
Reference in a new issue