【发布时间】:2014-11-01 04:17:57
【问题描述】:
在我的 Debian amd64 系统上,我正在尝试在示例程序上运行 32 位漏洞利用有效负载的测试。我知道这些有效负载可以正常工作,因为我已经在 32 位虚拟机中对其进行了测试。
安装了所有必需的库以运行 32 位或 64 位程序。
但是,当shellcode执行int 80h调用exec("/bin/sh", ...)时,系统调用失败,返回错误码-2(ENOENT)。
修改 shellcode 以执行另一个 32 位程序会导致 shellcode 按预期工作。
那么,有什么办法可以将 32 位程序 exec() 64 位程序?
【问题讨论】:
-
您确定可执行文件的路径正确,并且可执行文件的所有库都存在吗?
-
是的。我正在执行/bin/sh。我相信这会奏效:)
-
您使用的是什么系统调用号码?它们在 x86 32 位和 64 位之间的 Linux 上并不相同。
-
0xb。出于向后兼容性的原因,如果调用是通过
int 80h而不是syscall指令,我会假设 64 位内核仍将使用 32 位系统调用号。
标签: linux exec system-calls cpu-architecture shellcode