Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Include Page
00.Notice
00.Notice

List

Table of Contents
outlinetrue
excludeList

House of Lore

  • House of Lore는 malloc()이 small bin에 해당하는 chunk의 재할당과 small bin에 배치하는 과정을 이용한 공격입니다.
  • malloc()은 small bin에 등록된 chunk를 사용하기 위해 메모리 할당을 요청한 크기가 small bin범위에 포함되는지 확인합니다.

    • 요청된 크기가 small bin 범위에 포함된다면, 요청된 크기에 해당하는 index를 찾습니다.

    • 그리고 bin[index]가 가지고 있는 값과 bin[index]→bk에 저장된 값을 비교합니다.

    • bin[index]→bk에 저장된 값을 victim에 저장합니다.

    • 그리고 이 값이 0 인지 확인합니다.

  • victim에 저장된 값이 0 아니라면 victim→bk 에 저장된 값을 bck에 저장합니다.

    • 그리고 bck->fd의 "victim"의 값이 다른지 확인합니다.

    • 두 값이 같지 않다면 malloc()은 에러 메시지("malloc(): smallbin double linked list corrupted")를 출력되고 프로세스를 종료합니다.

    • 두 값이 같다면 victim->size에 PREV_INUSE를 설정합니다.

    • 그리고 bck가 가지고 있는 값을 bin→bk에 저장되고, bin이 가지고 있는 값을 bck→fd에 저장합니다.

  • 해당 arena가 main arena인지 확인 합니다.

    • main arena가 아닐 경우 victim→size에 NON_MAIN_ARENA(0x4) flag를 설정합니다.

    • 그리고 할당자는 chunk2mem()을 호출하여 반환할 주소(victim + 2*SIZE_SZ)를 *p에 저장하고, p를 반환합니다.

...

Panel
titleHouse of Lore flow

Example

  • 이 코드는 앞에서 언급한 예와 동일한 코드입니다.
    • 크기가 128 바이트, 256 바이트 인 메모리의 할당을 요청합니다.
    • 크기가 128byte인 메모리의 해제를 요청한 후, 메모리 할당을 요청합니다.
    • fake chunk를 stack에 작성하고 fake chunk의 포인터를 free chunk의 bk에 저장합니다.
    • 그리고 크기가 128byte인 메모리 2개의 할당을 요청합니다.

...

Code Block
titleYou can access the data with a pointer to a fake chunk returned from malloc ().
gdb-peda$ c
Continuing.
buf4 : 0x602010
buf5 : 0x7fffffffe2b0
buf5 : 

Breakpoint 5, 0x00000000004008ad in main ()
gdb-peda$ x/i $rip
=> 0x4008ad <main+439>:	call   0x4005a0 <read@plt>
gdb-peda$ i r rsi
rsi            0x7fffffffe2b0	0x7fffffffe2b0
gdb-peda$ x/4gx 0x7fffffffe2b0
0x7fffffffe2b0:	0x00007ffff7dd1bf8	0x00007fffffffe2c0
0x7fffffffe2c0:	0x0000000000000000	0x0000000000000000
gdb-peda$ ni
AAAAAAAAAAAAAAAA

0x00000000004008b2 in main ()
gdb-peda$ x/4gx 0x7fffffffe2b0
0x7fffffffe2b0:	0x4141414141414141	0x4141414141414141
0x7fffffffe2c0:	0x000000000000000a	0x0000000000000000
gdb-peda$ 

Related information

...