【问题标题】:32-bit program exec() a 64-bit program32 位程序 exec() 一个 64 位程序
【发布时间】: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


【解决方案1】:

在使用 execl 库函数时有效。

从 shell 代码调用库函数可能很困难,但您可以尝试在普通程序中跟踪其执行情况,看看如何编写执行相同操作的 shell 代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-27
    • 2011-09-03
    • 2013-03-11
    • 2019-08-03
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多