unlink
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์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
์ฝ๋
// From https://github.com/bminor/glibc/blob/master/malloc/malloc.c
/* Take a chunk off a bin list. */
static void
unlink_chunk (mstate av, mchunkptr p)
{
if (chunksize (p) != prev_size (next_chunk (p)))
malloc_printerr ("corrupted size vs. prev_size");
mchunkptr fd = p->fd;
mchunkptr bk = p->bk;
if (__builtin_expect (fd->bk != p || bk->fd != p, 0))
malloc_printerr ("corrupted double-linked list");
fd->bk = bk;
bk->fd = fd;
if (!in_smallbin_range (chunksize_nomask (p)) && p->fd_nextsize != NULL)
{
if (p->fd_nextsize->bk_nextsize != p
|| p->bk_nextsize->fd_nextsize != p)
malloc_printerr ("corrupted double-linked list (not small)");
// Added: If the FD is not in the nextsize list
if (fd->fd_nextsize == NULL)
{
if (p->fd_nextsize == p)
fd->fd_nextsize = fd->bk_nextsize = fd;
else
// Link the nexsize list in when removing the new chunk
{
fd->fd_nextsize = p->fd_nextsize;
fd->bk_nextsize = p->bk_nextsize;
p->fd_nextsize->bk_nextsize = fd;
p->bk_nextsize->fd_nextsize = fd;
}
}
else
{
p->fd_nextsize->bk_nextsize = p->bk_nextsize;
p->bk_nextsize->fd_nextsize = p->fd_nextsize;
}
}
}
๊ทธ๋ํฝ ์ค๋ช
unlink ํ๋ก์ธ์ค์ ๋ํ ํ๋ฅญํ ๊ทธ๋ํฝ ์ค๋ช ์ ํ์ธํ์ธ์:
 (1) (1) (1) (1) (1).png)
https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png
๋ณด์ ๊ฒ์ฌ
- ์ฒญํฌ์ ์ง์ ๋ ํฌ๊ธฐ๊ฐ ๋ค์ ์ฒญํฌ์ ํ์๋ prev_size์ ๋์ผํ์ง ํ์ธํฉ๋๋ค.
- ๋ํ
P->fd->bk == P๋ฐP->bk->fw == P์ธ์ง ํ์ธํฉ๋๋ค. - ์ฒญํฌ๊ฐ ์์ง ์์ ๊ฒฝ์ฐ,
P->fd_nextsize->bk_nextsize == P๋ฐP->bk_nextsize->fd_nextsize == P์ธ์ง ํ์ธํฉ๋๋ค.
๋์
unlink๋ ์ฒญํฌ๋ ํ ๋น๋ ์ฃผ์๋ฅผ ์ ๋ฆฌํ์ง ์์ผ๋ฏ๋ก, ์ด๋ฅผ ์ฝ์ ์ ์๋ ์ ๊ทผ ๊ถํ์ด ์์ผ๋ฉด ํฅ๋ฏธ๋ก์ด ์ฃผ์๋ฅผ ๋์ถํ ์ ์์ต๋๋ค:
Libc ๋์:
- P๊ฐ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋จธ๋ฆฌ์ ์์นํ๋ฉด,
bk๋ libc์malloc_state๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. - P๊ฐ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋์ ์์นํ๋ฉด,
fd๋ libc์malloc_state๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. - ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ฌด๋ฃ ์ฒญํฌ๊ฐ ํ๋๋ง ํฌํจ๋์ด ์์ ๋, P๋ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์์ผ๋ฉฐ,
fd์bk๋ชจ๋malloc_state๋ด๋ถ์ ์ฃผ์๋ฅผ ๋์ถํ ์ ์์ต๋๋ค.
ํ ๋์:
- P๊ฐ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋จธ๋ฆฌ์ ์์นํ๋ฉด,
fd๋ ํ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฒญํฌ๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. - P๊ฐ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋์ ์์นํ๋ฉด,
bk๋ ํ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฒญํฌ๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. - P๊ฐ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์์ผ๋ฉด,
fd์bk๋ชจ๋ ํ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฒญํฌ๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
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์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


