[How2Heap] House_of_Force

[House_of_Force.c]


House of Force

house of force 기법은 top chunk를 overwrite하고 malloc의 인접한 값을 반환시키는 방법이다
top chunk는 메모리의 마지막에 위치하는 특별한 chunk이다.그리고 malloc이 os로부터 공간을 더 필요로 할때 resize할 수 있는 chunk이다.

끝에서, 우리는 0x602050에 있는 변수를 overwrite하여 사용할 것이다.
현재 값 : j0n9hyun

아직 할당되지 않은 공간을 가져와서 첫번째 chunk를 할당해보자.
0x603000에 256바이트의 chunk가 할당되었다.

이제 heap 영역에는 2개의 chunk가 만들어진다: 할당한 chunk와 top chunk(최상위 chunk)
우리가 할당한 chunk의 실제 size는 280이다.

이제 top chunk의 header를 overwrite할 수 있는 취약점을 실습해보자.

top chunk는 0x603110에서 시작한다.

큰 값이 top chunk size에 overwriting된다면 malloc은 절대 mmap을 호출하지 않을 것이다.
top chunk의 이전 size 0x20ef1
top chunk의 새로운 size 0xffffffffffffffff

이제 최상위 chunk는 size는 매우 커졌다. 우리는 malloc()을 호출하지 않고 무엇이든 mmap을 할당할 수 있다.
다음으로, 우리는 원하는 영역에 맞출 수 있게 chunk를 할당하고나면(integer overflow로) 원하는 영역에 바로 할당할 수 있을 것이다.

우리가 0x602050에 쓰려고하는 값, 그리고 0x603110에는 top chunk가 header size를 설명한다.
우리는 0xffffffffffffef20 바이트를 malloc할 것이다.
예상대로, 이전 top chunk와 같은 곳에 새 포인터가 있다: 0x603110

이제, 다음 chunk를 target buffer가 가리키는 곳에 overwrite할 것이다.
malloc(100) => 0x602050!
이제 우리는 값을 overwrite할 수 있다:
... 이전 문자열: j0n9hyun
… "YEAH!!!"를 strcpy해서 overwrite해보자…
... 새 문자열: YEAH!!!

공유하기