본문 바로가기

분류 전체보기

2014 codegate angry_doraemon angry_doraemon 2014 codegate angry_doraemon1번 메뉴에 쉘 실행 명령이 존재한다.4번 메뉴에서 오버플로우가 발생한다. 하지만 rop는 불가능, canary 존재5번 메뉴 First Attack에서함수 포인터 buf에 read로 4바이트를 받고 있고 밑에서다시 buf에 4바이트를 입력 받고 buf()를 실행시켜 준다.(HIBYTE는 매크로인데 상위 1바이트를 의미함, 즉 \x08로 시작하면 안됨 코드섹션, 데이터섹션 힙..등등으로 점프할 수 없다.) leak을 찾아야 rop를 하는데.. 여기서 좀 헤맷다.read는 맨 뒤에 NULL을 안 넣기 때문에 밑에 sprintf, write에서 leak 발생여기서 canary leak을 해야 하는데 canary는 하위 1바이트가 '.. 더보기
2013 hdcon luckyzzang luckyzzang 2013 hdcon luckyzzang바이너리는 소켓 통신 프로그램이며 while 문으로 accept를 기다리고 fork 한다. fork한 자식 프로세스는 func 함수를 실행시킨다. funcfunc 함수에서는 recv 함수로 값을 입력받는데,rand % 100 + 1025 만큼 입력받는다. 즉 buf에서 오버플로우가 발생한다. 풀다보니 왠지 익숙한 느낌이 들었었는데 BoB 과제였다.. 어쨋든 리버스 커넥션이나 리다이렉트, dup2 함수를 이용한 방법이 있을 것 같다.NX가 걸려있는 상황에서의 BOF라 ROP를 시도하면 해결될 것 같은데 문제는 BOF 길이가 100% reliable한 payload를 만들어주지 않는 길이인 것이다. 이 때문에 libc_base를 구하는 첫 번째 sta.. 더보기
2016 whithat malloc malloc 2016 whitehat mallocStack Leak, malloc, free, modify를 자유롭게 할 수 있다. mallocsize 32라면 malloc(32)를 해준다.즉, size를 64로 넣으면 malloc(32)가 된다.modify33바이트만큼 buf에 입력을 받고 heap에 memcpy를 통해 복사한다. 바로 입력을 안받고 이렇게 하는 이유를 모르겠다.. free, list, exit는 그냥 이름대로의 기능이다.32바이트 길이니끼니 fastbin을 떠올릴 수 있겠고 자유로운 할당과 해제가 가능하고 우리가 입력한 size 변수가 스택에 기록되니 fastbin dup into stack이 가능할 것 같다. 이걸 몰라서 헤매고 있었는데 이 flag를 읽어주는 함수가 존재한다. fa.. 더보기
2015 codegate yocto yocto 2015 codegate - yoctoglob 전역 변수에 80바이트 입력을 받는다.그리고 밑에서 v2로 점프하는데 이 부분에 대한 어셈을 보면push eax, push edx를 하고 점프를 하는데 eax와 edx를 보면ebp+var_14, ebp+var_C를 넣고 점프를 한다. 이에 대한 값을 확인해 보면atoi의 반환 값이 들어간다는 것을 알 수 있다.즉, ebp+var_14에는 atoi(glob)의 반환 값이,ebp+var_C에는 atoi(v0+1)의 값이 들어가는 것이다. payload를 입력할 전역변수 glob과 값을 push하고 jmp할 수 있는 구문은 RTDL(Return To Dynamic Linker)을 가능하게 한다. RTDL 과정을 간략히 설명하면reloc_offset, l.. 더보기
pwnable.kr alloca - 80pt 보호되어 있는 글입니다. 더보기
pwnable.kr loveletter - 50pt 보호되어 있는 글입니다. 더보기
unsorted bin free 동작.. danglingPtr danglingPtr.cfree(qlist[1]) ( main+188 ) breakpoint qlist[1] heap status before freeqlits[1] heap status after free-> 128 (0x80) 만큼 할당한 후 free 한다면 unsortedbin으로 들어간 후 fd와 bk가 main_arena+88 영역이 되어야 할건데 그냥 사라져버린다?? test.ca (main+78) breakpoint a heap status before freea heap status after free-> unsortedbin에 들어간 후 mainarena+88 영역이 잘 들어가 있다. 즉 데이터 재사용이 불가능하다. 위 두 예제를 봤을 때 prev_size와 inus.. 더보기