Off by one overflow
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
๊ธฐ๋ณธ ์ ๋ณด
๋จ์ง 1๋ฐ์ดํธ ์ค๋ฒํ๋ก์ฐ์ ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ์ ๊ณต๊ฒฉ์๊ฐ ๋ค์ ์ฒญํฌ์ size ํ๋๋ฅผ ๋ณ๊ฒฝํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ์ด๋ ์ค์ ๋ก ์ด๋ค ์ฒญํฌ๋ค์ด free๋๋์ง๋ฅผ ์กฐ์ํ ์ ์๊ฒ ํ๋ฉฐ, ์ ์ฌ์ ์ผ๋ก ๋ค๋ฅธ ํฉ๋ฒ์ ์ธ ์ฒญํฌ๋ฅผ ํฌํจํ๋ ์ฒญํฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ต์คํ๋ก์ ๋ฐฉ๋ฒ์ double free ๋๋ overlapping chunks์ ์ ์ฌํฉ๋๋ค.
There are 2 types of off by one vulnerabilities:
- Arbitrary byte: ์ด ์ ํ์ ํด๋น ๋ฐ์ดํธ๋ฅผ ์์์ ๊ฐ์ผ๋ก ๋ฎ์ด์ธ ์ ์๊ฒ ํฉ๋๋ค
- Null byte (off-by-null): ์ด ์ ํ์ ํด๋น ๋ฐ์ดํธ๋ฅผ ์ค์ง 0x00์ผ๋ก๋ง ๋ฎ์ด์ธ ์ ์๊ฒ ํฉ๋๋ค
- A common example of this vulnerability can be seen in the following code where the behavior of
strlenandstrcpyis inconsistent, which allows set a 0x00 byte in the beginning of the next chunk. - This can be expoited with the House of Einherjar.
- If using Tcache, this can be leveraged to a double free situation.
Off-by-null
```c // From https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/off_by_one/ int main(void) { char buffer[40]=""; void *chunk1; chunk1 = malloc(24); puts("Get Input"); gets(buffer); if(strlen(buffer)==24) { strcpy(chunk1,buffer); } return 0; } ```๋ค๋ฅธ ๊ฒ์ฌ๋ค๊ณผ ํจ๊ป, ์ด์ chunk๊ฐ free๋ ๋๋ง๋ค ์ด์ previous size๊ฐ metadata์ chunk์ ์ค์ ๋ size์ ๋น๊ต๋๋ฏ๋ก ์ด ๊ณต๊ฒฉ์ 2.28 ๋ฒ์ ๋ถํฐ ์๋นํ ๋ณต์กํด์ก๋ค.
Code example:
- https://github.com/DhavalKapil/heap-exploitation/blob/d778318b6a14edad18b20421f5a06fa1a6e6920e/assets/files/shrinking_free_chunks.c
- ์ด ๊ณต๊ฒฉ์ Tcaches ์ฌ์ฉ์ผ๋ก ์ธํด ๋ ์ด์ ๋์ํ์ง ์๋๋ค.
- ๋ํ, ๋ ํฐ chunks๋ฅผ ์ฌ์ฉํด(๋ฐ๋ผ์ tcaches๊ฐ ๊ด์ฌํ์ง ์๋) ์
์ฉ์ ์๋ํ๋ฉด ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค:
malloc(): invalid next size (unsorted)
Goal
- ํ๋์ chunk๊ฐ ๋ค๋ฅธ chunk ๋ด๋ถ์ ํฌํจ๋๋๋ก ๋ง๋ค์ด, ๋ ๋ฒ์งธ chunk์ ๋ํ ์ฐ๊ธฐ ์ ๊ทผ์ผ๋ก ๋ด๋ถ์ ํฌํจ๋ chunk๋ฅผ ๋ฎ์ด์ธ ์ ์๊ฒ ํ๋ค
Requirements
- size metadata ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ Off by one overflow
General off-by-one attack
- ์ธ ๊ฐ์ chunk
A,B๋ฐC๋ฅผ ํ ๋นํ๋ค(์: ํฌ๊ธฐ 0x20). ๊ทธ๋ฆฌ๊ณ top-chunk์์ consolidation์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ถ๊ฐ ํ๋๋ฅผ ๋ ํ ๋นํ๋ค. C๋ฅผ freeํ๋ค(0x20 Tcache free-list์ ์ฝ์ ๋จ).A๋ฅผ ์ฌ์ฉํดB์ overflow๋ฅผ ๋ฐ์์ํจ๋ค. off-by-one์ ์ ์ฉํดB์sizeํ๋๋ฅผ 0x21์์ 0x41๋ก ๋ณ๊ฒฝํ๋ค.- ์ด์
B๋ free๋ chunkC๋ฅผ ํฌํจํ๊ฒ ๋๋ค. B๋ฅผ freeํ๊ณ 0x40 ํฌ๊ธฐ์ chunk๋ฅผ ํ ๋นํ๋ฉด(ํด๋น ์์น์ ๋ค์ ๋ฐฐ์น๋๋ค).C๋ ์ฌ์ ํ free ์ํ์ด๋ฏ๋ก ๊ทธ ์์fdํฌ์ธํฐ๋ฅผ ์์ ํ ์ ์๋ค (Tcache poisoning)
Off-by-null attack
- ์ฐ์์ผ๋ก 3๊ฐ์ ๋ฉ๋ชจ๋ฆฌ chunk(a, b, c)๋ฅผ ํ ๋นํ ๋ค ์ค๊ฐ chunk๋ฅผ freeํ๋ค. ์ฒซ ๋ฒ์งธ chunk์๋ off by one overflow ์ทจ์ฝ์ ์ด ์๊ณ ๊ณต๊ฒฉ์๋ ์ด๋ฅผ 0x00์ผ๋ก ์ ์ฉํ๋ค(์ด์ ๋ฐ์ดํธ๊ฐ 0x10์ด์๋ค๋ฉด ์ค๊ฐ chunk๊ฐ ์ค์ ๋ณด๋ค 0x10 ์๋ค๊ณ ํ์ํ๊ฒ ๋๋ค).
- ๊ทธ ๋ค์ ์ค๊ฐ์ free๋ chunk(b) ์์ ๋ ์์ ๋ ๊ฐ์ chunk๋ฅผ ์ถ๊ฐ๋ก ํ ๋นํ๋ค. ๊ทธ๋ฌ๋
b + b->size๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์๊ฐ ์ค์ ๋ณด๋ค ์๊ธฐ ๋๋ฌธ์ c chunk๋ ์ ๋ฐ์ดํธ๋์ง ์๋๋ค. - ๊ทธ ํ b1๊ณผ c๊ฐ free๋๋ค.
c - c->prev_size๊ฐ ์ฌ์ ํ b(ํ์ฌ b1)๋ฅผ ๊ฐ๋ฆฌํค๋ฏ๋ก ๋ ๊ฐ๋ ํ๋์ chunk๋ก ๋ณํฉ๋๋ค. ํ์ง๋ง b2๋ b1๊ณผ c ์ฌ์ด์ ์ฌ์ ํ ๋จ์ ์๋ค. - ๋ง์ง๋ง์ผ๋ก ์๋ก malloc์ ์ํํ๋ฉด ์ค์ ๋ก b2๋ฅผ ํฌํจํ๋ ์ด ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ์ํ๊ฒ ๋์ด, ์ malloc์ ์์ ์๊ฐ b2์ ๋ด์ฉ์ ์ ์ดํ ์ ์๊ฒ ๋๋ค.
This image explains perfectly the attack:
.png)
https://heap-exploitation.dhavalkapil.com/attacks/shrinking_free_chunks
Modern glibc hardening & bypass notes (>=2.32)
- Safe-Linking์ ์ด์ ๋ชจ๋ singly linked bin ํฌ์ธํฐ๋ฅผ
fd = ptr ^ (chunk_addr >> 12)๋ก ์ ์ฅํด ๋ณดํธํ๋ฏ๋ก, size์ ํ์ ๋ฐ์ดํธ๋ง ๋ค์ง๋ off-by-one์ ๋ณดํต Tcache poisoning์ด ๋์ํ๊ธฐ ์ ์ XOR ๋ง์คํฌ๋ฅผ ์ฌ๊ณ์ฐํ๊ธฐ ์ํ heap leak์ด ํ์ํ๋ค. - ์ค์ ๋ก leak ์์ด ์ธ ์ ์๋ ํธ๋ฆญ์ ํฌ์ธํฐ๋ฅผ โdouble-protectโํ๋ ๊ฒ์ด๋ค: ์ด๋ฏธ ์ ์ดํ๋ ํฌ์ธํฐ๋ฅผ
PROTECT_PTR๋ก ์ธ์ฝ๋ฉํ ๋ค, ๊ฐ์ ๊ธฐ๋ฒ์ ์ฌ์ฌ์ฉํด ์์กฐํ ํฌ์ธํฐ๋ฅผ ์ธ์ฝ๋ฉํ๋ฉด ์ ๋ ฌ ๊ฒ์ฌ(alignment check)๊ฐ ์๋ก์ด ์ฃผ์๋ฅผ ๋ ธ์ถํ์ง ์๊ณ ๋ ํต๊ณผํ๋ค. - safe-linking + single-byte corruptions ์์ ํ๋ฆ:
- victim chunk๋ฅผ ์ ์ดํ๋ ์ด๋ฏธ ๊ฐ์ง free๋ chunk๋ฅผ ์์ ํ ๋ฎ์ ๋๊น์ง ํ์ฅํ๋ค (overlapping-chunk ์ค์ ).
- heap ํฌ์ธํฐ(stdout, UAF, ๋ถ๋ถ์ ์ผ๋ก ์ ์ด๋ struct ๋ฑ)๋ฅผ leakํ๊ณ ํค
heap_base >> 12๋ฅผ ๋์ถํ๋ค. - free-list ํฌ์ธํฐ๋ฅผ ์ฐ๊ธฐ ์ ์ ์ฌ์ธ์ฝ๋ฉํ๋ค โ ์ธ์ฝ๋ฉ๋ ๊ฐ์ user data ์์ ๋ฐฐ์นํ๊ณ single-byte ์ฐ๊ธฐ๋ง ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋์ค์ memcpy๋ก ์ฎ๊ธด๋ค.
- ์์กฐ ํฌ์ธํฐ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ธ์ฝ๋ฉ๋๋ฉด Tcache bin attacks์ ๊ฒฐํฉํด ํ ๋น์
__free_hook์ด๋tcache_perthread_struct์ํธ๋ฆฌ๋ก ๋ฆฌ๋ค์ด๋ ํธํ๋ค.
์ต์ ์ต์คํ๋ก์์ ๋๋ฒ๊น ํ ๋ ์ธ์ฝ๋/๋์ฝ๋ ๋จ๊ณ๋ฅผ ์ฐ์ตํ๊ธฐ ์ํ ์ต์ํ์ ํฌํผ:
def protect(ptr, chunk_addr):
return ptr ^ (chunk_addr >> 12)
def reveal(encoded, chunk_addr):
return encoded ^ (chunk_addr >> 12)
chunk = 0x55555555c2c0
encoded_fd = protect(0xdeadbeefcaf0, chunk)
print(hex(reveal(encoded_fd, chunk))) # 0xdeadbeefcaf0
์ต๊ทผ ์ค์ ํ์ : glibc __vsyslog_internal off-by-one (CVE-2023-6779)
- 2024๋
1์ Qualys๋ CVE-2023-6779์ ์์ธํ ์ค๋ช
ํ๋๋ฐ, ์ด๋
__vsyslog_internal()๋ด๋ถ์ off-by-one ์ทจ์ฝ์ ์ผ๋กsyslog()/vsyslog()์ ํฌ๋งท ๋ฌธ์์ด์ดINT_MAX๋ฅผ ์ด๊ณผํ ๋ ๋ฐ์ํ์ฌ ์ข ๋ฃ\0์ด glibc 2.37โ2.39 ์์คํ ์์ ์ธ์ ์ฒญํฌ์ ๊ฐ์ฅ ํ์size๋ฐ์ดํธ๋ฅผ ์์์ํจ๋ค (Qualys advisory). - ๊ทธ๋ค์ Fedora 38 exploit pipeline:
- ๊ณผ๋ํ๊ฒ ๊ธด
openlog()ident์ ๋ง๋ค์ดvasprintf๊ฐ ๊ณต๊ฒฉ์๊ฐ ์ ์ดํ๋ ๋ฐ์ดํฐ ์์ ํ ๋ฒํผ๋ฅผ ๋ฐํํ๊ฒ ํ๋ค. - ์ด์ ์ฒญํฌ์
size | prev_inuse๋ฐ์ดํธ๋ฅผ ํ๊ดดํ๊ธฐ ์ํดsyslog()๋ฅผ ํธ์ถํ๊ณ , ํด๋น ์ฒญํฌ๋ฅผ freeํ ๋ค ๊ณต๊ฒฉ์ ๋ฐ์ดํฐ์ ์ค์ฒฉ๋๋๋ก consolidation์ ๊ฐ์ ํ๋ค. - ์ค์ฒฉ๋ ๋ทฐ๋ฅผ ์ด์ฉํด
tcache_perthread_struct๋ฉํ๋ฐ์ดํฐ๋ฅผ ์์์ํค๊ณ ๋ค์ ํ ๋น์ด__free_hook๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋ง๋ ๋ค์system๋๋ root ๊ถํ์ ์ํ one_gadget์ผ๋ก ๋ฎ์ด์ด๋ค.
- ํ
์คํธ ํ๋์ค์์ ์์ ์ฐ๊ธฐ๋ฅผ ์ฌํํ๋ ค๋ฉด, ๊ฑฐ๋ํ
argv[0]์ผ๋ก forkํ๊ณopenlog(NULL, LOG_PID, LOG_USER)๋ฅผ ํธ์ถํ ๋ค์syslog(LOG_INFO, "%s", payload)๋ฅผ ํธ์ถํ๋ผ. ์ฌ๊ธฐ์payload = b"A" * 0x7fffffff;pwndbg์heap bins๋ ์ฆ์ ๋จ์ผ ๋ฐ์ดํธ ๋ฎ์ด์ฐ๊ธฐ๋ฅผ ๋ณด์ฌ์ค๋ค. - Ubuntu๋ ์ด ๋ฒ๊ทธ๋ฅผ CVE-2023-6779๋ก ์ถ์ ํ๋ฉฐ, ์ด ๋์ผํ INT truncation์ด ์ด ์ทจ์ฝ์ ์ ์ ๋ขฐํ ์ ์๋ off-by-one primitive๋ก ๋ง๋ ๋ค๊ณ ๋ฌธ์ํํ๋ค.
๊ธฐํ ์์ ๋ฐ ์ฐธ๊ณ ์๋ฃ
- https://heap-exploitation.dhavalkapil.com/attacks/shrinking_free_chunks
- Bon-nie-appetit. HTB Cyber Apocalypse CTF 2022
- Off-by-one์
strlen์ด ๋ค์ ์ฒญํฌ์sizeํ๋๋ฅผ ๊ณ ๋ คํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ค. - Tcache๊ฐ ์ฌ์ฉ๋๋ฏ๋ก ์ผ๋ฐ์ ์ธ off-by-one ๊ณต๊ฒฉ์ผ๋ก Tcache poisoning์ ํตํด arbitrary write primitive๋ฅผ ์ป์ ์ ์๋ค.
- Asis CTF 2016 b00ks
- ๋ฌธ์์ด ๋์ 0x00 ๋ฐ์ดํธ๊ฐ ๋ค์ ํ๋์ ์ํด ๋ฎ์ด์จ์ง๊ธฐ ๋๋ฌธ์ off-by-one์ ์ ์ฉํ์ฌ ํ์์ ์ฃผ์๋ฅผ leakํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
- Arbitrary write๋ off by one ์ฐ๊ธฐ๋ฅผ ์ ์ฉํด ํฌ์ธํฐ๊ฐ ๊ฐ์ง ํฌ์ธํฐ๋ฅผ ๊ฐ์ง ๊ฐ์ง struct๊ฐ ๋ง๋ค์ด์ง ๋ค๋ฅธ ์์น๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํจ์ผ๋ก์จ ์ป๋๋ค. ๊ทธ ๋ค์ ์ด struct์ ํฌ์ธํฐ๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉด arbitrary write๋ฅผ ์ป์ ์ ์๋ค.
- ํ์ด mmap์ผ๋ก ํ์ฅ๋๋ฉด mmap์ด ํ ๋นํ๋ ๋ฉ๋ชจ๋ฆฌ๋ libc๋ก๋ถํฐ ๊ณ ์ ๋ ์คํ์ ์ ๊ฐ์ง๋ฏ๋ก libc ์ฃผ์๊ฐ leak๋๋ค.
- ๋ง์ง๋ง์ผ๋ก arbitrary write๋ฅผ ์
์ฉํด
__free_hook์ฃผ์์ one gadget์ ์จ๋ฃ๋๋ค. - plaidctf 2015 plaiddb
- ์ฌ์ฉ์ ์
๋ ฅ ๋ผ์ธ์ ์ฝ๋
getlineํจ์์ NULL off by one ์ทจ์ฝ์ ์ด ์๋ค. ์ด ํจ์๋ ์ฝํ ์ธ ์ โkeyโ๋ฅผ ์ฝ๋ ๋ฐ ์ฌ์ฉ๋๊ณ ์ฝํ ์ธ ์์ฒด๋ฅผ ์ฝ๋ ๋ฐ๋ ์ฌ์ฉ๋์ง ์๋๋ค. - In the writeup ์ด๊ธฐ 5๊ฐ์ ์ฒญํฌ๊ฐ ์์ฑ๋๋ค:
- chunk1 (0x200)
- chunk2 (0x50)
- chunk5 (0x68)
- chunk3 (0x1f8)
- chunk4 (0xf0)
- chunk defense (0x400)๋ top chunk์ consolidating๋๋ ๊ฒ์ ํผํ๊ธฐ ์ํ ๊ฒ์ด๋ค
- ๊ทธ๋ค์ chunk 1, 5, 3์ด free๋์ด, ๋ค์๊ณผ ๊ฐ์ด ๋๋ค:
-
[ 0x200 Chunk 1 (free) ] [ 0x50 Chunk 2 ] [ 0x68 Chunk 5 (free) ] [ 0x1f8 Chunk 3 (free) ] [ 0xf0 Chunk 4 ] [ 0x400 Chunk defense ]
- ๊ทธ ํ chunk3 (0x1f8)์ ์
์ฉํ์ฌ null off-by-one์ ์ด์ฉํด prev_size๋ฅผ `0x4e0`์ผ๋ก ์ด๋ค.
- ์ด๊ธฐ์ ํ ๋น๋ chunks 1, 2, 5, 3์ ํฌ๊ธฐ์ ๊ทธ๋ค ์ฒญํฌ 4๊ฐ์ ํค๋ ํฌ๊ธฐ ํฉ์ด `0x4e0`์ธ ๊ฒ์ ์ฃผ๋ชฉํ๋ผ: `hex(0x1f8 + 0x10 + 0x68 + 0x10 + 0x50 + 0x10 + 0x200) = 0x4e0`
- ๊ทธ ๋ค์ chunk 4๊ฐ free๋์ด ์์์ง์ ๊น์ง ๋ชจ๋ ์ฒญํฌ๋ฅผ ์๋นํ๋ ์ฒญํฌ๊ฐ ์์ฑ๋๋ค:
- ```python
[ 0x4e0 Chunk 1-2-5-3 (free) ] [ 0xf0 Chunk 4 (corrupted) ] [ 0x400 Chunk defense ]
[ 0x200 Chunk 1 (free) ] [ 0x50 Chunk 2 ] [ 0x68 Chunk 5 (free) ] [ 0x1f8 Chunk 3 (free) ] [ 0xf0 Chunk 4 ] [ 0x400 Chunk defense ]
- ๊ทธ ํ ์๋์ chunk 1์ ์ฑ์ฐ๊ธฐ ์ํด `0x200` ๋ฐ์ดํธ๋ฅผ ํ ๋นํ๋ค
- ๊ทธ๋ฆฌ๊ณ ๋ ๋ค๋ฅธ 0x200 ๋ฐ์ดํธ๊ฐ ํ ๋น๋์ด chunk2๊ฐ ํ๊ดด๋๋ฏ๋ก, ๋ฐ๋ผ์ fucking leak๊ฐ ์์ด์ ๋์ํ์ง ์๋๋ค? ์๋ง ์ด๊ฑด ํ๋ฉด ์ ๋ ๊ฒ์ด๋ค
- ๊ทธ ๋ค์ 0x58๊ฐ์ "a"๋ก ๋ค๋ฅธ ์ฒญํฌ๋ฅผ ํ ๋น( chunk2๋ฅผ ๋ฎ์ด์ฐ๊ณ chunk5์ ๋๋ฌ)ํ๊ณ chunk5์ fast bin ์ฒญํฌ์ `fd`๋ฅผ `__malloc_hook`๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ์์ ํ๋ค
- ๊ทธ ๋ค์ 0x68 ํฌ๊ธฐ์ ์ฒญํฌ๋ฅผ ํ ๋นํ์ฌ `__malloc_hook`์ ์๋ ๊ฐ์ง fast bin ์ฒญํฌ๊ฐ ๋ค์ fast bin ์ฒญํฌ๊ฐ ๋๊ฒ ํ๋ค
- ๋ง์ง๋ง์ผ๋ก ์๋ก์ด 0x68 fast bin ์ฒญํฌ๊ฐ ํ ๋น๋๊ณ `__malloc_hook`๊ฐ `one_gadget` ์ฃผ์๋ก ๋ฎ์ด์จ์ง๋ค
## References
- [Qualys Security Advisory โ CVE-2023-6246/6779/6780](https://www.qualys.com/2024/01/30/cve-2023-6246/syslog.txt)
- [Ubuntu Security โ CVE-2023-6779](https://ubuntu.com/security/CVE-2023-6779)
- [Breaking Safe-Linking in Modern Glibc โ Google CTF 2022 "saas" analysis](https://blog.csdn.net/2402_86373248/article/details/148717274)
> [!TIP]
> AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>HackTricks ์ง์ํ๊ธฐ</summary>
>
> - [**๊ตฌ๋
๊ณํ**](https://github.com/sponsors/carlospolop) ํ์ธํ๊ธฐ!
> - **๐ฌ [**๋์ค์ฝ๋ ๊ทธ๋ฃน**](https://discord.gg/hRep4RUj7f) ๋๋ [**ํ
๋ ๊ทธ๋จ ๊ทธ๋ฃน**](https://t.me/peass)์ ์ฐธ์ฌํ๊ฑฐ๋ **ํธ์ํฐ** ๐ฆ [**@hacktricks_live**](https://twitter.com/hacktricks_live)**๋ฅผ ํ๋ก์ฐํ์ธ์.**
> - **[**HackTricks**](https://github.com/carlospolop/hacktricks) ๋ฐ [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.**
>
> </details>


