목록분류 전체보기 (285)
tmxklab
1. 문제확인 1) 사용자 및 패스워드 : level15 / guess what 2) 파일확인 3) hint 코드 설명 #include main() { int crap; int *check; char buf[20]; fgets(buf, 45, stdin); if(*check==0xdeadbeef) { setreuid(3096, 3096); system("/bin/sh"); } } Level14와 구조는 비슷하지만 check변수가 포인터 변수임 2. 접근방법 1) attackme 디버깅 level14와 달리 level15에서는 check가 포인터 변수로 사용하므로 바로 [ebp-16]과 0xdeadbeef랑 비교하는 것이 아니라 [ebp-16]의 값을 주소로 사용하여 한번 더 들어가게 됨 if문에 0xde..
1. 문제확인 1) 사용자 및 패스워드 : level14 / what that nigga want? 2) 파일확인 3) hint 코드 설명 #include #include main() { int crap; int check; char buf[20]; fgets(buf, 45, stdin); if(check==0xdeadbeef) { setreuid(3095, 3095); // level15의 ruid, uid값으로 변경 system("/bin/sh"); // } } 프로그램 실행 후 fgets함수를 통해 사용자의 입력을 받을 수 있음(stdin) buf변수의 20bytes보다 더 큰 입력 값을 넣을 수 있음 → bof 취약점 존재 2. 접근방법 1) attackme 디버깅 함수의 프롤로그(push ebp..
1. 문제확인 1) 사용자 및 패스워드 : level13 / have no clue 2) 파일확인 3) hint 코드 설명 #include main( int argc, char *argv[] ) { long i=0x1234567; char buf[1024]; setreuid(3094, 3094); // "./attackme [인자값]"인 경우 argc는 2, argv[0]은 "./attackme", argv[1]은 "인자값" // 즉, 인자 값을 buf에 복사 if(argc > 1) strcpy(buf, argv[1]); // 이미 0x1234567로 초기화된 i값이 아니라면 if문 실행 // kill함수의 첫 번째 인자는 프로세스 id, 두 번째 인자는 프로세스id if(i!=0x1234567){ pr..
1. 문제확인 1) 사용자 및 패스워드 : level12 / it is like this 2) 파일확인 3) hint 코드 설명 #include #include #include int main( void ) { // char형 str변수 256바이트 할당 char str[256]; // 실제 사용자 ID와 유효 사용자 ID 3093로 설정 setreuid(3093, 3093); printf("문장을 입력하세요.\n"); // 사용자 입력을 통해 str변수에 저장 gets(str); printf("%s\n", str); } 프로그램 실행시에 gets()를 통해 사용자의 입력을 받을 수 있음 str배열의 크기(256bytes)보다 더 큰 입력 값을 넣을 수 있음 -> bof취약점 존재 2. 접근방법 1) a..
1. 문제 확인 1) 사용자 및 패스워드 : level11 / what!@#$? 2) 파일 확인 3) hint 코드 설명 #include #include // argc, argv를 통해 인자 값을 받아 실행 int main( int argc, char *argv[]) { // char형 str변수 256바이트 할당 char str[256]; // 실제 사용자 ID와 유효 사용자 ID 3092로 설정 setreuid(3092, 3092); // argv[1]인자 값을 str변수에 복사 strcpy(str, argv[1]); printf(str); } - 프로그램 실행 시 인자 값을 받아 str배열에 복사한 뒤 출력해주는 코드 - strcpy()에서 str배열의 크기(256bytes)보다 더 많은 값을 ar..