Windows 上 PHP 中的 Exec() 无需打开 cmd.exe 安全漏洞?

发布于 2024-07-19 04:04:24 字数 743 浏览 7 评论 0原文

我需要一个 Web 脚本来执行 exe 文件,然后返回结果 在 exe 上发送到网络请求。

我可以回显 exe 的结果,也可以修改 exe 以将其结果保存到文件中,然后读取该文件以回显 Web 请求。

问题是在 IIS 下使用 php 所有 exec() shell_execute() system() 类型函数都会错误并显示“无法分叉”,因为 IIS 匿名用户 IUSER_%COMPUTER_NAME% 无权访问 C:\windows\system32\cmd .exe

这可以通过更改此 IIS 匿名用户对 cmd.exe 的权限来修复,但是 这是严重的安全削弱(我相信)。

有什么办法可以让 IIS 下的 PHP 脚本调用 Exe,而无需向 IIS 匿名用户打开 cmd.exe 吗?

帮助表示赞赏。

为什么我需要这样做? 我有一个序列密钥生成器,当有人通过信用卡购买我的产品时,我的支付处理器需要调用一个 URL,将许可证名称作为参数传递,并返回该许可证名称的序列号。

我的许可证密钥生成器是 WinLicense,我有一个 exe。

我需要运行类似

shell_exec("C:\inetpub\wwwroot\test.com\testLicense.exe \"".$regName."\""); 的命令 // 或 exec() 或 system()

(testLicense.exe 将结果存储在一个文件中,然后我的 php 脚本可以回显)

I have the requirement for a web script to execute an exe file and then return the results
on the exe to the web request.

I can either echo back the result of the exe or modify the exe to save it's results to a file, and then read the file to echo back the web request.

The problem is that using php under IIS all exec() shell_execute() system() type functions error out with 'Unable to fork' because the IIS anonymous user IUSER_%COMPUTER_NAME% does not have access to C:\windows\system32\cmd.exe

This can be fixed by changing this IIS anonymous user's permissions for cmd.exe but
this is significant security weakening (I believe).

Is there any way I can have by PHP script under IIS call an Exe without opening up cmd.exe to the IIS anonymouse user ?

Help appreciated.

Why do I need to do this ? I have a serial key generator, when somone buys my product via credit card my payment processor needs to call a url passing the license name as a parameter and having a serial number for that license name returned.

My license key generator is WinLicense, which I have an an exe.

I need to run something like

shell_exec("C:\inetpub\wwwroot\test.com\testLicense.exe \"".$regName."\"");
// or exec() or system()

(testLicense.exe stores the result in a file which my php script can then echo)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦过后 2024-07-26 04:04:24

非常仔细地过滤您提供给 exec() 的变量。

则仅使用整数表示数字信息;

如果是文件名,

如果是字符串,则使用 file_exists() 来确认它是真实的文件名;使用正则表达式并删除诸如 ' 和 " 和 \ 之类的字符;因此其中的任何命令都不会运行。

Filter the variables you feed to exec() very carefully.

use integers only for numerical information

if it's a filename use file_exists() to confirm it's a real filename

if it's a string use regex and remove characters like ' and " and \ and ; so any commands in it wont run.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文