본문 바로가기

분류 전체보기

2019 d3ctf lonely_observer 2019 d3ctf lonely_observerpipe https://12bme.tistory.com/226d3ctf writeup https://www.anquanke.com/post/id/193939#h3-9pipe를 이용한 IPC를 구현한 바이너리이다.총 2개의 바이너리 mimic32, mimic64와 IPC 통신을 진행한다.간단하게 lonely_observer 바이너리에서 각각의 thread로 입력, 출력을 받고 이를 출력해준다.요로코롬 thread를 만들어서 각각의 바이너리를 관리한다.그리고 밑에서 buf에 입력을 받아 mimic32, mimic64에 전달해준다.근데 문제는 main_thread에서 memcmp로 mimic32, mimic64의 출력값을 비교한다.출력값이 같지 않으면 handle.. 더보기
2019 d3ctf babyrop 2019 d3ctf babyrop쉬운 custom vm 문제다.custom stack을 이용하여 연산들을 쭉쭉 하는데 stack에 존재하는 변수에 custom stack을 만들어서 연산을 쭉쭉 한다.딱 봐도 ret 덮을 수 있을 것 같죠?!opcode 분석들만 해주고 바로 onegadget으로 쉘따면 됩니다.00000000 custom_stack struc ; (sizeof=0x14, mappedto_6) 00000000 stack dq ? 00000008 stack_50 dq ? 00000010 length dd ? ; base 2 00000014 custom_stack ends커스텀 스택은 요로코롬 생겼고이런식으로 opcode들을 쭉쭉 분석해주면 된다.from pwn import * ​ #contex.. 더보기
2019 d3ctf ezfile 2019 d3ctf ezfile취약점은 총 2개이다. ( + oob bug)먼저, deleteNote에서 UAF가 발생한다.glibc 2.27 이므로, 이를 이용하여 tcache dup 공격을 진행할 수 있다.그리고 encryptNote에서 stack overflow가 발생한다.0x60 크기의 seed에 0x68만큼 입력받아 ret overwrite가 가능하다.특이한 점은, 마지막 함수 doSomeThing에서 seed, index를 인자로 받기 때문에, rdi, rsi 조작이 가능하다는 점이다.exploitexploit의 대략적인 과정은 다음과 같다.tcache dup -> chunk overlappingunsortedbin free -> partial overwrite(1/16) -> stdin->f.. 더보기
2019 holyshield babyheap 2019 holyshield babyheapmalloc mmaped large chunkoob double free ld.so arealeak libc && overwrite _rtld_global + 3840(dl_fini)shellfrom pwn import * ​ #context.log_level= 'debug' ​ e = ELF('babyheap') #s = process(e.path, env={'LD_PRELOAD': './libc.so.6'}) s = process(e.path) l = ELF('/lib/x86_64-linux-gnu/libc.so.6', checksec=False) #l = ELF('libc.so.6', checksec=False) ​ ru = lambda x: s.recvu.. 더보기
2018 0ctf final baby 2018 0ctf final babydouble fetch 취약점이 발생하는 모듈이 존재한다.리눅스 커널에서의 race condition이라고 생각하면 된다.user-space binary보다 double fetch 취약점이 리눅스 커널상에서 많이 발생하는 이유는 context switch의 유무 차이인 것 같다.일단 모듈은 굉장히 작으며, 간단하게 살펴보면 다음과 같다.flag의 주소를 출력해준다.난잡한 조건문을 거친 뒤 *input == flag라면 flag를 출력해준다.즉, input에 얻은 flag의 주소를 넣어줘야 한다.여기서 __chk_range_not_ok 함수를 살펴보자.첫 번째 인자와 두 번째 인자를 __CFADD__를 통해 더하는데, 만약 첫 번째 인자에 커널 주소, 즉 flag의 주소.. 더보기
2018 bctf three 2018 bctf three제한된 횟수의 heap 문제의 경우, overlapping chunk가 굉장히 중요함을 깨달음.houseofatum에서 show 사라지고 한 번 더 할당할 수 있다.main_arena 4bit brute forcing해서 stdout magic leak하고 __free_hook 덮어서 풀면 된다.from pwn import * #context.log_level= 'debug' ​ e = ELF('three') s = process(e.path, aslr=False) l = ELF('/lib/x86_64-linux-gnu/libc.so.6', checksec=False) #l = ELF('libc.so.6', checksec=False) ​ ru = lambda x: s.recv.. 더보기
2018 bctf houseofatum 2018 bctf houseofatum신기한 기법이 사용된 문제를 발견해서 한 번 풀어봤다.glibc 2.27 heap 문제이며 작은 바이너리이다.간단하게 분석을 해보자.alloc, edit, delete, show 총 4개의 메뉴가 존재한다.alloc0x48로 size가 고정되어 있고, 총 2개의 heap만 할당할 수 있다.editoob 검사 ,dangling pointer 검사 후 chunk를 수정할 수 있다.deleteuaf가 발생한다. 다만 특별한 점은, 사용자가 dangling pointer를 만들지 안만들지 결정할 수 있다는 점이다.showoob 검사, dangling pointer 검사 후chunk를 출력할 수 있다.exploitchunk를 2개밖에 만들지 못하고, show 메뉴로 tcach.. 더보기
2019 d3ctf new_heap 2019 d3ctf new_heapsolver가 4명밖에 없었던 괴랄한 glibc 2.29 heap 문제다.작은 바이너리라 일단 간단하게 문제의 feature를 살펴보면 다음과 같다.alloc, free, exit 총 세 메뉴가 존재한다.alloc총 18개의 heap을 할당할 수 있다.0x78 이하의 size만 할당할 수 있다.delete명백하게 uaf가 발생한다. double freeexitgetchar로 굳이 사용자에게 허락을 받는다.setbuf가 되어있지 않아 heap에서 buffering이 일어난다.exploitglibc 2.29 환경이므로 tcache double free가 불가능하다.때문에 18개의 heap 개수 제한에서 fastbin을 이용하여 exploit을 하는 것도 불가능하다.getch.. 더보기