...
- 다음과 같이 fd영역의 값을 변경할 수 있습니다.
- 공격대상이 될 영역에 해제된 Heap과 같은 크기 값(0x80)이 저장되어 있어야 합니다.
- 할당받은 4번째 Heap영역에 'A'*8개를 입력해서, 첫번째 free chunk의 fd값이 변경되었습니다.
- set 명령어를 이용해 fd영역에 공격대상 주소 값을 저장합니다.
stack_var(0x7fffffffe220) - prev_size(0x8) = 0x7fffffffe218
- fd영역의 값 변경으로 fastbins의 Single list에 변화가 발생합니다.
- 0x602000 → 0x7fffffffe218 → 0x602010 → 0x0
- 0x7fffffffe218 영역이 fastbinsY에 등록되어 0x602000의 다음 free chunk로 인식됩니다.
- 0x7fffffffe218 + 0x10 영역이 0x7fffffffe218의 fd영역으로 인식됩니다.
- 0x7fffffffe218 + 0x10 영역에 저장된 값은 0x602010입니다.
- 0x7fffffffe218 + 0x10 영역에 저장된 값은 0x602010입니다.
- 0x602010영역 또한 0x7fffffffe218과 동일하게 다음 free chunk로 인식됩니다.
- 0x602010 + 0x10 영역에 저장된 값은 0x0입니다.
- 0x602010 + 0x10 영역에 저장된 값은 0x0입니다.
- 0x602000 → 0x7fffffffe218 → 0x602010 → 0x0
Code Block | ||
---|---|---|
| ||
gdb-peda$ c Continuing. buf4 size : 8 128 Breakpoint 6, 0x00000000004006f8 in main () gdb-peda$ x/gx 0x7fffffffe220 0x7fffffffe220: 0x0000000000000080 gdb-peda$ ni AAAAAAAA 0x00000000004006fd in main () gdb-peda$ x/4gx 0x602000 0x602000: 0x0000000000000000 0x0000000000000081 0x602010: 0x4141414141414141 0x0000000000000000 gdb-peda$ set *0x602010 = 0x7fffffffe220 - 0x8 gdb-peda$ set *0x602014 = 0x7fff gdb-peda$ x/gx 0x602010 0x602010: 0x00007fffffffe218 gdb-peda$ x/4gx 0x602000 0x602000: 0x0000000000000000 0x0000000000000081 0x602010: 0x00007fffffffe218 0x0000000000000000 |
...