2020 하계 모각코 6회 회고록

 

6회차 회고록

목표

  • 보안 공부 - how2heap

결과

first fit

  • 주기억장치의 사용 가능한 공간을 탐색하여 첫번쩨로 찾아낸 곳에 할당하는 방식
  • 충분한 공간을 찾으면 탐색을 종료한다.
  • 가장 간단하며, 대부분의 경우 최적이고 빠르다.

first fit.c

코드

6-1

실행 결과

6-2

glic는 free chunk를 선택하기 위해 first-fit 알고리즘을 사용합니다. 만약 어떤 chunk가 free되어있고 충분한 크기라면 malloc은 이 chunk를 선택할 것입니다. 이는 UAF 상황에서 exploit될 수 있습니다. 2개의 버퍼를 할당합니다. 두 버퍼는 fastbin이 되지 않게 충분히 커야합니다. 첫 번째 malloc(512): 0x555555757260 두 번째 malloc(256): 0x555555757780 우리는 여기서 malloc을 이어갈 수도 있습니다… 나중에 확인할 수 있도록 문자열을 적어놓읍시다. “This is A!” 첫 번째 malloc 0x555555757260 은 “This is A!” 를 가리키고 있습니다. 첫 번째 malloc을 free합니다…. 우리는 더 이상 free할 필요가 없습니다. 우리가 512보다 작은 사이즈를 할당하면 그건0x555555757260 를 가리키게 될 것입니다. 그러니까, 500 bytes를 한번 할당해 봅시다. 세 번째 malloc(500): 0x555555757260 이제 이 주소에 다른 문자열을 넣어보겠습니다, “This is C!” 세 번째 malloc 0x555555757260은 “This is C!” 를 가리키고 있습니다. 첫 번째 malloc 0x555555757260은 “This is C!” 를 가리키고 있습니다. 첫 번째 malloc 변수는 세 번째 malloc된 chunk를 가리키고 있게 됩니다.

디버깅 : peda-gdb

pdisas main

6-3 6-4

break point로 확인

  • 할당한 직후에 break
  • free 전과 free 후에 break

6-6 첫번째 malloc 후에 rax를 확인해보면 위와 같다.

image

x/40xg 0x555555757260-0x10

0x10을 빼주는 것은 malloc후 반환되는 주소가 chunk의 주소가 아니라 data의 주소이기 때문에 header를 보기위함이다.

메모리를 보면 size에 0x521이 들어있는 것을 확인할 수 있다.

이는 0x512(data) + 0x08(header) = 0x520 인데 마지막 1은 prev_inuse_bit이다.

image

두번째 malloc 후에 rax를 확인해보면 위와 같다.

image

0x261은 0x256(data) + 0x08 = 0x25e 인데 마지막 1은 prev_inuse_bit이다.

image 첫번째 malloc을 free하고 다시 메모리를 확인해보면 해당 영역이 freed chunk가 되어 fk와 bk가 생긴 것을 확인할 수 있다.

image free한 후 세번째 mallor을 한 뒤 rax를 확인해보면 위와 같다.

image

세번째 malloc이 첫번째 malloc이 할당되었던 부분을 할당받은 것을 알 수 있다.

gdb 명령어 정리

X 명령어를 사용해 메모리를 조사할 수 있다.

o : 8진법으로 보여줌

x : 16진법으로 보여줌

u : 10진법으로 보여줌

t : 2진법으로 보여줌

b : 1 byte 단위로 보여줌(byte)

h : 2 byte 단위로 보여줌(half word)

w: 4 byte 단위로 보여줌(word) - 난 2byte로 알고 있지만 여기선 4바이트로 쓰이나 보다….

g : 8 byte 단위로 보여줌(giant)

i : 역어셈블된 명령어의 명령 메모리를 볼수 있음

c : ASCII 표의 바이트를 자동으로 볼 수 있다.

s : 문자 데이터의 전체 문자열을 보여준다.

예시

x/o $esp

x/4wx 0xbffff2a0

x/hu $ebp

x/gt $eip

x/i $eip

x/3i $eip

x/3cb 0x8048484

x/s 0x8048484

참고 사이트 : 블로그