ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Buffer Overflow-1
    Security/System 2018.01.27 21:19

    - 실습은 RedHat에서 진행한다.

    - 2편으로 넘어가기 전에 공격이 어떤식으로 진행되는지 간단하게 살펴본다. 자세한건 2편부터 소개한다.


    [실습 1]

    - 우선 아래와 같은 코드를 bof.c라는 이름으로 작성하여 분석해본다.


    - 작성한 bof.c파일을 컴파일해준다. (gdb를 사용할 것이기 때문에 꼭 -g옵션을 넣어줘야 한다.)


    - gdb를 실행한다. (-q 옵션은 gdb를 처음에 실행할때 나오는 문구를 보여주지 않는 옵션이다.)


    - 브레이크 포인트를 걸기 전에 소스 코드를 한번 확인한다.


    - strcpy함수가 6번째 줄에 위치해 있으므로 6에 브레이크 포인트를 걸어준다.


    - AAA인자를 넘겨 실행한다.


    - argv[1]에 넘겨준 AAA가 잘 들어갔는지 확인한다.


    - buffer을 확인해보니 아직 strcpy을 실행하지 않은 상태이기 때문에 쓰레기 값이 들어가있다.

    - 다음 명령을 실행한다.

    - esp값을 확인한다.


    - 스택에 어떤 값이 들어가 있는지 확인한다.

    - buffer는 12바이트가 할당이 되어서 AAA가 잘 들어가져 있고 그 다음 EBP, RET가 보인다.

    <하위>

    [buffer] -> 빨간색

    [buffer] -> 빨간색

    [buffer] -> 빨간색

    [buffer] -> 빨간색

    [SFP] -> 파란색

    [RET] -> 초록색

    <상위>


    - 이번에는 인자값을 buffer의 사이즈보다 더 크게 주면 어떻게 되는지 확인해본다.

    buffer의 공간, EBP를 넘어서 RET주소까지도 인자값으로 덮어 씌울 수 있다는 것을 알 수 있다.


    - 나머지 명령어도 실행(continue)하고 gdb를 종료(quit)한다.


    [실습 2]

    - 우선 [실습 1]에서 만든 bof파일에 root권한으로 4755권한을 준다.


    - eggshell.c파일을 컴파일해준다.

    eggshell.c는 관리자 권한을 획득하는 셸코드이다.


    - test00계정으로 bof파일을 관찰해본다.

    - strings bof : 해당 프로그램 내에서 사용하고 있는 문자열을 출력한다.


    - bof을 실행한 결과 segmentation fault가 일어나므로 주소 접근이 잘못되었다는 것을 확인할 수 있다.


    - 셸코드를 실행한다.


    - bof을 실행하면서 의미 없는 문자열과 셸코드의 주소를 인자로 넘겨준다. RET값에 셸코드의 주소가 들어가 셸코드가 실행되면서 관리자 권한을 얻은 것을 확인할 수 있다.

     perl : 문자열이 아닌 16진수로 인식되도록 한다.

     - -e : 실행시키겠다는 의미이다.





    'Security > System' 카테고리의 다른 글

    Buffer Overflow-2  (0) 2018.01.29
    Buffer Overflow-1  (0) 2018.01.27
    RET값 변조  (0) 2018.01.27
    adminstrator, root 계정 패스워드 초기화 방법  (0) 2018.01.13
    리눅스 취약점  (0) 2018.01.08
    패스워드 크래킹  (0) 2018.01.07

    댓글 0

~ ^ . ^ ~