ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [L.O.B] Level 5 - orc
    Wargame/L.O.B 2022. 10. 13. 05:34
    반응형

    Level 5 - orc를 풀어보자.
    이전 Level인 goblin과 비슷하다.

    우선 소스 코드를 살펴보자.
    다음 Level은 wolfman인 것 같고, 이번에는 egg hunter에 buffer hunter가 추가되었다.
    소스 코드 분석은 앞의 Level과 비슷하니 넘어가고, 마지막 줄의 buffer hunter에 대한 설명만 보도록 하자.
    memset 함수로 buffer의 크기 40 바이트 만큼을 0으로 만든다. (즉, buffer를 전부 0으로 만든다.)

    <wolfman.c 소스 코드의 내용>


    이어서 gdb를 이용해서 마저 분석을 진행하자.
    <main+3>을 보면 44 바이트만큼 esp에서 빼주니, ebp 까지의 거리는 44 바이트라는 것을 알 수 있다.
    buffer와 epb 사이에 더미 값은 없다.

    buffer를 0으로 초기화 시키는데 이번 문제는 어떻게 풀어야 할까??

    &lt;wolfman의 gdb 분석&gt;


    이번에는 ret에 넣을 주소를 buffer가 아닌 ret를 훨씬 넘겨서 넣어보도록 하자.
    간략히 설명하자면, buffer(40) -> sfp(4) -> ret(4) -> [] 로 스택이 될 것이다.
    쉘 코드를 [] 부분에 넣고 ret에 그 어딘가 주소를 삽입해 NOP Sled를 타고 쉘 코드가 실행되도록 하는 방법이다.

    우선, 주소값을 알아보도록 하자.
    buffer의 주소를 알아내기 위해 <main+194>에 break point를 걸었다.
    프로그램이 정상적으로 실행될 수 있도록 \xbf를 48번째에 넣어주고, 그 뒤를 aaaa로 채웠다.
    buffer의 시작 주소는 0xbffffae4에서 0xbf가 시작되는 것을 통해 알 수 있다.

    ret에 0xbffffb14를 넘는 0xbffffb34 주소를 삽입해 NOP Sled로 쉘 코드가 실행되도록 하자.

    &lt;buffer의 시작 주소 및 공격 주소 확인&gt;


    페이로드를 작성해보자.
    buffer는 0으로 초기화될 것이기 때문에 무엇을 채워도 되지만 편하게 NOP을 채우자.
    다음으로 ret에 아까 정했던 주소를 삽입하고, NOP를 1000개 채운다.
    그리고 쉘 코드를 삽입해 NOP Sled에 의해 실행이 되도록 한다.

    그렇게 작성하여 파일을 실행해보니, wolfman 권한의 쉘이 실행되었다.
    my-pass를 입력하니 비밀번호가 나타났다.

    &lt;나타난 비밀번호&gt;

    반응형

    'Wargame > L.O.B' 카테고리의 다른 글

    [L.O.B] Level 7 - darkelf  (0) 2022.10.14
    [L.O.B] Level 6 - wolfman  (0) 2022.10.14
    [L.O.B] Level 4 - goblin  (0) 2022.10.12
    [L.O.B] Level 3 - cobolt  (2) 2022.10.11
    [L.O.B] Level 2 - gremlin  (0) 2022.10.11

    댓글

Designed by Tistory.