시스템 해킹

 1576, 1/79 회원가입  로그인  
   vngkv123
   unlink매크로에서 P....

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1875 [복사]


P, 즉 unlink되는 chunk P를 어떻게 정의하는지가 궁금하네용 ㅜㅜ

unlink검증 루틴에서 P->fd->bk = P 가 되어야 하는데 unsafe unlink를 공부하고 있는데, 이 P가 어떻게 정의되는지가 ㅜ

  Hit : 3215     Date : 2017/05/12 10:26



    
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