본문 바로가기

해커스쿨

해커스쿨 Level17 Hackershcool level17 = )   해커스쿨 FTZ 레벨17 [BOF]   #include <stdio.h> void printit() { printf("Hello there!\n"); } main() { int crap; void (*call)()=printit; char buf[20]; fgets(buf,48,stdin); setreuid(3098,3098); call(); }   17번 문.. 더보기
해커스쿨 Level16 Hackershcool level16 = )   해커스쿨 FTZ 레벨16 [BOF]       코드를 살펴보면 일단 쉘을 실행하는 함수와 printit이라는 함수가 있고 크기가 20인 배열과 취약점이 있는 fgets함수가 있다.     프로그램을 실행시켜보니 깔끔하게 printit함수를 출력시키고 끝나버린다. 하지만 printit함수가 아닌 shell함수의 주소가 들어간다면 쉘이 떨어지게 될 .. 더보기
해커스쿨 Level15 Hackershcool level15 = )   해커스쿨 FTZ 레벨15 [BOF]       15번 문제는 14번 문제와 비슷하지만 check 변수에서 포인터를 이용하고 있다는 점이 다르다.     전체적으로는 14번문제와 비슷하지만 포인터를 사용하고 있기 때문에 이번에는 0xdeadbeef란 문자열 대신 0xdeadbeef를 가리키는 주소를 넣어주면 된다. 버퍼 중간에 deadbeef란.. 더보기
해커스쿨 Level14 Hackershcool level14 = )   해커스쿨 FTZ 레벨14 [BOF]       이번에는 fgets함수로 글자수 길이를 45바이트로 제한하고 있지만 buf배열의 크기가 20이므로 BOF가 발생할 수 있다. 그리고 check변수의 값이 0xdeadbeef라는 값이 들어가야 setreuid와 쉘이 뜨게 되어있다. 바로 쉘을 얻을 수 있으니 에그쉘 없이 BOF만을 이용해 check에 deadbeef라는 .. 더보기
해커스쿨 Level13 Hackershcool level13 = )   해커스쿨 FTZ 레벨13 [BOF]       이번 문제는 11, 12번과 역시 같은 구조이지만 변수 i의 값이 0x1234567이 아니라면 메시지 출력 후 프로그램이 종료되어버리는 특징이 있다. 따라서 이번에는 변수 i 부분에는 01234567이라는 값을 넣어주고 나머지 부분은 dummy로 오버플로우 시켜서 ret값에 도달하면 .. 더보기
해커스쿨 Level12 Hackershcool level12 = )   해커스쿨 FTZ 레벨12 [BOF]       Level 12문제도 Level11처럼 hint를 보면 setreuid함수와 gets함수로 문자열을 입력받는 것을 볼 수 있다. 12번 문제도 11번처럼 gdb로 disas main해본 결과 다음과 같았다.     ①을 보면 11번 문제와 마찬가지로 스택에 16진수로 108만큼 공간을 할당.. 더보기
해커스쿨 Level11 Hackershcool level11 = )   해커스쿨 FTZ 레벨11 [BOF]         Level 11로 로그인을 한 뒤 파일 목록을 보니 attackme라는 파일에 level12의 setuid가 걸려있는 것을 확인하고 hint파일을 열어보니 attackme의 소스를 확인할 수 있다. setuid가 걸려있는 파일이 실행 중인 상태에서는 해당 파일의 소유자의 권한이 주어지므로 이를 이용해 lev.. 더보기