ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Pwn] Basic_FSB
    CTF write_up/Hack CTF 2019. 9. 20. 20:49

     

    해당 문제는 앞서 풀어본 문제들과 달리 FSB 즉, Format String Bug의 약자로 버퍼 오버 플로우 해킹 기법중 하나라고 합니다.

     

    IDA에 넣어서 값을 확인해 보겠습니다.

     

    vuln함수가 있네요 들어가 보겠습니다.

     

    FSB에 취약한 부분은 printf를 포맷없이 사용한 위사진의 밑줄 부분입니다.

     

    그리고 함수를 보면 flag 함수가 존재 합니다.

     

    flag 함수의 주소를 취약한 부분에 넣어야 하는것 같습니다.

     

    각각의 함수에는 PLT영역과 GOT영역이 있습니다.

    따로 포스팅 할 계획이지만 간단히 이론만 설명하고 넘어가겠습니다.

     

    PLT : Procedure Linkage Table의 약자로, 외부 프로시저를 연결해주는 테이블, PLT를 통해 다른 라이브러리에 있는 프로시저를 호출해서 사용할 수 있습니다.

     

    GOT : Global Offset Table의 약자로, PLT가 참조하는 테이블 또는 프로시저들의 주소가 들어있습니다.

     

    그리고 함수를 호출하면(PLT를 호출하면) GOT로 점프를 하고 GOT에는 함수의 실제 주소가 적혀 있습니다.

     PLT를 움직이는 원동력인 GOT를 건들면 문제 풀이에 도움이 될것 같습니다.

     

    printf의 GOT를 flag의 주소로 Overwrite해서 익스를 실행하면 될것 같습니다.

     

    그렇다면 필요한 데이터 들을 하나씩 수집해 보겠습니다.

     

     

    이처럼 printf에 마우스 커서를 대보면 간략한 lib의 printf 함수에 대한 설명이 적혀있습니다.

    PLT에서 GOT로 점프를 한다 했으니 GOT의 주소는 0x804A00C 인것을 확인 할수 있습니다.

     

    이렇게 직접 구하는 방법도 있지만 아래와 같이 pwntools의 모듈을 이용해서 구할수 있습니다.

     

     

    ELF()함수를 통해서 파일을 연결하고 got['함수명'] , plt['함수명']을 사용하면 원하는 값을 10진수인 정수로 값을 받을 수 있습니다.

     

    이번엔 flag() 함수의 주소를 알아보겠습니다.

     

     

    0x080485B4 입니다.

     

    이제는 FSB를 이용한 공격을 할때 어디부분을 공격 해야할지 확인해 보겠습니다.

     

    aaaa %x %x %x %x %x를 입력 해봤는데 

    입력한 aaaa 의 값이 2번째 자리에 출력이 되었습니다.

     

    그렇다는 것은 이쪽에 값을 전달하면 FSB가 실행 된다는 것을 의미합니다.

     

    페이로드를 한번 짜보면 아래와 같습니다.

     

    타겟주소[printf 의 GOT 주소] + %(GOT에 Overwrite 할 주소[flag 함수의 주소 10진수로] - 앞에 추가한 문자 길이[printf의 GOT 주소 개수(4글자)])x%n

     

    위의 페이로드를 참고하여 이들을 종합한 Expolit code는 아래와 같습니다.

     

     

     

    Flag : HackCTF{여보게_오늘_반찬은_포맷스트링이_어떠한가?}

     

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

    [Pwn] Offset  (0) 2019.09.24
    [Pwn] x64 Simple_size_BOF  (0) 2019.09.24
    [Pwn] x64 Buffer Overflow  (0) 2019.09.20
    [Pwn] Simple_Overflow_ver_2  (0) 2019.09.20
    [Pwn] 내 버퍼가 흘러넘친다!!!  (0) 2019.09.20

    댓글

Designed by Tistory.