|  |
| |
| zer0water |
P->fd->bk = P->bk
P->bk->fd = P->fd 이죠
여기서 Heap overflow가 생기게되어 P의 fd,bk를 변조할 수 있다면,
특정 메모리에 값을 쓰는게 가능해지는데요.
죄송한데 저는 unlink되는 chunk P가 어떻게 정의되냐는 질문이 뭔지 이해가 되지 않네요 |
2017/05/12 |
|
| vngkv123 |
unlink 검증 루틴에서 if(__builtin_expect(FD->bk != P | BK->fd != P, 0)이 쪽 말하는거에영.
일반적인 binlist에서의 chunk가 free될 땐, P가 chunk의 시작부분을 가리키기 때문에 이해하기 쉬운데
unsafe unlink에서 fake chunk를 구성해줄 때, 이 fake chunk의 P도 아마 heap영역일텐데, 이 루틴을 우회하기 위해 bss영역에 저장되있는 주소로 fake chunk의 fd와 bk를 설정해준다는게 이해가 안되네용. |
2017/05/12 |
|
| vngkv123 |
위의 2번째 줄에서 free될때가 아니라 unlink될 때용 ㅜㅠ |
2017/05/12 |
|
| 해쿨러 |
unlink에서 p는
/* consolidate backward */
if (!prev_inuse(p)) {
prevsize = prev_size (p);
size += prevsize;
p = chunk_at_offset(p, -((long) prevsize));
unlink(av, p, bck, fwd);
}
이렇게 정의됩니다
p - p->prev_size |
2017/05/14 |
|
| vngkv123 |
감사합니다 ㅎㅎ |
2017/05/14 |
|