-
[64bit] FSB Exploit GeneratorSystem/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 댓글