gpt4 book ai didi

php - 如何让 shell_exec 在 IIS 6.0 上运行

转载 作者:可可西里 更新时间:2023-11-01 13:30:49 25 4
gpt4 key购买 nike

问题

我有一个使用 shell_exec 运行 pdf 到文本转换器的 PHP 脚本。为了简化问题,我创建了一个简短的脚本,该脚本使用 shell_exec 来回显 dir 命令的输出。

<?php
$cmd = 'C:\\WINDOWS\\system32\\cmd.exe /c ';
echo shell_exec($cmd.' dir');
?>

当我在我的 Apache 服务器上运行它时,一切都按预期工作。当我切换到 IIS 时,就好像完全跳过了该行:没有错误,没有输出,没有日志,什么都没有。

不幸的是,我需要使用 IIS,因为我要根据 Active Directory 对我的用户进行身份验证。


这是我到目前为止尝试过的:

  • 通过 cmd.exe/c 发出命令,而不是直接发出命令
  • 授予对“C:\WINDOWS\system32\cmd.exe”上的SERVICERead & Execute 权限
  • 为“C:\WINDOWS\system32\cmd.exe”上的NETWORK SERVICE授予读取和执行权限
  • 为“C:\WINDOWS\system32\cmd.exe”上的IUSR_MACHINENAME 授予读取和执行权限
  • 向“C:\WINDOWS\system32\cmd.exe”上的Everyone 授予Read & Execute 权限(别担心,它不会一直这样好久了,哈哈)
  • 将 PHP 作为 ASAPI 模块运行
    • 这是我的标准配置
  • 将 PHP 作为 CGI 扩展运行
    • 这不起作用,我得到一个错误:CGI 错误
      指定的 CGI 应用程序因未返回完整的 HTTP header 集而行为异常。
  • 在 IIS 管理器中,将执行权限设置为您网站上的脚本和可执行文件
  • 将 html 标记和其他 php 函数添加到脚本中以查看是否得到处理;确实如此。就好像刚刚跳过了 shell_exec 位。

非常感谢你看这个问题,我现在正在为这个问题而烦恼

干杯,伊恩


更新 1

我真的不想这样做,但作为权宜之计,直到我找到合适的解决方案,我在 Web 服务器上运行 Apache(运行 shell_exec 正常),并通过 cURL 调用我的 apache 脚本。它很丑陋,但它有效:)。


更新 2

我开始认为这与其说是 IIS 或权限本身的问题,不如说是我们网络上的某些策略的结果 - 虽然我无法想象是什么。左派有什么想法吗?

最佳答案

下面是一个比较系统的方法来判断哪个用户需要被授予权限

确认您在 C:\WINDOWS\SYSTEM32(或更一般的 %systemroot%\system32)中有以下可执行文件

cmd.exe  
whoami.exe

检查这些可执行文件的当前 ACL

c:\windows\system32> cacls cmd.exe  
c:\windows\system32> cacls whoami.exe

如果用户“Everyone”未被授予读取 (R) 访问权限,则按如下方式临时授予

c:\windows\system32> cacls cmd.exe /E /G everyone:R  
c:\windows\system32> cacls whoami.exe /E /G everyone:R

使用以下内容创建 whoami.php

<?php  
$output = shell_exec("whoami");
echo "<pre>$output</pre>";
?>

在网络浏览器上加载 whoami.php 并记下显示的用户名,例如在我的例子中它显示了

ct29296\iusr_template

如果必须在上面的步骤中添加,则撤消“所有人”的权限

c:\windows\system32> cacls cmd.exe /E /R everyone  
c:\windows\system32> cacls whoami.exe /E /R everyone

仅将在步骤 5 中找到的具有读取+执行权限(R)的用户名授予 cmd.exe

c:\windows\system32> cacls cmd.exe /E /G ct29296\iusr_template:R  

请记住为您自己的系统使用正确的用户名。

参见:http://www.myfaqbase.com/index.php?q=php+shell_exec&ul=0&show=f

关于php - 如何让 shell_exec 在 IIS 6.0 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2294034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com