티스토리 뷰


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글자










Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday