c - 查找缓冲区地址以创建 shell 代码

标签 c linux stack shellcode stack-frame

在我的程序中,我试图修改 EIP 以指向包含 shell 代码的缓冲区基地址

例子: 0xbffff5f3 是栈上的地址,指向
code[80] = "\x90\x90\x90\x90\x90\x31\xc0\x31\xdb\x31\xc9\"

我创建了一个指针 ret 并使用堆栈框架知识将其指向缓冲区的基地址。

{
//Some more pointer arithmetic on ret
(*ret) = (int)code;
return ;
}

修改eip为

eip            0xbffff5f3   0xbffff5f3

这工作得很好,我的 shell 代码执行了。但是 ret 是用缓冲区地址硬编码的。

但是,现在我希望我的 shell 代码包含预先知道的缓冲区基地址,以便一旦缓冲区溢出,EIP 将指向它。

如何提前知道缓冲区的基地址?

[![缓冲区本身包含shellcode的地址][1]][1]

编辑:提炼我的问题: 给定一个静态声明的数组代码[80],我如何才能事先确定这个数组在堆栈上的基地址,以便我可以将这个基地址插入到我的 shell 代码中并插入适当的填充字节和 NOPS 以使 EIP 指向 shell代码?

我在网上看到了很多例子,都演示了使用GDB并在运行时计算缓冲区地址,但是如果我必须以编程方式导出shell代码地址,这是否可以实现。

最佳答案

没有直接的方法。您需要使用针对特定目标的技巧。 它们包括:

关于c - 查找缓冲区地址以创建 shell 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33696429/

相关文章:

c - 参数传递问题

c - 如何通过 UDP 套接字设置以太网服务等级?

java - 堆栈实现中的空指针异常

java - 递归:解决进口迷宫?

arm - ARM 中的 PUSH 和 POP 命令

c - 我是否在这里创建了两个单独的指针,或者我是否正确地调用了作为命令的单个内存地址?

c - 父进程在设置 SIGCHLD 时被阻塞

c - 内核模块编译中缺少头文件

regex - Linux - 根据带有标题和尾部的关键位置对文件进行排序

php - 如何从/var/tmp 更改默认的 Pear/PECL 构建文件夹?