본문 바로가기

system/writeup

pwnable.tw tcache tear 보호되어 있는 글입니다. 더보기
pwnable.tw seethefile 보호되어 있는 글입니다. 더보기
2015 rctf welpwn welpwn 2015 rctf welpwnputs로 leak이 안돼서 어리둥절 하고 있었는데 그 이유는got 값 1바이트가 \x00이기 때문이었다.. 주의하십쇼 main에서 0x400만큼 입력을 받고 echo 함수의 버퍼에 복사해 주는데 여기서 오버플로우가 일어난다.근데 BYTE 형태로 조건문이 되어있어 한 바이트만 ret을 덮어씌울 수 있다. main의 buf가 바로 아래에 있어 이를 이용하여 rop를 때릴 수 있다. from pwn import *​#context.log_level = 'debug'​e = ELF('./welpwn')s = process(e.path)l = ELF('/lib/x86_64-linux-gnu/libc.so.6')​ru = lambda x: s.recvuntil(x)sl =.. 더보기
2016 belluminar remuheap remuheap 2016 belluminar remuheap512 ~ 4096 사이즈로 malloc이 가능하다. ubuntu 16.04 LTS의 fgets, scanf 등은 입력 시 heap에 allocate를 한다. ( free하지 않고 계속해서 재사용함. )때문에 이를 이용하여 위 chunk에서 UAF를 발생시킬 수 있다. unsorted bin에서 UAF가 일어나고 free할 수 있으면 unsorted bin attack이 가능하다. unsorted bin의 bk를 덮고자 하는 주소 - 0x10으로 설정해 주면 unsorted bin의 unlinking 과정을 통해 덮고자 하는 주소에 &main_arena.top의 주소가 들어가게 된다. 그 후, 덮은 변수를 통하여 main_arena.top~를 변.. 더보기
2014 31c3 mynx mynx 2014 31c3 mynxasciiart 구조체와 comment 구조체의 모양은 위와 같다. (data 부분은 array임. 편의상 db로 만듦) 간단하게 프로그램 분석을 해보면첫 번째 hex값이 0x49라면 asciiart0x37이라면 comment로 판단한다.num은 index의 역할을 하며총 세 가지의 filter가 filter_ptr에 저장된다.art_data, comment_data는 우리가 입력한 문자열이 들어가는 곳이다. filter_ptr을 3번 메뉴 add_filter에서 실행시켜주므로 filter_ptr을 조작하면 풀리는 문제같다. asciiart data를 입력받는 구간이다.256바이트를 잘 맞춰서 입력받고 있다. 근데 comment data를 입력받는 곳을 보면 1바이트 오.. 더보기
nullcon hackim 2019 easy-shell easy-shell nullcon hackim 2019 easy-shellsandox 관련 문제와 멀어져 있던 나를 다시 가까워지게 만들어준 고마운?! 문제이다.대회 당시에는 풀지 못했어서 라업을 보고 다시 풀어본다. init_array에 prctl이 걸려있다.PR_SET_SECCOMP, SECCOMP_MODE_FILTER로 prctl이 걸려있으니 fprog를 디버깅 해보자. seccomp 디버깅 관련해서 아주 좋은 툴을 david942j님이 개발해 두셨다.https://github.com/david942j/seccomp-tools strace로 바이너리를 실행시켜보면위와 같이 prctl이 걸리는걸 확인할 수 있는데 이를 ptrace syscall을 이용하여 잡아내 disassemble 해주는 툴인가 보.. 더보기
nullcon hackim 2019 tudutudututu tudutudututu nullcon hackim 2019 tudutudututu일단 todo의 구조는 위와 같다. 처음 만들 때 name의 공간을 strdup으로 할당하며나중에 desc를 쓸 때 malloc으로 desc의 공간을 할당한다. desc를 쓰는 함수의 윗부분이다.처음에 이미 할당한 desc가 존재하면 free를 시킨다. 근데 여기서 length가 0xFF 이상이라면 "Too big!"을 출력하고 return한다.원래 루틴이라면 free 후 malloc을 하여 다시 todo + 8에 저장시켜줘야 하지만 length가 0xFF 이상이라면 그러지 않는다.dangling pointer 상황이 발생한다. 이를 이용하여 모든 exploit을 진행할 수 있다. print_todo 함수에서 name과 de.. 더보기
nullcon hackim 2019 babypwn babypwn_nullcon nullcon hackim 2019 babypwn0x64 크기의 heap을 만든 후 50 크기만큼 heap에 입력을 받고 이를 출력해 준다. 위 printf 출력에서 FSB가 발생한다. 하지만 이 FSB 만으로는 leak밖에 할 수 없다. heap에서 일어나는 FSB기 때문이다. 또, dtor(fini) 부분을 조작하여 double stage FSB를 할 수 있을거라 생각했지만 FULL RELRO이기 때문에 이도 불가능했다. 위에 코인 수를 입력하고 그만큼 stack에 입력을 받는다. 하지만 stack의 주소를 알아낼 방법이 없어 이를 이용하여 FSB로 ret address를 조작할 수 없다. 근데 조건문 부분을 보면 (char)v6이다. 즉, ASCII 범위를 넘어가면 in.. 더보기