ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [64bit] FSB Exploit Generator
    System/CTF 2019. 7. 10. 19:44


    한동안 64Bit FSB를 못 풀었었는데 

    Jsec님이 정리해주신 글을 보고 64Bit FSB Exploit Generator 툴을 만들어 봤다.


    32Bit같은 경우는 PwnTool 모듈에 있는데

    왜인지는 모르겠지만 64Bit는 따로 없는 것 같았다.

    ( context.arch를 amd64로 설정하거나, 옵션을 건드리면 되는 것 같긴한데 익스가 안되더라.. 쓰기도 어렵고.. )


    그래서 다음에 64Bit FSB문제를 만나면 써먹으려고 간단한 Generator를 만들었다.

    https://github.com/Py0zz1/x64_FSBSolver


    [ Download ]

    git clone https://github.com/Py0zz1/x64_FSBSolver.git

    cd ./x64_FSBSolver

    cp ./x64fsb [Your Workspace]

    모듈 사용법은 Git Clone으로 복제해와서 Pwntool쓰듯이 import x64fsb 해서 사용하면 된다.


    [ Usage ]

    FSB취약점으로 exit_got를 helper( )의 주소로 Overwrite하는 시나리오로 설명하도록 하겠다.

    exit_got = 0x601020

    helper = 0x4050a0

    taintable_offset = 6

    helper( )는 CTF에서 흔히 볼 수 있는 Shell을 바로 실행해주는 함수다.

    taintable_offset은 Input값이 메모리상에서 얼만큼 떨어져 있는가를 뜻한다. (8byte == 1)


    사용할 수 있는 함수는 총 4가지가 있으며, 상황에 맞춰서 적절한 함수를 사용해줘야 한다.

    여기서 상황이라는건 Payload길이 제한을 뜻한다.


    [ exp_6(offset, value, address) ]

    exp_6( )는 한번에 6byte를 Overwrite하는 Payload를 만들어주는데, 길이가 가장 길다.


    [ exp_4(offset, value, address) ]

    exp_4( )는 한번에 4Byte를 Overwrite 하는 Payload는 만들어주며 길이가 2번째로 길다.


    [ exp_4L(offset, value, address) ]

    exp_4L( )는 exp_4( )와 같이 4Byte를 OverWrite하지만, %hn이 아닌 %n을 사용한다.

    따라서, exp_4( )보다 Payload길이가 짧다.


    [ exp_2(offset, value, address) ]

    exp_2( )는 한번에 2byte를 Overwrite하는 Payload를 만들어주고 길이가 가장 짧다.


    [ 여담 ]

    FSB가 처음 배울때는 제일 힘들었는데

    한번 익혀놓으면 그 틀이 항상 똑같아서 이렇게 간단한 툴까지 만들어볼 수 있는 것 같다.


    짧은 시간에 좋은 문서를 만들어준 Jsec님도 대단하신 것 같다.

    툴을 만들면서 테스트는 HackCTF에 있는 문제들로 진행했다.

    좋은 문제들이 많으니 풀어보지 않았다면 한번씩 들려서 풀어보는 것을 추천한다.


    'System > CTF' 카테고리의 다른 글

    [2019picoCTF] droids1  (0) 2019.10.12
    [2019picoCTF] droids0  (0) 2019.10.12
    Meepwn 2018 White snow, Black shadow Writeup  (3) 2019.03.02
    TUCTF2018 lisa Writeup  (1) 2019.01.14
    2018 CCE Qual Writeup - note [pwn]  (0) 2018.10.02

    댓글

Designed by Tistory.