32位程序执行exec()一个64位程序

3
在我的Debian amd64系统上,我试图在示例程序上运行32位攻击载荷的测试。我知道这些载荷是有效的,因为我已经在32位虚拟机中测试过。
安装了所有必要的库以运行32位或64位程序。
然而,当shellcode执行int 80h调用exec("/bin/sh", ...)时,系统调用失败,返回错误代码-2(ENOENT)。
修改shellcode以执行另一个32位程序会导致shellcode按预期工作。
那么,有没有办法从32位程序中exec()一个64位程序呢?

你确定你有可执行文件的正确路径,并且所有用于该可执行文件的库都存在吗? - Ignacio Vazquez-Abrams
是的,我正在执行/bin/sh。我相信那会起作用 :) - Robert Mason
你使用的是哪个系统调用号?在Linux的x86 32位和64位之间它们不相同。 - user149341
0xb。我认为,如果调用通过“int 80h”而不是“syscall”指令进入内核,为了向后兼容性,64位内核仍将使用32位系统调用号码。 - Robert Mason
1个回答

0

使用execl库函数时它可以正常工作。

从shell代码中调用库函数可能会比较困难,但你可以尝试在普通程序中跟踪其执行过程,并编写相应的shell代码来实现相同的功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接