ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Pwn] Poet
    CTF write_up/Hack CTF 2019. 9. 24. 00:30

    실행을 한뒤 checksec으로 보호기법 까지 확인해 보겠습니다.

     

     

    64비트 파일에 보호기법은 딱히 고려하지 않아도 될것 같습니다.

     

    일단 문제를 보면.. point를 모으는 문제네요 

    이런 문제는 거의 대부분 point 쌓이는 변수에 다가 덮어 씌우는 형식의 문제가 자주 나오는데 과연!

     

    IDA 64bit으로 열어서 디컴파일 코드를 분석해 보겠습니다.

     

    일단 함수가 총 3개가 있는것 같습니다.

     

    아래에 dword_6024E0이 point 변수인것 같습니다.

     

    bss 영역에 있는 변수라고 되어 있습니다.

     

    bss란? Block Started by Symbol의 약자로  초기에 오직 0의 값으로 표시된 정적으로 할당 된 변수가 포함된 데이터 세그먼트의 일부로 컴파일러나 링커에 의해서 사용된다.

     

    는 너무 긴거 같고, 간단히 줄여보자면, 초기화 되지 않은 전역변수를 의미합니다.

     

    전역변수의 변수를 덮어 씌우는 문제라면 또다른 전역변수를 찾아 보겠습니다.

     

    get_poem함수부터 확인해 보겠습니다.

     

     

    일단 poem을 입력 하고, point변수가 초기화 되는 부분입니다.

    1024의 크기를 가진 poem 전역변수 입니다.

     

    get_author함수입니다.

     

     

    이름부터 수상한 변수 입니다.

     

    똑같이 전역 변수입니다.

     

    rate_poem함수입니다.

     

    dword_6024E0 에 값을 증가 시켜주는 곳인것 같습니다.

     

    처음 입력한 poem은 여기서 값을 확인 하고있습니다.

     

    일단 point변수와 아까 get_author함수의 변수를 보면 주소값이 매우 근접하게 있으면서 아래의 stack 모양대로 변수가 있어서 bof가 가능할 것 같습니다.

     

    |-----------------|

    | dword_6024E0  <- 0x6024E0|

    |-----------------|

    |   unk_6024A0  | <- 0x6024A0

    |-----------------|

     

    두변수의 거리가 0x6024E0 - 0x6024A0 = 0x40 = 64입니다.

     

    64개의 더미값을 넣고 뒤에 1000000을 넣어주면 clear 될것 같습니다.

     

    exploit code를 작성해 보겠습니다.

     

     

    Flag : HackCTF{0neSTEP_jun10rCTF}

     

     

     

     

     

    'CTF write_up > Hack CTF' 카테고리의 다른 글

    [Pwn] 1996  (0) 2019.09.24
    [Pwn] Beginner_Heap  (0) 2019.09.24
    [Pwn] g++ pwn  (0) 2019.09.24
    [Pwn] BOF_PIE  (0) 2019.09.24
    [Pwn] Offset  (0) 2019.09.24

    댓글

Designed by Tistory.