ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [pwnable.kr] Level 3 - bof
    Wargame/pwnable.kr 2023. 1. 7. 08:00
    반응형

    Level 3 - bof를 풀어보자.

     

    문제를 살펴보면 이름처럼 buffer overflow에 대한 문제이다.

    우선 위의 두 가지를 다운로드 받고, 천천히 살펴보도록 하자.

    <bof의 문제 화면>

     

    Kali에 접속해 wget 명령어를 사용해 두 파일을 다운로드했다.

    <wget을 이용한 파일 다운로드>

     

    먼저 프로그램의 소스 코드를 살펴보도록 하자.

    선언한 func 함수의 key 값을 이용해 문제를 푸는데, 입력으로 gets 함수를 사용하고 있다.

    그래서 overflow 문제인 것 같다.

    <bof의 소스 코드 내용>

     

    문제를 푸는 방향은 앞에서 많이 해봤던 것들과 비슷하다.

    func 함수의 인자로 들어가는 0xdeadbeef를 0xcafebabe로 바꿔주면 된다.

    이제 필요한 정보는 key의 위치이다.

     

    위치를 알기 위해 gdb를 이용해 분석을 시작해보자.

    func 함수 부분 중 <+29>을 보면, 두 번째 함수의 입력 위치가 [ebp-0x2c]인 것을 볼 수 있다.

    저것이 gets 함수의 입력 위치로, 저곳을 NOP로 채워 key의 위치로 갈 것이다.

     

    그렇다면 key는 gets에서 얼마나 떨어져 있는 것일까??

    아래의 <+40> 부분을 보면, cmp를 사용하여 0xcafebabe와 [ebp+0x8] 부분을 비교하고 있다.

    저곳이 key의 위치로 gets로부터 거리를 보면 0x2c + 0x8 = 0x34이므로 52만큼 떨어져 있다.

     

    정확히는 아래와 같다.

    -----------------------

    overflowme[32]

    dummy[12]

    sfp[4]

    ret[4]

    key

    -----------------------

    <bof의 gdb 분석>

     

    이제 입력을 하면 문제는 완료인데, 공부를 해야하니 파이썬 코드를 작성해 풀어보자.

    pwn 모듈을 활용해 접속하고, 페이로드를 입력해 결과를 확인해보도록 하자.

    아래와 같이 페이로드를 작성해 파이썬 코드를 실행시키면 된다.

    <접속 파이썬 코드>

     

    python3 명령어를 이용해 작성한 코드를 실행시키면 flag가 출력된다.

    <bof의 flag 출력>

     

    출력된 flag를 웹 페이지에 입력하면 문제가 해결된다.

    <bof 문제 완료>

    반응형

    'Wargame > pwnable.kr' 카테고리의 다른 글

    [pwnable.kr] Level 6 - random  (0) 2023.04.09
    [pwnable.kr] Level 5 - passcode  (0) 2023.04.01
    [pwnable.kr] Level 4 - flag  (0) 2023.02.05
    [pwnable.kr] Level 2 - col  (0) 2023.01.06
    [pwnable.kr] Level 1 - fd  (0) 2023.01.06

    댓글

Designed by Tistory.