ftz

ftz

[ftz] level14

문제분석 & 풀이코드 분석1. crap, check, buf[] 를 선언2. fgets()를 통해 buf에 45바이트의 입력값을 받는다.3. check 변수 값이 "0xdeadbeef" 이면 level15의 셸을 얻어낼 수 있다. buf의 20바이트를 넘어선 45바이트를 입력 받고 있음으로 버퍼오버플로우가 발생할 수 있다. 다만, check 변수를 통해 셸권한을 얻어낼 수 있음으로 check의 값을 "0xdeadbeef"로 설정하도록 페이로드를 완성해 BOF를 시도하는 것이 문제의 핵심이 될 것이다. 코드를 보면 buf 상단에 check가 위치하는 것을 알 수 있다. 하지만 그 사이에 dummy가 얼마나 있을지 모르기 때문에 GDB로 직접 디버깅해서 확인해야한다. attackme를 tmp 폴더로 복사했다..

ftz

[ftz] level13

문제분석 & 풀이코드 분석1) i, buf[1024]를 선언2) setreuid()를 통해 level14의 권한으로 설정3) argv[1]을 통해 입력받은 값을 buf에 복사4) 만약, i의 값이 바뀔 경우 BOF로 간주하고 프로그램 강제종료 이전 문제와 다른점은 변수 i를 통해 BOF가 발생하는지 안하는지를 체크하고 있다는 점이다. 이것을 우회하기 위해 변수 i가 바뀌지 않는 선에서 페이로드를 만들어서 BOF를 진행해야 할 것 같다. attackme를 tmp 폴더로 복사하여 GDB로 디버깅했다. main 시작 후에 0x418 만큼 스택공간을 할당한다. 0x418 = 1048임으로 [buf 1024바이트] + [더미 24바이트]가 포함됐다는 것을 알 수 있다. 그러나 더미 24바이트안에는 변수 i의 공간..

ftz

[ftz] level12

문제분석 & 풀이○ 코드 분석1. str[256] 선언2. setreuid()를 통해 level13 권한으로 설정4. gets()로 사용자에게 값을 입력받는다.  level11번과 마찬가지로 입력값에 대한 검증을 진행하지 않고 있기 때문에, 버퍼오버플로우 문제라는 것을 직감할 수 있다. 그러나 level11과의 차이점은 level11의 경우 argv[1]을 통해 입력값을 받았지만 이번 문제는 프로그램 시작 후에 입력값을 받고 있다. 따라서 페이로드를 작성할 때 파이프를 사용해야 할 것 같다. 문제로 돌아와서, 페이로드 작성 시를 제외해서는 level11번 문제와 동일하므로 똑같이 진행해보도록 하겠다. 먼저, str[256] 부터 ret 까지의 거리를 알아내기 위해서 attackme를 디버깅해야한다. 따라..

ftz

[ftz] level11

문제분석#include #include int main( int argc, char *argv[] ){ char str[256]; setreuid( 3092, 3092 ); strcpy( str, argv[1] ); printf( str );}○ 코드 분석1) str[256] 선언2) setreuid()를 통해 level12의 권한으로 설정3) argv[1]을 받고 str[256]에 복사4) str[256] 출력 level12 권한으로 설정 후 argv[1]을 str[256]에 복사하고 있다. 복사하는 과정에서 argv[1]에 대한 검증이 없다. 따라서 argv[1]을 이용해서 버퍼 오버플로우 공격을 수행할 수 있다. 디렉토리의 파일들을 확인해보면 attackme라는 level12의 setuid ..

ftz

[ftz] level10

문제분석 & 풀이공유 메모리를 이용한 취약점으로 패스워드를 알아내는 문제다. ○ 공유메모리여러 프로세스에서 동시에 접근할 수 있는 메모리를 뜻한다. 즉, 2명의 사용자가 대화방을 통해 대화를 한다고 했는데, 대화방이 공유 메모리이고 사용자가 프로세스라고 생각하면 될 것 같다. 우리가 해야할 것은 key_t가 7530인 공유 메모리에 접근하여 내용을 가져오는 것이다.  먼저, 필자는 공유메모리와 관련된 함수에 대해 조사했다. ○ 공유메모리 관련 함수1) shmget()설명 : 공유메모리를 생성하거나 사용할 수 있는 함수이다.형식 : int shmget(key_t key, int size, int shmflg);- key_t key : 공유메모리의 key 값- int size : 공유 메모리의 크기반환 : ..

ftz

[ftz] level9

문제분석 & 풀이bof 코드를 알려주고 있다. buffer overflow 취약점을 실습하는 첫번째 문제다. ○ 코드 분석1. buf2[10], buf[10] 배열을 선언한다.2. fgets()를 이용하여 사용자에게 입력을 받아서 40바이트 만큼 buf[]에 저장한다.3. strncmp()를 통해 buf2[]의 앞 두자리가 "go"인지 확인하고 맞으면 level10의 password를 알려준다. 사용자가 입력한 값을 buf에 저장하는데, 우리가 값을 넣고 싶은 배열은 buf가 아닌 buf2다. 그렇다면 어떻게 buf2에 "go"를 넣을 수 있을까? 앞에서 언급했듯이 buffer overflow를 이용하면 된다!. ○ BOF (buffer overflow)메모리에 생성된 버퍼 크기보다 더 많은 양의 입력값..

keyme
'ftz' 카테고리의 글 목록 (2 Page)