【问题标题】:How to have an IIS Application run a simple command?如何让 IIS 应用程序运行一个简单的命令?
【发布时间】:2017-07-04 03:16:06
【问题描述】:

假设您在 IIS 中有一个名为 Test 的网站。我希望能够添加一个在用户访问页面时仅运行foo.exe /runfoo 的应用程序。假设我不关心性能、“干净的代码”、过于频繁地运行命令等。这是为了概念验证/更大工具包的一部分。

我已经尝试过并且正在努力的是,我可以部署一个包含所有 DLL/其他垃圾的完整 C# Web 应用程序,并让它创建一个 Process 并运行它。我不想那样做。理想的情况是,我将在现有网站下创建一个应用程序,该网站具有一个单独的应用程序池(我可以更改),并且在其中我可以修改 web.config 或与应用程序池有关的内容以使其运行命令。一个简单的应用程序,只有一个文件夹,里面有最少的文件。

一些要求:

  • 该命令可以定期运行,而不是仅在用户访问页面时运行,但这并不可取。
  • 该命令必须能够接受参数。
  • 应用程序目录中所需的最少文件。

我查看了所有我能找到的现有选项,除了应用程序池设置中的“进程孤立”之外,没有一个选项对我有用。有没有办法通过访问页面来触发它(无需部署成熟的网络应用程序)?

【问题讨论】:

  • 反对票告诉我,社区觉得我的问题要么没有显示出研究成果,要么不清楚,要么没有用。我付出了很多努力来研究这个问题的解决方案,并说明了对我不起作用的方法(部署完整的应用程序)。我翻遍了我能找到的 IIS 文档站点,但这并不是人们通常会做的事情。如果有任何不清楚的地方,请发表评论并让我知道需要澄清的地方。谢谢。

标签: c# asp.net iis application-pool


【解决方案1】:

编辑:

看起来这是一项关于攻击性安全技术以及 IIS 的要求的研究工作

  • 该命令可以定期运行,而不是仅在用户访问 页面,但这不是最好的。
  • 该命令必须能够接受 论据。
  • 应用程序目录中所需的最少文件。

您可以按照here 的说明在 IIS 中将 exe 作为 CGI 可执行文件运行。 This 文章谈论传递查询字符串值。还可以探索fastCGI 以及改进 CGI

编辑 2:添加另一个选项

您也可以简单地将一个简单的 aspx 及其代码放在 IIS 中 网站的内容,并且可以访问该 aspx 页面。没有编译,没有 部署,没有 bin 目录等。你只需要两个文件

  • 在您的 IIS 网站中创建两个文件 default.aspx 和 Default.aspx.cs

这是代码

默认.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

    </div>
    </form>
</body>
</html>

和 Default.aspx.cs 文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Diagnostics;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
            Process process = new Process();            
            process.StartInfo.FileName = "echo.exe";            
            process.Start();            
    }
}

【讨论】:

  • 不确定您是否打算表现得很刻薄,但我对计划任务很熟悉。这是攻击性安全技术研究的一部分,我希望能够展示一个简单的概念验证。部署整个网站并不理想,使用 schtasks、注册表项、at 命令、WMI 事件订阅等不是合适的替代方案。我知道我所要求的听起来像是“不好的做法”,但我会要求社区让我怀疑我有理由做如此奇怪的事情。
  • 哦,我的错。我在想你的要求就是你列出的要求。你应该把这个细节添加到这个问题上,这是安全技术研究的一部分。
  • 感谢更新的答案,但这需要在 IIS 中启用 CGI 模块,对吗?这对我来说有点太具有侵略性了。我知道这没有被列为要求或任何东西,但我认为会有一种更简单的方法。我正在查看是否可以只添加一个简单的页面/dll 组合,该组合具有对所有其他 .NET dll 和内容的现有站点的相对路径引用。
  • 是的,你是对的。从技术上讲,你可以将 html 页面重命名为 aspx,aspnet 编译器将编译并运行它。将使用详细信息更新答案
  • 嗯,是的。我认为这实际上是这样做的方法(至少非常接近)。在我的示例中,有一个运行低权限应用程序池的主网站。我所做的是创建一个作为本地系统运行的应用程序池,创建一个使用该应用程序池的应用程序,将符号链接添加到主应用程序的 bin 目录,然后像你说的那样放入一个 aspx 文件。我做了一些测试,这似乎有效。不是你所说的 100%,但这是为了在不同的应用程序池下运行。如果我们希望程序作为 IIS_USR 运行,您的方法当然应该有效。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2018-10-08
  • 2012-02-14
  • 1970-01-01
  • 2022-11-29
  • 2016-03-15
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多