ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CBM CTF 2019 write up
    CTF Write-Up 2019. 4. 10. 01:10

    첫번째 pwn1번 문제다.

    64bit 바이너리, NX와 PIE가 걸려있고 readme 파일을 읽었을 때 remote로 접속해서 쉘을 따야한다.

    buf에 getnumber의 return값과 같은 값을 넣어야하는데

    get number()로 가보면 다음과 같이 고정적인 값을 return 해준다.

    따라서 input값을 넣어주면 끝

    %d로 입력받으니까 10진수로 넣어줘하는 것만 생각해주면 된다.

     


     

    다음으로 푼 문제다.

    64bit 바이너리, 역시 remote 익스해야한다.

    mitigation은 NX, PIE가 걸려있다.

    헥스레이로 디컴파일 결과 print_flag()가 있고 이 함수가 호출되면 flag가 출력된다.

     

    이 함수가 호출되기 위한 조건을 보면 v4 + v5의 값이 152보다 작거나 같아야하는데

    첫번째 if문에서 우리가 입력하는 v4가 0보다 작으면 return -2로 종료시킨다.

     

    따라서 integer overflow를 이용하여 음수를 넣어야하고

    이 값을 v5(0x100000)와 더하여 152보다 작거나 같게 만들면 된다.

     

    integer overflow를 위해 int 자료형의 범위를 알아보면 위 그림과 같이 나온다.

     

    즉 int형의 최대 양의 정수는 2147483647인데

    여기에 v5에 담긴 0x100000이 더해진다면 당연히 양의 범위를 넘겨서 음수가 나올 것이다.

     


     

     

    다음으로 풀어본 문제는 Little pwn이라는 문제다.

    역시 64bit 바이너리이고 NX, PIE가 걸려있다.

     

    헥스레이로 디컴파일 해보면 flag를 열기 위해서는 read()에 들어가는 파일 디스크립터를 3으로 만들어줘야한다.

    pwnable.kr의 fd문제가 생각나는 문제다.

     

    따라서 사용자 입력으로 v5에 1085645 + 3의 값을 넣어주면 flag가 열린다.

     

     


     

    다음으로 풀어본 문제는 pwn2라는 문제다.

     

    PIE, NX, Partial RELRO가 걸려있고 64bit 바이너리다.

     

    메인은 별게 없고 7byte 사용자에게 입력을 받는다.

    그리고 그 값을 func()에 인자로 전달한다.

     

    func()를 보면 v3가 49153과 같을 때 print_flag()를 호출시켜주는데

    print_flag라는 함수에서는 flag파일을 열어 출력을 시켜주는 역할을 한다.

     

    즉 v3가 조건에 만족하는 값을 가지고 있으면 되는데

    7byte이하의 값을 이용해 bof를 해야한다.

     

    sprintf()의 원형을 다음과 같다.

    #include <stdio.h>  // C++ 에서는 <cstdio>
    
    int sprintf(char* str, const char* format, ...);

    인자값으로 string이 들어갈 포인터의 주소, format등이 들어간다.

    따라서 format string을 이용하면 7byte이하의 입력값을 통해 buffer를 overflow하고, v3에 접근하여 값을 수정할 수 있다.

     

    따라서

    "%(v3와 s사이 offset)format" + "\x01\xc0"

    위와 같은 형식으로 페이로드를 보내면 된다.

     

    이상 CTF 당시 풀어봤던 문제 write up을 마친다.

     

    난이도가 비교적 많이 낮은 CTF라서 싄나게 풀이했다.

     

     

     

    반응형

    'CTF Write-Up' 카테고리의 다른 글

    [TJCTF 2019] Slice of PIE write up  (0) 2019.04.18
    RITSEC CTF 2018 ezpwn write up  (0) 2018.11.19
    DEFCON CTF Qualifier 2018 ghettohacker:Throwback write up  (0) 2018.05.15
    Pico CTF 2013 ROP3 write-up  (0) 2018.03.10
    Pico CTF 2013 ROP2 write-up  (0) 2018.03.10
Designed by Tistory.