ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BOF 들어가기 앞서
    Wargame Site/BOF 2019. 4. 24. 00:34

     

    1. RET, SFP

     

    BOF 에서 자주 등장하는 RET, SFP 라는 용어가 무슨 뜻을 지니고 있는지 알아보자.

     

    1. RET

    돌아갈 위치를 의미하며, 에필로그 과정에서 만나게되는 saved EIP 를 가르키는 용어로 BOF 에서 정말 중요한 역할을 한다.

    바로이 RET 를 변조하여, 실행위치를 변조하는 경우가 많다.

     

    2. SFP

    Saved Frame Pointer 의 약자로 이전 프레임의 EBP 를 의미한다. 

     

     

     

     

    2. GDB 명령어

     

     

     

    OllyDBG 에만 친숙한 터라 ELF 의 리버싱에서 막혀, Ghidra 를 사용하다가 동적 분석을 위해 gdb 를 사용해보기로 했다.

    CLI 기반이라 적응하는데 정말 오래걸릴 것 같다는 느낌이 들지만 동적 분석을 위해 어쩔 수 없는 관문이라고 생각한다.

     


    gdb -q   [      특정파일       ]


    특정 파일을 대상으로 gdb 로 들어가는 명령어이고, 들어갈 때 나오는 Comment 들을 생략한다.

     

     

     


    set disassembly-flavor intel


    at&t 문법과 intel 문법 중 intel 의 표기로 보겠다는 뜻이다.



    set disable-randomization off

    show disable-randomization


    alsr 기능을 끄고, 확인하는 명령이다. 실행할 때 마다 주소가 바뀌는 것을 막아준다.

     


    disassemble [ 함수 혹은, 특정 주소 ]


    'disas' 로도 축약이 되는 경우가 있으며, 주로 'disas main' 과 같은 특정 함수를 뜯어볼 때 사용한다.

     

     

     


    break * [ 특정 함수 ]   혹은   break [ 특정주소 ]


    'b' 혹은 'br' 로 축약이 되는 경우 축약을 사용하면 편하고, 이 명령어는 브레이크 포인트를 거는 용도로 쓰인다.

    OllyDBG 에 친숙한 분이라면 'F2' 에 매칭되는 명령어라고 생각하면 될 것 같다.

     


    delete breakpoints [ break point Number ]


    뒤에서 다룰 'info breakpoints' 를 통해 삭제할 breakpoints 의 Number 를 통해 breakpoint 를 해제할 수 있다.

    OllyDBG 에 친숙한 분이라면 breakpoint 지정된 곳에서 'F2' 를 다시한 번 누르는 과정이라고 생각하면 될 것 같다.

     

     


    run [ 인자 ]


    인자를 넣어주고 싶은 경우에 다음과 같은 포맷으로 프로그램을 작동시켜주면, 해당 인자가 실행파일에 들어간 형태로 프로그램을 실행한다.

    OllyDBG 에 친숙한 분이라면 argument 를 넣어주고 Ctrl + F2 를 눌러 재실행하는 역할을 해준다고 생각하면 될 것 같다.

     


    countinue


    'c' 로 축약될 수 있고, c 를 누르면 다음 breakpoint 까지 어셈코드를 실행한다.

    OllyDBG 에 친숙한 분이라면 'F9' 에 매칭되는 명령어라고 생각하면 될 것 같다.

     


    x/ + 숫자  +  b, h, w, g +  o, x, u, t 


    정말 활용범위가 넓은 명령어이다. 

    b (1 byte 단위), h (2 byte 단위), w (4 byte 단위), g (8 byte 단위) 보통 이러한 옵션은 다음과 같은 추가적인 옵션을 가져온다.

    o (8 진법), x (16 진법), u (10 진법), t (2 진법) 가 붙을 수 있다. OllyDBG 사용만 해봤던 나로서로는 x/wx 의 조합을 좋아하는 것 같다.

    그리고 뒤에는 $esp, $ebp 와 같은 특정 레지스터로 부터의 정보를 볼 때 자주 사용된다.

     

    만약 esp 를 기준으로 16 바이트의 정보를 보고 싶을 때 x/4wx $esp 와 같은 방식으로 쓰인다.

    추가적으로 x/s 도 쓰이는데 string 값을 추출할 때 사용된다.

     

    예를들어, x/s 0x80af122 와 같은 명령어를 사용하면 0x80af122 에 있는 string 을 추출한다.

     

     


    info


    info 를 통해서 레지스터, 브레이크 포인트, 스택상황 등의 다양한 정보를 확인할 수 있다.

     

     

     

     

     

     

    우선은 이쯤으로하고,

    기타 추가적인 명령어가 나올 때마다 주기적으로 업데이트 해야할 것 같다 !!

    'Wargame Site > BOF' 카테고리의 다른 글

    |Lord Of Bufferoverflow| #1 gate - gremlin  (0) 2019.05.18
    BOF ASLR  (0) 2019.04.24
    BOF 준비운동 (4)  (0) 2019.04.23
    BOF 준비운동 (3)  (0) 2019.04.22
    BOF 준비운동 (2)  (0) 2019.04.22

    댓글

Designed by Tistory.