티스토리 뷰
Buffer Overflow
환경변수 이용 공격
[환경 요약]
OS |
Kali 1.0 |
파일 |
/tmp/test2.c |
ASLR |
X (echo 0 > /proc/sys/kernel/randomize_va_space) |
N/X |
X (gcc -o test2 test2.c -fno-stack-protector -z execstack -fno-builtin -mpreferred-stack-boundary=2) |
취약점 |
strcpy 함수 이용 |
환경변수를 이용한 공격은 buffer 공간이 shellcode보다 작을 때 사용 가능하다.
예를 들어 buffer가 10byte일 때, shellcode를 그대로 argv[1]에 삽입하면 RET 주소를 넘어가 원하는주소를 삽입 할 수 없다.
따라서 길이가 긴 shellcode를 환경변수에 저장하여 환경변수의 시작주소만 입력하여 공격한다.
|
[그림 – test2.c 소스]
/tmp/test2.c는 buf 공간이 10byte이다.
Gdb test2 분석 결과는 다음과 같다.
|
[그림 – test2 gdb 분석1]
위와 같은 방식으로 buf가 10byte이기 때문에 “a”x10 + SFP(4byte) + RET(4byte)를 확인하기 위해 “CCCC” 위치인 0x63636363을 확인 할 수 있다.
환경변수에 shellcode를 삽입하고 시작주소를 찾기 위해 아래와 같은 프로그램은 작성한다.
|
[그림 – /tmp/addr1.c 소스]
환경변수 ‘attack ‘에 쉘코드를 삽입하고 시작주소를 env로 찾을 수 있다.
|
[그림 – shellcode 주소 확인]
이제 RET 위치에 shellcode 시작주소인 0xbfffff44를 덮어쓰면 된다.
*최종 공격
/tmp/test2 `python –c ‘print “a”*10+”bbbb”+”\x44\xff\xff\xbf”’`
|
[그림 24 – 환경변수 공격 성공 확인]
정확한 공격을 하기 위해서는 환경변수 주소 값을 찾을 때 취약점 프로그램명 길이와 주소 찾는 프로그램(addr1)의 길이가 같아야 한다. 파일명을 다르게 했다면 취약한 프로그램 파일명 길이와 같이 복사하여 실행하면 정확한 주소를 찾을 수 있다.
ex) test2 = 5글자
addr1 = 5글자
'Hacking > System Hacking' 카테고리의 다른 글
Format String Bug 공격 (0) | 2017.03.08 |
---|---|
PLT&GOT 공격 (DEP, ASCII Armor 우회, PLT&GOT Overwrite 공격) (1) | 2017.03.08 |
RTL 공격(DEP 우회, 공유 라이브러리를 이용하여 공격) (0) | 2017.03.08 |
Buffer Overflow Shell Code 이용 공격 (0) | 2017.03.08 |
[System Hacking] ShellCode 제작 (0) | 2017.02.25 |