diff --git a/mobile-pentesting/android-app-pentesting/apk-decompilers.md b/mobile-pentesting/android-app-pentesting/apk-decompilers.md index eea6b9670..858fe8b32 100644 --- a/mobile-pentesting/android-app-pentesting/apk-decompilers.md +++ b/mobile-pentesting/android-app-pentesting/apk-decompilers.md @@ -1,8 +1,8 @@ # APK 디컴파일러 {% hint style="success" %} -AWS 해킹 배우기 및 연습하기:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -GCP 해킹 배우기 및 연습하기: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +AWS 해킹 배우기 및 연습하기:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP 해킹 배우기 및 연습하기: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -14,9 +14,8 @@ GCP 해킹 배우기 및 연습하기: </details {% endhint %} -{% endhint %} -**각 도구에 대한 자세한 내용은 [https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr](https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr)에서 원본 게시물을 확인하세요.** +**각 도구에 대한 자세한 내용은** [**https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr**](https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr) **원본 게시물을 확인하세요.** ### [JD-Gui](https://github.com/java-decompiler/jd-gui) @@ -26,9 +25,9 @@ GCP 해킹 배우기 및 연습하기: **Jadx**는 --no-res --no-src --no-imports` +* GUI를 실행하려면 bin 디렉토리로 이동하여 다음을 실행합니다: `jadx-gui` +* 명령줄 사용을 위해 APK를 디컴파일하려면: `jadx app.apk` +* 출력 디렉토리를 지정하거나 디컴파일 옵션을 조정하려면: `jadx app.apk -d <출력 디렉토리 경로> --no-res --no-src --no-imports` ### [GDA-android-reversing-Tool](https://github.com/charles2gan/GDA-android-reversing-Tool) @@ -40,39 +39,42 @@ GCP 해킹 배우기 및 연습하기: ###[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -GCP 해킹 배우기 및 연습하기: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +AWS 해킹 배우기 및 연습하기:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP 해킹 배우기 및 연습하기: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -84,5 +86,3 @@ GCP 해킹 배우기 및 연습하기: </details {% endhint %} -
-{% endhint %} diff --git a/mobile-pentesting/ios-pentesting/ios-testing-environment.md b/mobile-pentesting/ios-pentesting/ios-testing-environment.md index 1a7f8e33e..222802ae4 100644 --- a/mobile-pentesting/ios-pentesting/ios-testing-environment.md +++ b/mobile-pentesting/ios-pentesting/ios-testing-environment.md @@ -1,8 +1,8 @@ # iOS Testing Environment {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -14,14 +14,13 @@ Learn & practice GCP Hacking: {% endhint %} -{% endhint %} ## Apple Developer Program -**프로비저닝 아이덴티티**는 Apple 개발자 계정과 연결된 공개 및 개인 키의 모음입니다. **앱 서명**을 하려면 **99$/년**을 지불하고 **Apple Developer Program**에 등록하여 프로비저닝 아이덴티티를 받아야 합니다. 이를 하지 않으면 물리적 장치에서 소스 코드로부터 애플리케이션을 실행할 수 없습니다. 이를 수행하는 또 다른 방법은 **탈옥된 장치**를 사용하는 것입니다. +**프로비저닝 아이덴티티**는 Apple 개발자 계정과 연결된 공개 및 개인 키의 모음입니다. **앱 서명**을 하려면 **99$/년**을 지불하고 **Apple Developer Program**에 등록하여 프로비저닝 아이덴티티를 받아야 합니다. 이를 통해 소스 코드에서 실제 장치에서 애플리케이션을 실행할 수 있습니다. 또 다른 방법은 **탈옥된 장치**를 사용하는 것입니다. Xcode 7.2부터 Apple은 실제 iPhone에서 애플리케이션을 작성하고 테스트할 수 있는 **무료 iOS 개발 프로비저닝 프로필**을 생성할 수 있는 옵션을 제공했습니다. _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (자격 증명으로 새 Appli ID 추가) --> _생성된 Apple ID 클릭_ --> _Manage Certificates_ --> _+_ (Apple Development) --> _Done_\ -\_\_그런 다음, iPhone에서 애플리케이션을 실행하려면 먼저 **iPhone이 컴퓨터를 신뢰하도록 지정해야 합니다.** 그런 다음, **Xcode에서 모바일에서 애플리케이션을 실행해 보려고 하면** 오류가 발생합니다. 따라서 _Settings_ --> _General_ --> _Profiles and Device Management_ --> 신뢰할 수 없는 프로필을 선택하고 "**Trust**"를 클릭합니다. +\_\_그런 다음 iPhone에서 애플리케이션을 실행하려면 먼저 **iPhone이 컴퓨터를 신뢰하도록 지정해야 합니다.** 그런 다음 **Xcode에서 모바일에서 애플리케이션을 실행해 보지만 오류가 발생할 것입니다.** 그러므로 _Settings_ --> _General_ --> _Profiles and Device Management_ --> 신뢰할 수 없는 프로필을 선택하고 "**Trust**"를 클릭합니다. **같은 서명 인증서로 서명된 애플리케이션은 키체인 항목과 같은 리소스를 안전하게 공유할 수 있습니다.** @@ -52,7 +51,7 @@ Apple의 사실상 도구는 iOS 애플리케이션을 생성/디버깅/계측 ### Applications in the Simulator -`/Users//Library/Developer/CoreSimulator/Devices` 내부에서 **설치된 시뮬레이터**를 모두 찾을 수 있습니다. 에뮬레이터 중 하나에서 생성된 애플리케이션의 파일에 접근하려면 **어느 에뮬레이터에 앱이 설치되었는지 아는 것이 어려울 수 있습니다.** 올바른 UID를 **찾는 빠른 방법**은 시뮬레이터에서 앱을 실행하고 다음을 실행하는 것입니다: +`/Users//Library/Developer/CoreSimulator/Devices` 내부에서 **설치된 시뮬레이터**를 모두 찾을 수 있습니다. 에뮬레이터 중 하나에서 생성된 애플리케이션의 파일에 접근하려면 **어느 것에 앱이 설치되었는지 아는 것이 어려울 수 있습니다.** 올바른 UID를 **찾는 빠른 방법**은 시뮬레이터에서 앱을 실행하고 다음을 실행하는 것입니다: ```bash xcrun simctl list | grep Booted iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted) @@ -67,46 +66,50 @@ Once you know the UID the apps installed within it can be found in `/Users/[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -150,5 +154,3 @@ Learn & practice GCP Hacking: {% endhint %} -
-{% endhint %} diff --git a/network-services-pentesting/pentesting-web/web-api-pentesting.md b/network-services-pentesting/pentesting-web/web-api-pentesting.md index cd696a65b..638866939 100644 --- a/network-services-pentesting/pentesting-web/web-api-pentesting.md +++ b/network-services-pentesting/pentesting-web/web-api-pentesting.md @@ -1,8 +1,8 @@ # Web API Pentesting {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -41,12 +41,12 @@ Pentesting APIs involves a structured approach to uncovering vulnerabilities. Th * **SOAP/XML Vulnerabilities**: XXE 취약점을 탐색하되, DTD 선언은 종종 제한됩니다. XML이 유효한 경우 CDATA 태그를 통해 페이로드 삽입이 가능할 수 있습니다. * **Privilege Escalation**: 다양한 권한 수준으로 엔드포인트를 테스트하여 무단 접근 가능성을 식별합니다. * **CORS Misconfigurations**: 인증된 세션에서 CSRF 공격을 통해 잠재적인 악용 가능성을 조사합니다. -* **Endpoint Discovery**: API 패턴을 활용하여 숨겨진 엔드포인트를 발견합니다. 퍼저와 같은 도구는 이 과정을 자동화할 수 있습니다. +* **Endpoint Discovery**: API 패턴을 활용하여 숨겨진 엔드포인트를 발견합니다. 퍼저와 같은 도구는 이 프로세스를 자동화할 수 있습니다. * **Parameter Tampering**: 요청에서 매개변수를 추가하거나 교체하여 무단 데이터 또는 기능에 접근을 시도합니다. * **HTTP Method Testing**: 요청 방법(GET, POST, PUT, DELETE, PATCH)을 변경하여 예상치 못한 동작이나 정보 유출을 발견합니다. * **Content-Type Manipulation**: 서로 다른 콘텐츠 유형(x-www-form-urlencoded, application/xml, application/json) 간에 전환하여 파싱 문제나 취약점을 테스트합니다. * **Advanced Parameter Techniques**: JSON 페이로드에서 예상치 못한 데이터 유형으로 테스트하거나 XML 데이터로 XXE 주입을 시도합니다. 또한, 매개변수 오염 및 와일드카드 문자를 사용하여 더 넓은 테스트를 시도합니다. -* **Version Testing**: 이전 API 버전은 공격에 더 취약할 수 있습니다. 항상 여러 API 버전을 확인하고 테스트합니다. +* **Version Testing**: 이전 API 버전은 공격에 더 취약할 수 있습니다. 항상 여러 API 버전에 대해 확인하고 테스트합니다. ### **Tools and Resources for API Pentesting** @@ -57,38 +57,39 @@ kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20 kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0 kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0 ``` -* **automatic-api-attack-tool**, **Astra**, 및 **restler-fuzzer**와 같은 추가 도구는 공격 시뮬레이션에서 퍼징 및 취약점 스캐닝에 이르기까지 API 보안 테스트를 위한 맞춤형 기능을 제공합니다. +* [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj는 약한 인증을 확인하기 위해 관련 API 엔드포인트를 검사하여 **노출된 Swagger/OpenAPI 정의 파일**의 감사를 지원하도록 설계된 명령줄 도구입니다. 또한 수동 취약성 테스트를 위한 명령 템플릿을 제공합니다. +* **automatic-api-attack-tool**, **Astra**, **restler-fuzzer**와 같은 추가 도구는 공격 시뮬레이션에서 퍼징 및 취약성 스캐닝에 이르기까지 API 보안 테스트를 위한 맞춤형 기능을 제공합니다. * [**Cherrybomb**](https://github.com/blst-security/cherrybomb): OAS 파일을 기반으로 API를 감사하는 API 보안 도구입니다(이 도구는 Rust로 작성됨). ### **학습 및 연습 자료** -* **OWASP API Security Top 10**: 일반적인 API 취약점을 이해하기 위한 필수 읽기 자료 ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)). -* **API Security Checklist**: API 보안을 위한 포괄적인 체크리스트 ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)). -* **Logger++ Filters**: API 취약점을 탐색하기 위해 Logger++는 유용한 필터를 제공합니다 ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)). -* **API Endpoints List**: 테스트 목적으로 잠재적인 API 엔드포인트의 선별된 목록 ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)). +* **OWASP API 보안 Top 10**: 일반적인 API 취약성을 이해하기 위한 필수 읽기 ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)). +* **API 보안 체크리스트**: API 보안을 위한 포괄적인 체크리스트 ([GitHub 링크](https://github.com/shieldfy/API-Security-Checklist)). +* **Logger++ 필터**: API 취약성을 탐지하기 위해 Logger++는 유용한 필터를 제공합니다 ([GitHub 링크](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)). +* **API 엔드포인트 목록**: 테스트 목적으로 사용할 수 있는 잠재적인 API 엔드포인트의 선별된 목록 ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)). -## References +## 참고 문헌 * [https://github.com/Cyber-Guy1/API-SecurityEmpire](https://github.com/Cyber-Guy1/API-SecurityEmpire)
[**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\ -오늘 액세스하세요: +오늘 바로 액세스하세요: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=web-api-pentesting" %} {% hint style="success" %} -AWS 해킹 학습 및 연습:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -GCP 해킹 학습 및 연습: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +AWS 해킹 학습 및 연습:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP 해킹 학습 및 연습: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
HackTricks 지원하기 -* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기! -* **💬 [**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) GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.** +* [**구독 계획**](https://github.com/sponsors/carlospolop)을 확인하세요! +* 💬 [**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) GitHub 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
{% endhint %} diff --git a/pentesting-web/cors-bypass.md b/pentesting-web/cors-bypass.md index 7ad513815..eaad70b8c 100644 --- a/pentesting-web/cors-bypass.md +++ b/pentesting-web/cors-bypass.md @@ -1,8 +1,8 @@ # CORS - 잘못된 구성 및 우회 {% hint style="success" %} -AWS 해킹 배우기 및 연습하기:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -GCP 해킹 배우기 및 연습하기: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +AWS 해킹 배우기 및 연습하기:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP 해킹 배우기 및 연습하기: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -23,11 +23,11 @@ GCP 해킹 배우기 및 연습하기: 교차Arun'); 특정 조건에서 교차 도메인 요청을 시작할 때, 예를 들어 **비표준 HTTP 메서드**(HEAD, GET, POST 이외의 모든 것)를 사용하거나 새로운 **헤더**를 도입하거나 특별한 **Content-Type 헤더 값**을 사용하는 경우, 사전 요청이 필요할 수 있습니다. 이 초기 요청은 **`OPTIONS`** 메서드를 활용하여 서버에 다가오는 교차 출처 요청의 의도를 알리며, 사용하려는 HTTP 메서드와 헤더를 포함합니다. -**교차 출처 리소스 공유 (CORS)** 프로토콜은 요청된 교차 출처 작업의 가능성을 결정하기 위해 허용된 메서드, 헤더 및 출처의 신뢰성을 검증하는 이 사전 요청 검사를 의무화합니다. 사전 요청이 필요하지 않은 조건에 대한 자세한 이해는 [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests)에서 제공하는 포괄적인 가이드를 참조하십시오. +**교차 출처 리소스 공유 (CORS)** 프로토콜은 요청된 교차 출처 작업의 가능성을 확인하기 위해 허용된 메서드, 헤더 및 출처의 신뢰성을 검증하는 이 사전 요청 검사를 의무화합니다. 사전 요청이 필요하지 않은 조건에 대한 자세한 이해는 [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests)에서 제공하는 포괄적인 가이드를 참조하십시오. -사전 요청이 없다고 해서 응답에 권한 부여 헤더가 포함되어야 하는 요구 사항이 사라지는 것은 아니라는 점에 유의해야 합니다. 이러한 헤더가 없으면 브라우저는 교차 출처 요청의 응답을 처리할 수 없습니다. +**사전 요청이 없다고 해서 응답이 권한 부여 헤더를 포함해야 하는 요구 사항이 사라지는 것은 아닙니다**. 이러한 헤더가 없으면 브라우저는 교차 출처 요청의 응답을 처리할 수 없습니다. 다음은 `PUT` 메서드와 `Special-Request-Header`라는 사용자 정의 헤더를 사용하기 위한 사전 요청의 예시입니다: ``` @@ -94,7 +94,7 @@ Origin: https://example.com Access-Control-Request-Method: POST Access-Control-Request-Headers: Authorization ``` -서버는 수용된 메서드, 허용된 출처 및 기타 CORS 정책 세부 정보를 나타내는 헤더를 반환할 수 있습니다. 아래와 같이: +서버는 수용된 메서드, 허용된 출처 및 기타 CORS 정책 세부정보를 나타내는 헤더를 반환할 수 있습니다. 아래와 같이: ```markdown HTTP/1.1 204 No Content ... @@ -105,21 +105,21 @@ Access-Control-Allow-Credentials: true Access-Control-Max-Age: 240 ``` * **`Access-Control-Allow-Headers`**: 이 헤더는 실제 요청 중에 사용할 수 있는 헤더를 지정합니다. 클라이언트의 요청에서 허용된 헤더를 나타내기 위해 서버에 의해 설정됩니다. -* **`Access-Control-Expose-Headers`**: 이 헤더를 통해 서버는 간단한 응답 헤더 외에 응답의 일부로 노출될 수 있는 헤더에 대해 클라이언트에 알립니다. +* **`Access-Control-Expose-Headers`**: 이 헤더를 통해 서버는 클라이언트에게 간단한 응답 헤더 외에 응답의 일부로 노출될 수 있는 헤더에 대해 알립니다. * **`Access-Control-Max-Age`**: 이 헤더는 사전 요청의 결과를 얼마나 오랫동안 캐시할 수 있는지를 나타냅니다. 서버는 사전 요청에 의해 반환된 정보가 재사용될 수 있는 최대 시간을 초 단위로 설정합니다. -* **`Access-Control-Request-Headers`**: 사전 요청에서 사용되며, 이 헤더는 클라이언트가 실제 요청에서 사용하고자 하는 HTTP 헤더에 대해 서버에 알리기 위해 설정됩니다. -* **`Access-Control-Request-Method`**: 이 헤더는 사전 요청에서도 사용되며, 클라이언트가 실제 요청에서 사용할 HTTP 메서드를 나타내기 위해 설정됩니다. +* **`Access-Control-Request-Headers`**: 사전 요청에서 사용되며, 이 헤더는 클라이언트가 실제 요청에서 사용하고자 하는 HTTP 헤더에 대해 서버에 알리기 위해 클라이언트에 의해 설정됩니다. +* **`Access-Control-Request-Method`**: 이 헤더는 사전 요청에서도 사용되며, 클라이언트가 실제 요청에서 사용할 HTTP 메서드를 나타내기 위해 클라이언트에 의해 설정됩니다. * **`Origin`**: 이 헤더는 브라우저에 의해 자동으로 설정되며, 교차 출처 요청의 출처를 나타냅니다. 서버는 CORS 정책에 따라 수신 요청을 허용할지 거부할지를 평가하는 데 사용합니다. -일반적으로 (콘텐츠 유형 및 설정된 헤더에 따라) **GET/POST 요청에서는 사전 요청이 전송되지 않습니다** (요청이 **직접** 전송됨), 그러나 **응답의 헤더/본문에 접근하려면** _Access-Control-Allow-Origin_ 헤더가 이를 허용해야 합니다.\ -**따라서, CORS는 CSRF로부터 보호하지 않지만 도움이 될 수 있습니다.** +일반적으로 (콘텐츠 유형 및 설정된 헤더에 따라) **GET/POST 요청에서는 사전 요청이 전송되지 않습니다** (요청이 **직접** 전송됨), 그러나 **응답의 헤더/본문에 접근**하려면 _Access-Control-Allow-Origin_ 헤더가 이를 허용해야 합니다.\ +**따라서, CORS는 CSRF로부터 보호하지 않습니다 (하지만 도움이 될 수 있습니다).** ### **로컬 네트워크 요청 사전 요청** 1. **`Access-Control-Request-Local-Network`**: 이 헤더는 클라이언트의 요청에 포함되어 문의가 로컬 네트워크 리소스를 목표로 하고 있음을 나타냅니다. 이는 요청이 로컬 네트워크 내에서 발생했음을 서버에 알리는 표시 역할을 합니다. 2. **`Access-Control-Allow-Local-Network`**: 응답으로 서버는 이 헤더를 사용하여 요청된 리소스가 로컬 네트워크 외부의 엔티티와 공유될 수 있음을 전달합니다. 이는 서로 다른 네트워크 경계를 넘어 리소스를 공유할 수 있도록 허용하는 신호 역할을 하며, 보안 프로토콜을 유지하면서 통제된 접근을 보장합니다. -**로컬 네트워크 요청을 허용하는 유효한 응답**은 응답에 `Access-Controls-Allow-Local_network: true` 헤더도 포함되어야 합니다. +로컬 네트워크 요청을 허용하는 **유효한 응답**은 응답에 `Access-Controls-Allow-Local_network: true` 헤더도 포함되어야 합니다. ``` HTTP/1.1 200 OK ... @@ -133,20 +133,29 @@ Content-Length: 0 {% hint style="warning" %} 리눅스 **0.0.0.0** IP는 해당 IP 주소가 "로컬"로 간주되지 않기 때문에 localhost에 접근하기 위한 이러한 요구 사항을 **우회**하는 데 작동합니다. -로컬 엔드포인트의 **공용 IP 주소**(예: 라우터의 공용 IP)를 사용하면 **로컬 네트워크 요구 사항을 우회**할 수도 있습니다. 여러 경우에 **공용 IP**에 접근하더라도 **로컬 네트워크**에서 접근하는 경우 접근이 허용됩니다. +로컬 엔드포인트의 **공용 IP 주소**(예: 라우터의 공용 IP)를 사용하면 **로컬 네트워크 요구 사항을 우회**하는 것도 가능합니다. 여러 경우에, **공용 IP**에 접근하더라도, **로컬 네트워크**에서 접근하는 경우에는 접근이 허용됩니다. {% endhint %} -## 악용 가능한 잘못된 구성 +### 와일드카드 -`Access-Control-Allow-Credentials`를 **`true`**로 설정하는 것이 대부분의 **실제 공격**의 전제 조건이라는 것이 관찰되었습니다. 이 설정은 브라우저가 자격 증명을 전송하고 응답을 읽을 수 있도록 허용하여 공격의 효과를 높입니다. 이 설정이 없으면 브라우저가 요청을 발행하는 것의 이점이 줄어들며, 사용자의 쿠키를 활용하는 것이 불가능해집니다. +다음 구성은 매우 허용적인 것처럼 보일 수 있습니다: +```bash +Access-Control-Allow-Origin: * +Access-Control-Allow-Credentials: true +``` +This is not allowed by browsers and therefore credentials won't be sent with the request allowed by this. -### 예외: 네트워크 위치를 인증으로 악용하기 +## Exploitable misconfigurations -피해자의 네트워크 위치가 인증의 한 형태로 작용하는 예외가 존재합니다. 이는 피해자의 브라우저를 프록시로 사용하여 IP 기반 인증을 우회하여 인트라넷 애플리케이션에 접근할 수 있게 합니다. 이 방법은 DNS 리바인딩과 유사한 영향을 미치지만, 악용하기가 더 간단합니다. +`Access-Control-Allow-Credentials`를 **`true`**로 설정하는 것은 대부분의 **실제 공격**에 대한 전제 조건으로 관찰되었습니다. 이 설정은 브라우저가 자격 증명을 전송하고 응답을 읽을 수 있도록 허용하여 공격의 효과를 높입니다. 이를 통해 사용자의 쿠키를 활용하는 것이 불가능해지므로, 브라우저가 요청을 발행하는 것의 이점이 줄어듭니다. -### `Access-Control-Allow-Origin`에서 `Origin`의 반영 +### Exception: Exploiting Network Location as Authentication -`Origin` 헤더의 값이 `Access-Control-Allow-Origin`에 반영되는 실제 시나리오는 이러한 헤더를 결합하는 데 제한이 있기 때문에 이론적으로 불가능합니다. 그러나 여러 URL에 대해 CORS를 활성화하려는 개발자는 `Origin` 헤더의 값을 복사하여 `Access-Control-Allow-Origin` 헤더를 동적으로 생성할 수 있습니다. 이 접근 방식은 공격자가 합법적으로 보이도록 설계된 이름의 도메인을 사용할 경우, 검증 로직을 속여 취약점을 초래할 수 있습니다. +희생자의 네트워크 위치가 인증의 한 형태로 작용하는 예외가 존재합니다. 이는 희생자의 브라우저를 프록시로 사용하여 IP 기반 인증을 우회하고 인트라넷 애플리케이션에 접근할 수 있게 합니다. 이 방법은 DNS 리바인딩과 유사한 영향을 미치지만, 더 간단하게 악용할 수 있습니다. + +### Reflection of `Origin` in `Access-Control-Allow-Origin` + +`Origin` 헤더의 값이 `Access-Control-Allow-Origin`에 반영되는 실제 시나리오는 이러한 헤더를 결합하는 것에 대한 제한으로 인해 이론적으로 불가능합니다. 그러나 여러 URL에 대해 CORS를 활성화하려는 개발자는 `Origin` 헤더의 값을 복사하여 `Access-Control-Allow-Origin` 헤더를 동적으로 생성할 수 있습니다. 이 접근 방식은 공격자가 합법적으로 보이도록 설계된 이름의 도메인을 사용할 때 특히 취약점을 도입할 수 있습니다. ```html

test

``` -### CSRF - 상태 매개변수의 부적절한 처리 +### CSRF - Improper handling of state parameter OAuth 구현에서 **`state` 매개변수**의 오용 또는 누락은 **교차 사이트 요청 위조(CSRF)** 공격의 위험을 크게 증가시킬 수 있습니다. 이 취약점은 `state` 매개변수가 **사용되지 않거나, 정적 값으로 사용되거나, 제대로 검증되지 않을 때** 발생하여 공격자가 CSRF 보호를 우회할 수 있게 합니다. @@ -97,21 +97,21 @@ OAuth 구현에서 **`state` 매개변수**의 오용 또는 누락은 **교차 **`state` 매개변수**의 적절한 처리 및 검증은 CSRF로부터 보호하고 OAuth 흐름을 안전하게 유지하는 데 중요합니다. -### 계정 탈취 전 +### Pre Account Takeover -1. **계정 생성 시 이메일 검증 없이**: 공격자는 피해자의 이메일을 사용하여 미리 계정을 생성할 수 있습니다. 피해자가 나중에 로그인 시 제3자 서비스를 사용하면, 애플리케이션이 이 제3자 계정을 공격자가 미리 생성한 계정에 우연히 연결할 수 있어 무단 접근이 발생할 수 있습니다. +1. **계정 생성 시 이메일 검증 없이**: 공격자는 피해자의 이메일을 사용하여 미리 계정을 생성할 수 있습니다. 피해자가 나중에 제3자 서비스를 사용하여 로그인하면, 애플리케이션이 이 제3자 계정을 공격자가 미리 생성한 계정에 우연히 연결할 수 있어 무단 접근이 발생할 수 있습니다. 2. **느슨한 OAuth 이메일 검증 악용**: 공격자는 이메일을 검증하지 않는 OAuth 서비스를 악용하여 자신의 서비스에 등록한 후 계정 이메일을 피해자의 이메일로 변경할 수 있습니다. 이 방법은 첫 번째 시나리오와 유사하게 무단 계정 접근의 위험을 초래하지만, 다른 공격 벡터를 통해 이루어집니다. -### 비밀 정보의 노출 +### Disclosure of Secrets 비밀 OAuth 매개변수를 식별하고 보호하는 것은 중요합니다. **`client_id`**는 안전하게 공개할 수 있지만, **`client_secret`**을 노출하는 것은 상당한 위험을 초래합니다. `client_secret`이 유출되면 공격자는 애플리케이션의 신원과 신뢰를 악용하여 **사용자 `access_tokens`** 및 개인 정보를 **탈취**할 수 있습니다. -일반적인 취약점은 애플리케이션이 권한 부여 `code`를 `access_token`으로 교환하는 과정을 클라이언트 측에서 잘못 처리할 때 발생합니다. 이 실수는 `client_secret`의 노출로 이어져, 공격자가 애플리케이션의 가장으로 `access_tokens`를 생성할 수 있게 합니다. 또한, 사회 공학을 통해 공격자는 OAuth 권한 부여에 추가 범위를 추가하여 권한을 상승시킬 수 있으며, 애플리케이션의 신뢰된 상태를 더욱 악용할 수 있습니다. +일반적인 취약점은 애플리케이션이 권한 부여 `code`를 `access_token`으로 교환하는 과정을 클라이언트 측에서 처리하는 실수로 발생합니다. 이 실수는 `client_secret`의 노출로 이어져, 공격자가 애플리케이션의 가장으로 `access_tokens`를 생성할 수 있게 합니다. 또한, 사회 공학을 통해 공격자는 OAuth 권한 부여에 추가 범위를 추가하여 권한을 상승시킬 수 있으며, 애플리케이션의 신뢰된 상태를 더욱 악용할 수 있습니다. -### 클라이언트 비밀 무차별 대입 +### Client Secret Bruteforce -서비스 제공자의 클라이언트 비밀을 **무차별 대입**하여 계정을 탈취하려고 시도할 수 있습니다.\ -무차별 대입 요청은 다음과 유사할 수 있습니다: +You can try to **bruteforce the client\_secret** of a service provider with the identity provider in order to be try to steal accounts.\ +The request to BF may look similar to: ``` POST /token HTTP/1.1 content-type: application/x-www-form-urlencoded @@ -123,19 +123,19 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au ``` ### Referer Header leaking Code + State -클라이언트가 **코드와 상태**를 가지고 있을 때, 만약 그것이 **Referer 헤더에 반영되어** 다른 페이지로 이동할 때 노출된다면, 취약합니다. +클라이언트가 **코드와 상태**를 가지고 있을 때, 다른 페이지로 이동할 때 **Referer 헤더에 반영된다면** 취약합니다. ### Access Token Stored in Browser History -**브라우저 기록으로 가서 액세스 토큰이 저장되어 있는지 확인하세요.** +**브라우저 기록으로 가서 액세스 토큰이 저장되어 있는지 확인하세요**. ### Everlasting Authorization Code -**인증 코드는 공격자가 훔치고 사용할 수 있는 시간 창을 제한하기 위해 일정 시간만 존재해야 합니다.** +**인증 코드는 공격자가 훔치고 사용할 수 있는 시간 창을 제한하기 위해 잠시만 존재해야 합니다**. ### Authorization/Refresh Token not bound to client -**인증 코드를 얻고 다른 클라이언트와 함께 사용할 수 있다면 다른 계정을 탈취할 수 있습니다.** +**인증 코드를 얻고 다른 클라이언트와 함께 사용할 수 있다면 다른 계정을 탈취할 수 있습니다**. ### Happy Paths, XSS, Iframes & Post Messages to leak code & state values @@ -143,7 +143,7 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au ### AWS Cognito -이 버그 바운티 보고서에서: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) **AWS Cognito**가 사용자에게 반환하는 **토큰**이 **사용자 데이터를 덮어쓸 수 있는 충분한 권한을 가질 수 있습니다.** 따라서, **다른 사용자 이메일로 사용자 이메일을 변경할 수 있다면**, 다른 계정을 **탈취할 수 있을지도 모릅니다.** +이 버그 바운티 보고서에서: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) **AWS Cognito**가 사용자에게 반환하는 **토큰**이 **사용자 데이터를 덮어쓸 수 있는 충분한 권한을 가질 수 있습니다**. 따라서, **다른 사용자 이메일로 사용자 이메일을 변경할 수 있다면**, 다른 계정을 **탈취할 수 있을지도 모릅니다**. ```bash # Read info of the user aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...] @@ -168,7 +168,7 @@ For more detailed info about how to abuse AWS cognito check: [**이 글에서 언급된 바와 같이**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), **토큰**(코드가 아닌)을 수신할 것으로 예상되는 OAuth 흐름은 토큰이 앱에 속하는지 확인하지 않으면 취약할 수 있습니다. -이는 **공격자**가 자신의 애플리케이션에서 **OAuth를 지원하고 Facebook으로 로그인**하는 **애플리케이션**을 만들 수 있기 때문입니다. 그런 다음, 피해자가 **공격자의 애플리케이션**에서 Facebook으로 로그인하면, 공격자는 **자신의 애플리케이션에 제공된 사용자의 OAuth 토큰을 얻고, 이를 사용하여 피해자의 OAuth 애플리케이션에 피해자의 사용자 토큰으로 로그인할 수 있습니다**. +이는 **공격자**가 자신의 애플리케이션에서 **OAuth를 지원하고 Facebook으로 로그인**하는 **애플리케이션**을 만들 수 있기 때문입니다. 그런 다음, 피해자가 **공격자의 애플리케이션**에서 Facebook으로 로그인하면, 공격자는 **자신의 애플리케이션에 제공된 사용자의 OAuth 토큰을 얻고 이를 사용하여 피해자의 OAuth 애플리케이션에 피해자의 사용자 토큰으로 로그인할 수 있습니다**. {% hint style="danger" %} 따라서 공격자가 사용자가 자신의 OAuth 애플리케이션에 접근하도록 관리하면, 토큰을 기대하고 해당 토큰이 자신의 앱 ID에 부여되었는지 확인하지 않는 애플리케이션에서 피해자의 계정을 탈취할 수 있습니다. @@ -182,7 +182,7 @@ For more detailed info about how to abuse AWS cognito check: ### Prompt Interaction Bypass -[**이 비디오에서 설명된 바와 같이**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), 일부 OAuth 구현에서는 **`prompt`** GET 매개변수를 None (**`&prompt=none`**)으로 지정하여 사용자가 이미 플랫폼에 로그인한 경우 웹에서 주어진 접근을 확인하라는 요청을 방지할 수 있습니다. +[**이 비디오에서 설명된 바와 같이**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), 일부 OAuth 구현에서는 **`prompt`** GET 매개변수를 None(**`&prompt=none`**)으로 지정하여 사용자가 이미 플랫폼에 로그인한 경우 웹에서 주어진 접근을 확인하라는 요청을 방지할 수 있습니다. ### response\_mode @@ -193,6 +193,10 @@ For more detailed info about how to abuse AWS cognito check: * `response_mode=form_post` -> 코드는 `code`라는 입력을 가진 POST 양식 내에 제공됩니다. * `response_mode=web_message` -> 코드는 포스트 메시지로 전송됩니다: `window.opener.postMessage({"code": "asdasdasd...` +### OAuth ROPC flow - 2 FA bypass + +[**이 블로그 게시물에 따르면**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), 이는 **사용자 이름**과 **비밀번호**를 통해 OAuth에 로그인할 수 있는 OAuth 흐름입니다. 이 간단한 흐름에서 모든 작업에 대한 접근 권한이 있는 **토큰**이 반환되면, 해당 토큰을 사용하여 2FA를 우회할 수 있습니다. + ### SSRFs parameters [**이 연구를 확인하세요**](https://portswigger.net/research/hidden-oauth-attack-vectors) **이 기술에 대한 추가 세부정보를 위해.** @@ -203,20 +207,20 @@ OAuth의 동적 클라이언트 등록은 보안 취약점에 대한 덜 명백 * **동적 클라이언트 등록**은 종종 `/register`에 매핑되며 `client_name`, `client_secret`, `redirect_uris`, 로고 또는 JSON 웹 키 세트(JWKs)에 대한 URL과 같은 세부정보를 POST 요청을 통해 수락합니다. * 이 기능은 **RFC7591** 및 **OpenID Connect Registration 1.0**에 명시된 사양을 준수하며, SSRF에 취약할 수 있는 매개변수를 포함합니다. -* 등록 프로세스는 여러 가지 방법으로 SSRF에 서버를 노출할 수 있습니다: +* 등록 프로세스는 여러 가지 방법으로 SSRF에 서버를 노출시킬 수 있습니다: * **`logo_uri`**: 서버가 가져올 수 있는 클라이언트 애플리케이션의 로고 URL로, SSRF를 유발하거나 URL이 잘못 처리될 경우 XSS로 이어질 수 있습니다. -* **`jwks_uri`**: 클라이언트의 JWK 문서에 대한 URL로, 악의적으로 조작된 경우 서버가 공격자가 제어하는 서버로 아웃바운드 요청을 하게 만들 수 있습니다. -* **`sector_identifier_uri`**: 서버가 가져올 수 있는 `redirect_uris`의 JSON 배열을 참조하여 SSRF 기회를 생성합니다. -* **`request_uris`**: 클라이언트에 대한 허용된 요청 URI를 나열하며, 서버가 권한 부여 프로세스 시작 시 이러한 URI를 가져오면 악용될 수 있습니다. +* **`jwks_uri`**: 클라이언트의 JWK 문서에 대한 URL로, 악의적으로 작성된 경우 서버가 공격자가 제어하는 서버에 아웃바운드 요청을 하게 만들 수 있습니다. +* **`sector_identifier_uri`**: 서버가 가져올 수 있는 `redirect_uris`의 JSON 배열을 참조하여 SSRF 기회를 생성할 수 있습니다. +* **`request_uris`**: 클라이언트에 대한 허용된 요청 URI를 나열하며, 서버가 인증 프로세스 시작 시 이러한 URI를 가져오면 악용될 수 있습니다. **악용 전략:** * SSRF는 `logo_uri`, `jwks_uri` 또는 `sector_identifier_uri`와 같은 매개변수에 악의적인 URL로 새 클라이언트를 등록하여 유발할 수 있습니다. -* `request_uris`를 통한 직접적인 악용은 화이트리스트 제어로 완화될 수 있지만, 사전 등록된 공격자가 제어하는 `request_uri`를 제공하면 권한 부여 단계에서 SSRF를 촉진할 수 있습니다. +* `request_uris`를 통한 직접적인 악용은 화이트리스트 제어로 완화될 수 있지만, 사전 등록된 공격자가 제어하는 `request_uri`를 제공하면 인증 단계에서 SSRF를 촉진할 수 있습니다. ## OAuth providers Race Conditions -테스트 중인 플랫폼이 OAuth 제공자인 경우 [**가능한 경쟁 조건을 테스트하려면 이 글을 읽으세요**](race-condition.md). +테스트 중인 플랫폼이 OAuth 제공자인 경우 [**가능한 경합 조건을 테스트하려면 이 글을 읽으세요**](race-condition.md). ## References @@ -228,8 +232,8 @@ OAuth의 동적 클라이언트 등록은 보안 취약점에 대한 덜 명백 {% embed url="https://websec.nl/" %} {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)