ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Darkknigth -> Bugbear Write-up
    표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019.03.02 18:18

    혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다.



    Darkknight에서 Bugbear로 가는 문제이다~

    우선 코드를 보자

    입력하는 문자열의 마지막이 "0xbf"이면 안된다는 제약이 걸려있다.

    이 의미는 이전에 사용했던 공격들에 제약이 생겼다는 의미이다.

    이름을 바꾸어서 하는 공격이라던지 스택의 특성을 이용한 크기를 늘려서 하는 공격들이 불가능하다는 것이다.

    그렇기 때문에 0xbf로 시작하는 주소가 아닌 다른 주소를 이용해서 공격을 해야한다.

    문제의 힌트를 보니 RTL을 사용하라는 거보니 RTL로 진행해서 풀면 될 것같다.

    이전에 이러한 문제들을 풀어봤기 때문에 굉장히 쉽게 접근할 수 있었다.

     

    * RTL구하는 방법 *

    1. ret 이전까지 덮을 수 있는 bufferoverflow 구하기

    2. libc_base 구하기

    3. 사용할 함수들의 offset 구하기

    4. "/bin/sh" 문자열 위치구하기

    5. payload 작성 후 exploit 하기



    우선 디버깅을 위해서 복사본을 만들었다.





    그 다음 해당 바이너리가 어떤 libc를 사용하는지를 보았다.

    자연스럽게 libc_base도 구할 수 있었다.





    이번에는 system 함수의 offset을 보았다.

    offset이 0x00040ae0이므로 libc_base와 더하게 되면

    libc에서의 system함수의 정확한 주소를 알 수 있게 된다.

    system 함수 주소 : 0x40018000 + 0x40ae0 = 0x40058ae0





    직접 libc_system임을 확인하였다.




    이번에는 system 함수의 인자로 사용될 "/bin/sh"를 구해보자

    objdump -s 명령어를 이용하면 구할 수 있다.

    "/bin/sh"의 offset은 0xe3ff9가 되었다.

    그러므로 libc_base와 더하면 정확한 주소를 알 수 있다.

    "/bin/sh"의 주소 : 0x40018000 + 0xe3ff9 = 0x400fbff9




    이제 필요한 것들을 다 구했으니 payload를 작성해보도록하자.

    ret 전까지를 덮기 위한 a를 44개 + system함수주소 + dummy(4) + "/bin/sh"의 주소

    exploit해보니 쉘을 딸 수 있었다~




    이번에는 원본에서 진행해서 쉘을 따보자

    쉘이 따짐을 확인할 수 있었다~~



    다음 단계로~~

    '표튜터와 함께하는 Pwnable > The Lord Of the BOF Write-up' 카테고리의 다른 글

    Giant -> Assassin Write-up  (0) 2019.03.04
    Bugbear -> Giant Write-up  (0) 2019.03.03
    Darkknigth -> Bugbear Write-up  (0) 2019.03.02
    Golem -> Darkknight Write-up  (0) 2019.03.02
    Skeleton -> Golem Write-up  (0) 2019.02.27
    Vampire -> Skeleton Write-up  (0) 2019.02.27

    댓글 0

Designed by Tistory.