此程序不能在 DOS 模式下运行

信息安全 特权升级
2021-08-12 16:11:21

我正在 Windows XP 机器上进行渗透测试,并获得了低权限的 shell。因此,我正在尝试提升我的权限。但是,我尝试运行的每个 .exe 都给我“这个程序不能在 DOS 模式下运行”。我需要在盒子上更改任何类型的配置,或者在这样的环境中是否有不同的权限提升策略?”

2个回答

背景

该消息来自每个 Windows(PE 格式)可执行文件具有的基本标头。该消息(以及显示它的代码)在技术上是可编辑的,但所有编译器似乎只是发出显示相同字符串然后退出的代码。它是 16 位可执行代码(如 DOS.COM文件),旨在在您尝试在 MS-DOS 或类似的 Windows 之前的系统上运行程序时显示。Windows 的程序加载器通常会跳过它。

解释

但是,在一种情况下,Windows 可能会显示该消息:当您尝试运行为比您正在使用的更高级版本的 Windows 编译的 PE 时,尤其是当主程序代码用于不同的 CPU 架构时超过操作系统可以支持的。(例如,这类似于尝试在 16 位 DOS 上运行 Win32 代码。)在 GUI 中,您会收到一个弹出错误,但在命令行中,您很可能只会收到该消息。

这里明显的候选者是您试图在(非常过时的)Windows XP 上运行代码,并且您说您正在使用“i686- w64 -mingw32-gcc”。如果您正在为 Windows XP 编译 64 位二进制文​​件,它们极有可能无法工作;虽然在技术上存在 64 位版本的 XP(它实际上是不同的内核版本,5.2 与 5.1,但它被标记为 XP),但它从未被广泛使用;绝大多数 XP 盒子都是 32 位的。如果您想从命令行快速检查 32 位还是 64 位,请检查是否存在\Windows\SysWOW64目录(在 64 位机器上保存 32 位系统二进制文件);如果它不存在,则说明您运行的是 32 位操作系统。

推荐

  • 除非您 A) 需要 64 位,并且 B) 知道您的目标是 64 位,否则仅使用 32 位有效负载。
  • 确保您的代码和编译器面向 XP(Vista 和后来添加了大量新 API,这些 API 将阻止使用它们的程序在 XP 上运行)。
  • 考虑在目标机器上尝试之前启动 XP VM 以测试您的有效负载是否在本地运行。

确保您已正确交付有效负载,我在通过 ftp 传输 accesschk.exe 时遇到了类似的问题。FTP 允许以 ascii 和二进制模式传输,如果您以二进制模式传输它应该可以工作。

二进制模式按位传输文件,就像它们在 FTP 服务器上一样。然而,Ascii 模式将直接下载文本。您可以键入 ascii 或 binary 在类型之间切换。

为此,请连接到 ftp 服务并输入“binary”,您应该会收到“200 Type set to I”的响应

再次放置文件并运行可执行文件。