nssctf刷题之system中的vfork问题

set follow-fork-mode parent

[HNCTF 2022 Week1]ezr0p32

nssctf链接:https://www.nssctf.cn/problem/2930

一道简单的ret2text的题目,给的是32位程序,并且还调用了system输出,不过一般是不会在system中echo的,这也是为了照顾新生

写入/bin/sh调用system即可getshell

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
int dofunc()
{
  char buf[28]; // [esp+Ch] [ebp-1Ch] BYREF

  system("echo welcome to xzctf,have a fan time\n");
  puts("please tell me your name");
  read(0, &::buf, 0x100u);
  puts("now it's your play time~");
  read(0, buf, 0x30u);
  return 0;
}

原本以为可以快速调试获取shell,但是在gdb中每次运行完system都会出问题

大致的意思就是system调用时通过vfork创建了子进程,导致gdb去追踪子进程。起初遇到这个问题也是一头雾水的,后面向多位师傅咨询了一下,有效的解决方案大致有两种

  • set $eip=0x8048567也就是直接跳过这个函数保持gdb的调试
  • set follow-fork-mode parent设置保持对父进程的追踪调试

使用follow-fork-mode会更好一些,当然调试的时候输入还是挺麻烦的,可以写进.gdbinit

以后遇到system函数就可以愉快地ni了~

使用 Hugo 构建
主题 StackJimmy 设计