From 471b6b80500d07e7143db7c527aed6ee34554588 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 20 Aug 2025 09:38:16 +0000 Subject: [PATCH] Translated ['src/binary-exploitation/libc-heap/use-after-free/first-fit. --- .../libc-heap/use-after-free/first-fit.md | 38 +++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/src/binary-exploitation/libc-heap/use-after-free/first-fit.md b/src/binary-exploitation/libc-heap/use-after-free/first-fit.md index acbb73758..6eb36f4b1 100644 --- a/src/binary-exploitation/libc-heap/use-after-free/first-fit.md +++ b/src/binary-exploitation/libc-heap/use-after-free/first-fit.md @@ -44,7 +44,7 @@ d = malloc(20); // a --- ### ЁЯФе рдЖрдзреБрдирд┐рдХ glibc рд╡рд┐рдЪрд╛рд░ (tcache тЙе 2.26) -glibc 2.26 рд╕реЗ рд╣рд░ рдереНрд░реЗрдб рдЕрдкрдиреА **tcache** рд░рдЦрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ *unsorted bin* рд╕реЗ *рдкрд╣рд▓реЗ* рдХреНрд╡реЗрд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдПрдХ first-fit рдкрд░рд┐рджреГрд╢реНрдп **рддрдм рд╣реА рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдпрджрд┐**: +glibc 2.26 рд╕реЗ рд╣рд░ рдереНрд░реЗрдб рдЕрдкрдиреА **tcache** рд░рдЦрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ *unsorted bin* рд╕реЗ *рдкрд╣рд▓реЗ* рдХреНрд╡реЗрд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдПрдХ first-fit рдкрд░рд┐рджреГрд╢реНрдп **рдХреЗрд╡рд▓ рддрдм** рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдпрджрд┐: 1. рдЕрдиреБрд░реЛрдзрд┐рдд рдЖрдХрд╛рд░ **`tcache_max`** (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 64-рдмрд┐рдЯ рдкрд░ 0x420) рд╕реЗ **рдмрдбрд╝рд╛ рд╣реИ**, *рдпрд╛* 2. рд╕рдВрдмрдВрдзрд┐рдд tcache рдмрд┐рди **рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рднрд░рд╛ рд╣реБрдЖ рд╣реИ рдпрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЦрд╛рд▓реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ** (7 рддрддреНрд╡реЛрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдХреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд░рдЦрдХрд░)ред @@ -92,38 +92,36 @@ fwrite(C2, 1, 0x10, stdout); // prints Xs ``` Exploitation recipe (common in recent CTFs): -1. **Drain** the tcache for the target size. -2. **Free** a chunk so it lands in the unsorted bin. -3. **Allocate** a slightly smaller size тАУ the allocator splits the unsorted chunk. -4. **Allocate** again тАУ the leftover part overlaps with an existing in-use chunk тЖТ UAF. -5. Overwrite sensitive fields (function pointers, FILE vtable, etc.) +1. **рдЯрд╛рд░рдЧреЗрдЯ рдЖрдХрд╛рд░** рдХреЗ рд▓рд┐рдП tcache рдХреЛ **рдбреНрд░реЗрди** рдХрд░реЗрдВред +2. рдПрдХ **рдЪрдВрдХ** рдХреЛ **рдлреНрд░реА** рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдЕрдирд╕реЙрд░реНрдЯреЗрдб рдмрд┐рди рдореЗрдВ рдЬрд╛рдПред +3. рдПрдХ рдереЛрдбрд╝рд╛ рдЫреЛрдЯрд╛ рдЖрдХрд╛рд░ **рдЕрд▓реЙрдЯ** рдХрд░реЗрдВ - рдЕрд▓реНрд▓реЛрдХреЗрдЯрд░ рдЕрдирд╕реЙрд░реНрдЯреЗрдб рдЪрдВрдХ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИред +4. рдлрд┐рд░ рд╕реЗ **рдЕрд▓реЙрдЯ** рдХрд░реЗрдВ - рдмрдЪреЗ рд╣реБрдП рднрд╛рдЧ рдХрд╛ рдПрдХ рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЪрдВрдХ рдХреЗ рд╕рд╛рде рдУрд╡рд░рд▓реИрдк рд╣реЛрддрд╛ рд╣реИ тЖТ UAFред +5. рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдлрд╝реАрд▓реНрдбреНрд╕ (рдлрдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░реНрд╕, FILE vtable, рдЖрджрд┐) рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░реЗрдВред -A practical application can be found in the 2024 HITCON Quals *Setjmp* challenge where this exact primitive is used to pivot from a UAF to full control of `__free_hook`.{{#ref}} -../../../../references/2024_setjmp_firstfit.md -{{#endref}} +рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ 2024 HITCON Quals *Setjmp* рдЪреБрдиреМрддреА рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдЗрд╕ рд╕рдЯреАрдХ рдкреНрд░рд╛рдЗрдорд┐рдЯрд┐рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ UAF рд╕реЗ `__free_hook` рдХреЗ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред --- ### ЁЯЫбя╕П Mitigations & Hardening -* **Safe-linking (glibc тЙе 2.32)** рдХреЗрд╡рд▓ singly-linked *tcache*/**fastbin** рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдЕрд╕рдВрд░рдЪрд┐рдд/рдЫреЛрдЯреЗ/рдмрдбрд╝реЗ рдмрд┐рди рдЕрднреА рднреА рдХрдЪреНрдЪреЗ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ-рдлрд┐рдЯ рдЖрдзрд╛рд░рд┐рдд рдУрд╡рд░рд▓реИрдк рддрдм рднреА рд╕рдВрднрд╡ рд╣реИрдВ рдпрджрд┐ рдЖрдк heap leak рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред -* **Heap pointer encryption & MTE** (ARM64) рдЕрднреА рддрдХ x86-64 glibc рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рддрд░рдг рд╣рд╛рд░реНрдбрдирд┐рдВрдЧ рдлреНрд▓реИрдЧ рдЬреИрд╕реЗ `GLIBC_TUNABLES=glibc.malloc.check=3` рдЕрд╕рдВрдЧрдд рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкрд░ abort рдХрд░реЗрдВрдЧреЗ рдФрд░ na├пve PoCs рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред -* **Filling tcache on free** (2024 рдореЗрдВ glibc 2.41 рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд) рдЕрд╕рдВрд░рдЪрд┐рдд рдЙрдкрдпреЛрдЧ рдХреЛ рдФрд░ рдХрдо рдХрд░реЗрдЧрд╛; рд╕рд╛рдорд╛рдиреНрдп exploits рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рднрд╡рд┐рд╖реНрдп рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдВред +* **рд╕реЗрдл-рд▓рд┐рдВрдХрд┐рдВрдЧ (glibc тЙе 2.32)** рдХреЗрд╡рд▓ рд╕рд┐рдВрдЧрд▓реА-рд▓рд┐рдВрдХреНрдб *tcache*/**fastbin** рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рд░рдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдЕрдирд╕реЙрд░реНрдЯреЗрдб/рдЫреЛрдЯреЗ/рдмрдбрд╝реЗ рдмрд┐рди рдЕрднреА рднреА рдХрдЪреНрдЪреЗ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ-рдлрд┐рдЯ рдЖрдзрд╛рд░рд┐рдд рдУрд╡рд░рд▓реИрдк рддрдм рднреА рд╕рдВрднрд╡ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдПрдХ рд╣реАрдк рд▓реАрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +* **рд╣реАрдк рдкреЙрдЗрдВрдЯрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди & MTE** (ARM64) рдЕрднреА рддрдХ x86-64 glibc рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рддрд░рдг рд╣рд╛рд░реНрдбрдирд┐рдВрдЧ рдлреНрд▓реИрдЧ рдЬреИрд╕реЗ `GLIBC_TUNABLES=glibc.malloc.check=3` рдЕрд╕рдВрдЧрдд рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкрд░ abort рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╕рд░рд▓ PoCs рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред +* **рдлреНрд░реА рдкрд░ tcache рднрд░рдирд╛** (2024 рдореЗрдВ glibc 2.41 рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд) рдЕрдирд╕реЙрд░реНрдЯреЗрдб рдЙрдкрдпреЛрдЧ рдХреЛ рдФрд░ рдХрдо рдХрд░реЗрдЧрд╛; рд╕рд╛рдорд╛рдиреНрдп рдПрдХреНрд╕рдкреНрд▓реЙрдЗрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рднрд╡рд┐рд╖реНрдп рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдВред --- ## Other References & Examples - [**https://heap-exploitation.dhavalkapil.com/attacks/first_fit**](https://heap-exploitation.dhavalkapil.com/attacks/first_fit) - [**https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/**](https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/) -- ARM64. Use after free: Generate an user object, free it, generate an object that gets the freed chunk and allow to write to it, **overwriting the position of user->password** from the previous one. Reuse the user to **bypass the password check** +- ARM64. Use after free: рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ, рдЗрд╕реЗ рдлреНрд░реА рдХрд░реЗрдВ, рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ рдЬреЛ рдлреНрд░реА рдХрд┐рдП рдЧрдП рдЪрдВрдХ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, **рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ user->password рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдирд╛**ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рддрд╛рдХрд┐ **рдкрд╛рд╕рд╡рд░реНрдб рдЪреЗрдХ рдХреЛ рдмрд╛рдпрдкрд╛рд╕** рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред - [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use_after_free/#example**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use_after_free/#example) -- The program allows to create notes. A note will have the note info in a malloc(8) (with a pointer to a function that could be called) and a pointer to another malloc() with the contents of the note. -- The attack would be to create 2 notes (note0 and note1) with bigger malloc contents than the note info size and then free them so they get into the fast bin (or tcache). -- Then, create another note (note2) with content size 8. The content is going to be in note1 as the chunk is going to be reused, were we could modify the function pointer to point to the win function and then Use-After-Free the note1 to call the new function pointer. +- рдкреНрд░реЛрдЧреНрд░рд╛рдо рдиреЛрдЯреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рдиреЛрдЯ рдореЗрдВ рдиреЛрдЯ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдПрдХ malloc(8) рдореЗрдВ рд╣реЛрдЧреА (рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреЙрдЗрдВрдЯрд░ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдФрд░ рдПрдХ рдЕрдиреНрдп malloc() рдХрд╛ рдкреЙрдЗрдВрдЯрд░ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдиреЛрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рд╣реЛрдЧреАред +- рд╣рдорд▓рд╛ 2 рдиреЛрдЯреНрд╕ (note0 рдФрд░ note1) рдмрдирд╛рдиреЗ рдХрд╛ рд╣реЛрдЧрд╛ рдЬрд┐рдирдХреА malloc рд╕рд╛рдордЧреНрд░реА рдиреЛрдЯ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдмрдбрд╝реА рд╣реЛрдЧреА рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдлреНрд░реА рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╡реЗ рдлрд╛рд╕реНрдЯ рдмрд┐рди (рдпрд╛ tcache) рдореЗрдВ рдЬрд╛рдПрдВред +- рдлрд┐рд░, рдПрдХ рдФрд░ рдиреЛрдЯ (note2) рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЖрдХрд╛рд░ 8 рд╣реЛред рд╕рд╛рдордЧреНрд░реА note1 рдореЗрдВ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдЪрдВрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд╣рд╛рдБ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░ рдХреЛ win рдлрд╝рдВрдХреНрд╢рди рдХреА рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдиреЛрдЯ1 рдХреЛ Use-After-Free рдХрд░рдХреЗ рдирдП рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред - [**https://guyinatuxedo.github.io/26-heap_grooming/pico_areyouroot/index.html**](https://guyinatuxedo.github.io/26-heap_grooming/pico_areyouroot/index.html) -- It's possible to alloc some memory, write the desired value, free it, realloc it and as the previous data is still there, it will treated according the new expected struct in the chunk making possible to set the value ot get the flag. +- рдХреБрдЫ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛, рд╡рд╛рдВрдЫрд┐рдд рдорд╛рди рд▓рд┐рдЦрдирд╛, рдЗрд╕реЗ рдлреНрд░реА рдХрд░рдирд╛, рдлрд┐рд░ рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдЪреВрдВрдХрд┐ рдкрд┐рдЫрд▓реЗ рдбреЗрдЯрд╛ рдЕрднреА рднреА рд╡рд╣рд╛рдВ рд╣реИ, рдЗрд╕реЗ рдЪрдВрдХ рдореЗрдВ рдирдП рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕рд╕реЗ рдорд╛рди рд╕реЗрдЯ рдХрд░рдирд╛ рдпрд╛ рдлреНрд▓реИрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред - [**https://guyinatuxedo.github.io/26-heap_grooming/swamp19_heapgolf/index.html**](https://guyinatuxedo.github.io/26-heap_grooming/swamp19_heapgolf/index.html) -- In this case it's needed to write 4 inside an specific chunk which is the first one being allocated (even after force freeing all of them). On each new allocated chunk it's number in the array index is stored. Then, allocate 4 chunks (+ the initialy allocated), the last one will have 4 inside of it, free them and force the reallocation of the first one, which will use the last chunk freed which is the one with 4 inside of it. -- 2024 HITCON Quals Setjmp write-up (Quarkslab) тАУ practical first-fit / unsorted-split overlap attack: -- Angstrom CTF 2024 *heapify* write-up тАУ abusing unsorted-bin splitting to leak libc and gain overlap: +- рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрдВрдХ рдХреЗ рдЕрдВрджрд░ 4 рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рд╕рднреА рдХреЛ рдмрд▓рдкреВрд░реНрд╡рдХ рдлреНрд░реА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА)ред рдкреНрд░рддреНрдпреЗрдХ рдирдП рдЖрд╡рдВрдЯрд┐рдд рдЪрдВрдХ рдореЗрдВ рдЗрд╕рдХрд╛ рдирдВрдмрд░ рдПрд░реЗ рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░, 4 рдЪрдВрдХреНрд╕ (+ рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд) рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВ, рдЕрдВрддрд┐рдо рдореЗрдВ 4 рд╣реЛрдЧрд╛, рдЙрдиреНрд╣реЗрдВ рдлреНрд░реА рдХрд░реЗрдВ рдФрд░ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рдкреБрдирдГ рдЖрд╡рдВрдЯрди рдХреЛ рдмрд▓ рджреЗрдВ, рдЬреЛ рдЕрдВрддрд┐рдо рдлреНрд░реА рдХрд┐рдП рдЧрдП рдЪрдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ 4 рд╣реЛрдЧрд╛ред +- 2024 HITCON Quals Setjmp write-up (Quarkslab) тАУ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд╣рд▓реЗ-рдлрд┐рдЯ / рдЕрдирд╕реЙрд░реНрдЯреЗрдб-рд╕реНрдкреНрд▓рд┐рдЯ рдУрд╡рд░рд▓реИрдк рд╣рдорд▓рд╛: +- Angstrom CTF 2024 *heapify* write-up тАУ рдЕрдирд╕реЙрд░реНрдЯреЗрдб-рдмрд┐рди рд╡рд┐рднрд╛рдЬрди рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ libc рд▓реАрдХ рдХрд░рдирд╛ рдФрд░ рдУрд╡рд░рд▓реИрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛: {{#include ../../../banners/hacktricks-training.md}}