IIS 执行 CMD.exe

三碗猪脚 2010-01-14 11:05:10
在VS2008 下调试可以执行,上传服务器后不能执行

类似的

http://topic.csdn.net/u/20090624/13/f3bd15c8-3ce5-4321-9cb8-78cd38247e34.html
...全文
562 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cyliner 2010-05-15
  • 打赏
  • 举报
回复
解决没?
最近也碰到这个问题了,本地调试可以(换不同用户测试成功),放到IIS就错了
注册失败 2010-01-14
  • 打赏
  • 举报
回复
千万别玩这样的花样
IIS里能调用CMD了,你的网站一公布出去服务器就被人拿到管理员权限了。。。

搜索下身份模拟,让IIS模拟windows账户登录系统,再切换当前上下文,然后调用CMD
完成后再切换回来
hitlcyu19 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zzxap 的回复:]
没权限
[/Quote]
lovexilove 2010-01-14
  • 打赏
  • 举报
回复
权限问题
archu 2010-01-14
  • 打赏
  • 举报
回复
问题是不能执行报什么错?
还有你的代码是如何调用cmd.exe的?
三碗猪脚 2010-01-14
  • 打赏
  • 举报
回复
我将C:\WINDOWS\system32\cmd.exe添加了network service ,aspnet,network 完全开放,甚至everyone 依然不行
tzs2304 2010-01-14
  • 打赏
  • 举报
回复
权限问题
zzxap 2010-01-14
  • 打赏
  • 举报
回复
没权限
满衣兄 2010-01-14
  • 打赏
  • 举报
回复
没权限
三碗猪脚 2010-01-14
  • 打赏
  • 举报
回复
按8楼的说法做了一下

<%@ Page Language="C#" %>
<%@ Import Namespace = "System.Web" %>
<%@ Import Namespace = "System.Web.Security" %>
<%@ Import Namespace = "System.Security.Principal" %>
<%@ Import Namespace = "System.Runtime.InteropServices" %>
<%@ Import Namespace = "System.IO" %>
<%@ Import Namespace = "System.Diagnostics" %>
<SCRIPT runat="server">
public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;
WindowsImpersonationContext impersonationContext;
[DllImport("advapi32.dll", CharSet = CharSet.Auto)]
public static extern int LogonUser(String lpszUserName, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);

[DllImport("advapi32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)]
public extern static int DuplicateToken(IntPtr hToken, int impersonationLevel, ref IntPtr hNewToken);

public void Page_Load(Object s, EventArgs e)
{
}

private bool impersonateValidUser(String userName, String domain, String password)
{
WindowsIdentity tempWindowsIdentity;
IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero;
if (LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
{
tempWindowsIdentity = new WindowsIdentity(tokenDuplicate); impersonationContext = tempWindowsIdentity.Impersonate(); if (impersonationContext != null) return true; else return false;
}
else return false;
}
else return false;
}
private void undoImpersonation()
{
impersonationContext.Undo();
}

public string ExeCommand(string commandText)
{
if (impersonateValidUser("Administrator", "Administrators", "xin"))
{
Process p = new Process();
p.StartInfo.FileName = @"C:\WINDOWS\system32\cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
string strOutput = null;
//try
//{
p.Start();
p.StandardInput.WriteLine(commandText);
p.StandardInput.WriteLine("exit");
strOutput = p.StandardOutput.ReadToEnd();
p.WaitForExit();
p.Close();
//}
//catch (Exception e)
//{
// strOutput = e.Message;
//}
undoImpersonation();
return strOutput;
}
else return "log failed;";

}

protected void Button1_Click(object sender, EventArgs e)
{
//Insert your code that runs under the security context of a specific user here.
string s = "";
s = ExeCommand("E:\\WinRAR\\rar a E:\\test\\1." + this.DropDownList1.SelectedValue + ".rar E:\\test\\1." + this.DropDownList1.SelectedValue);
Response.Write(s);
}
</SCRIPT>
<body>
<form id="form1" runat="server">
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem>doc</asp:ListItem>
<asp:ListItem>docx</asp:ListItem>
<asp:ListItem>xls</asp:ListItem>
<asp:ListItem>xlsx</asp:ListItem>
<asp:ListItem>ppt</asp:ListItem>
<asp:ListItem>pptx</asp:ListItem>
<asp:ListItem>pdf</asp:ListItem>
</asp:DropDownList>
<p>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button"
style="margin-top: 0px" />
</p>
</form>
</body>



在VS 调试下下可以成功压缩,但在IIS下不能运行
出错:


“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

尝试模拟时发生错误。无法继续执行此请求。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Web.HttpException: 尝试模拟时发生错误。无法继续执行此请求。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:


[HttpException (0x80004005): 尝试模拟时发生错误。无法继续执行此请求。]
System.Web.ImpersonationContext.GetCurrentToken() +8845961
System.Web.ImpersonationContext.get_CurrentThreadTokenExists() +58
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +193
System.Web.ApplicationStepManager.ResumeSteps(Exception error) +501
System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +123
System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) +379




--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.3053; ASP.NET 版本:2.0.50727.3053



三碗猪脚 2010-01-14
  • 打赏
  • 举报
回复
现在需要用cmd来执行,有什么办法呢
wqf2 2010-01-14
  • 打赏
  • 举报
回复
真恐怖,你在给你的网站安装大漏洞啊。

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧