eggshell3 해커스쿨 F.T.Z Level 17 level 17 로그인 후 hint를 본다. level 16 hint 코드에서 shell 함수가 빠지고 setreuid는 main으로 들어오게 됐다. 이렇게 되면 level 16처럼 shell 함수의 주소도 없고 level 14처럼 글자를 대조하는 것도 아니고 level 15처럼 주소를 넣는 것도 할 수 없다. 여기서 해야 하는 건 setreuid가 실행되고 쉘을 실행해야 level 18의 uid를 얻을 수 있다는 것이다. 일단 gdb를 확인해 본다. main+3에서 0x38(56)byte 확보하고 main+6에서 0x8048490 주솟값을 ebp-16에 저장한다. main+57에서 ebp-16을 eax에 저장하고 eax를 call 해서 call 함수를 불러온다. 코드는 다르지만, 프로그램의 메커니즘은 .. 2020. 2. 27. 해커스쿨 F.T.Z Level 13 level 13 로그인 후 hint를 본다. level 11, level 12와 비슷하다. BOF에 취약한 strcpy 함수가 있다. hint를 분석하면 위와 같다. strcpy는 복사할 때 크기를 검사하지 않기 때문에 BOF에 취약하다. 이제 BOF를 일으켜야 하는데 level 11과 level 12와 다른 점은 변수 i로 BOF가 일어나는지 확인하는 보안코드라고 볼 수 있다. 하지만 너무 단순한 보안코드이다. gdb로 attackme를 분석해 프로그램이 어떻게 돌아가는지 본다. 처음 0x418(1048)byte만큼 공간을 확보하고 ebp-12에 0x1234567을 저장한다. 확보한 공간보다 -12에 변수 i를 저장한다고 생각하면 쉽다. 더보기 그렇다면 1036byte 이후에 변수 i가 저장된다. 변수.. 2020. 2. 24. 해커스쿨 F.T.Z Level 11 BOF(Buffer OverFlow) level 11 로그인 후 hint를 본다. 간단하게 보자면 256byte 크기의 문자열을 받는다. level 12 권한을 부여하고 문자열은 두 번째 인자로부터 받아온다. 받아온 인자를 출력한다. 간단하게 보면 이렇게 분석할 수 있다. hint 코드에는 두 개의 취약점이 존재한다. 첫 번째는 Break Time인 BOF,GDB기초에서 BOF(버퍼 오버플로) 취약 함수에서 말했던 "strcpy"함수의 BOF 취약점이다. 두 번째는 "printf( str );"에서 포맷 스트링 버그가 발생할 수 있다. 포맷 스트링 버그(Format String Bug)는 더 어려운 내용이고 뒤에서 다루기 때문에 링크로 대체 하고 BOF를 이용한다. 어느 정도 파악해야 할 것은 끝난 것 같다. 일단 프로그램을 실행할 때 두 .. 2020. 2. 23. 이전 1 다음