메모리 보호 기법 확인 1. ASLR(Address Space Layout Randomization ASLR의 존재 여부는 Process의 정보를 담고있는 /proc/[PID]/maps 라는 파일을 확인. 만일 ASLR이 걸려있다면, maps 파일을 확인할 때마다 Stack이나 Library의 주소 영역이 매번 변함. 2. SSP(Stack Smashing Protector) 결과로는 SSP는 존재하지 않는다. 3. NX bit(Never eXecute bit) NX bit가 걸려있어 Stack 에서의 임의의 코드 실행이 불가능하다. 4. PIE(Position Independent Executable) 결과로는 PIE는 존재하지 않는다. 5. ASCII-Armor 결과로는 ASCII-Armor가 걸려있..
Free Training Zone level20 풀이 cat 를 사용하여 hint 출력 코드를 살펴보면 fgets에서 79로 입력 사이즈를 제한 함으로 버퍼오버플로우 로는 접근할 수 없다. printf 를 살펴보면 형식 지정자 없이 사용함으로 pritnf("%s", bleh);처럼 동작 될것을 예상 할 수 있다. 위와 같이 형식 지정자를 이용해서 프로그램을 실행 시켜보면 %x 3번째 이후 AAAA의 값이 출력되는 것을 알 수 있다. 이와같이 Format String Bug를 이용하여 level21 계정에 접근하면 되겠다. dotrs 주소 확인 return 주소를 확인하기 위해 gdb로 main 함수를 disassembler 하려 했으나, 아래와 같이 접근이 막혀 있었다. 이때 사용할 수 있는 것은 .do..
Free Training Zone level19 풀이 1. cat을 사용하여 hint 출력 코드를 살펴보면 buf의 오버플로우를 이용하여 return 주소에 접근하여 shellcode를 실행시키면 level20 shell에 접근할 수 있다. 2. attackme 복사 gdb 분석을 위해 쓰기권한이 있는 tmp 디렉터리로 attackme 파일을 복사한다. 3. gdb 분석 위 disassembler 를 스택으로 표현하면 아래와 같다. 4. shellcode 환경변수 등록 및 주소 찾기 export 명령을 사용하여 41byte shell code 환경변수에 등록한다. 환경변수 shellcode의 주소를 출력하는 코드를 위와 같이 작성하여 주소를 확인한다. 5. 페이로드 코드 작성 위 와같이 스택을 토대로 4..
Free Training Zone level18 풀이 1. cat을 사용하여 hint 출력 코드를 살펴보면 check 변수에 0xdeadbeef 값을 넣으면 shellout 함수가 호출되어 level19 shell에 접근이 가능하다 하지만 check 변수가 string 버퍼보다 이후에 선언되어 버퍼 오버플로우로는 접근이 불가능해 보인다. 대신 read 함수로 1byte씩 입력 받는 값이 0x08이면 count 변수가 마이너스가 되어 string 버퍼 주소의 마이너스 주소에 접근 할 수 있다. 2. attckme 파일 복사 gdb 분석을 위해 쓰기권한이 있는 tmp 디렉터리로 attckme 파일을 복사한다. 3. gdb 분석 string 버퍼는 아래와 같이 ebp-100에 위치하였다. check 변수는 아..
Free Training Zone level17 풀이 1. cat를 사용하여 hint 출력 level16과 유사하지만 shell 함수가 빠져있다. buf 오버플로우를 이용하여 *call 포인터 변수에 환경변수에 등록한 shellcode 주소를 넣어서 shellcode를 실행 시켜 level18 shell에 접근할 수 있다. 2. attackme 복사 gdb 분석을 위해 쓰기권한이 있는 tmp 디렉터리로 attackme 파일을 복사한다. 3. gdb 분석 위 disassembler 를 스택으로 표현하면 아래와 같다. 4. shellcode 환경변수 등록 및 주소 획득 export 명령을 이용하여 41byte shellcode를 환경변수에 등록한다. 환경변수 shellcode 주소를 획득하는 코드를 작성하여..
Free Training Zone level16 풀이 1. cat를 사용하여 hint 출력 코드를 살펴보면 level15와 유사하며 buf 오버플로우를 이용하여 *call 포인터 변수에 shell 함수 주소를 전달하여 shell 함수에서 호출되는 system함수로 level16 shell 에 접근할 수 있다. 2. attackme 복사 attackme 파일을 쓰기권한이 있는 tmp 디렉터리로 복사한다. 3. gdb 분석 위 disassembler 코드를 스택으로 표현하면 아래와 같다. 다음은 shell 함수의 시작 주소이다. 4. 페이로드 코드 작성 *call 변수에 shell 시작 주소인 0x080484d0을 전달하면 level17 Password를 획득할 수 있다.
Free Training Zone level15 풀이 1. cat 명령을 사용하여 hint 출력 level14 문제와 유사하며 buf오버플로우를 이용하여 *check 포인터 변수에 0xdeadbeef 가 위치한 주소를 넣어주면 level15 shell에 접근할 수 있다. 2. attackme 복사 위 와 그림과 같이 쓰기 권한이 있는 tmp 디렉터리로 attackme 파일을 복사한다. 3. gdb 분석 위 disassembler를 스택으로 표현하면 아래와 같다. 위 그림의 빨간 박스에서 0xdeadbeef가 위치한 주소는 0x080484b0 이다. 실제로는 2byte 더한 주소에 위치에 있다. 아래그림을 참고한다. 4. 페이로드 코드 작성 0xdeadbeef 가 위치한 0x080484b2 주소를 *che..
Free Training Zone level14 풀이 1. cat 명령을 사용하여 hint 출력 코드를 살펴보면 buf의 오버플로우를 이용하여 check 변수에 0xdeadbeef 를 넣으면 level15의 shell에 접근이 가능해 보인다. 2. attackme 복사 쓰기 권한이 있는 tmp 디렉터리로 attackme 파일을 복사한다. 3. gdb 분석 위 disassembler 코드를 스택으로 표현하면 아래와 같다. 4. 페이로드 코드 작성 위 스택을 근거로 페이로드를 작성하여 level15 Password를 획득할 수 있다.