在IIS安全配置中,禁止执行脚本命令的核心是通过请求过滤、处理程序映射和URL授权规则,限制对cmd.exe、powershell.exe、wscript.exe、cscript.exe等危险命令文件的访问,从源头阻断攻击者利用Web漏洞执行系统命令的路径。
IIS禁止执行脚本命令的三种核心方法
配置IIS禁止执行脚本命令不是单一开关,而是通过多层机制协同工作,下面三种方法覆盖了绝大多数场景,根据你的网站类型和风险等级选择组合即可。
请求过滤禁止特定扩展名
请求过滤是IIS中最直接的拦截手段,它会在HTTP请求进入处理管道前检查文件扩展名,匹配到拒绝列表的请求直接返回404错误。
- 操作步骤:打开IIS管理器,选择目标站点,双击中间区域的“请求过滤”图标,点击右侧“拒绝扩展名”添加需要禁止的扩展名。
- 建议添加的扩展名:
.exe、.com、.bat、.cmd、.ps1、.vbs、.js、.msi、.scr、.pif等。 - 注意事项:请求过滤仅对URL中的扩展名生效,如果攻击者通过无扩展名的方式调用命令(如利用Windows短文件名或路径解析漏洞),则无法拦截,因此需要配合其他方法。
处理程序映射移除脚本执行入口
处理程序映射决定了IIS如何响应不同类型的请求,移除无关的脚本处理程序,可以防止攻击者通过上传脚本文件获取执行权限。
- 操作步骤:在站点管理界面双击“处理程序映射”,找到并移除以下不用的处理程序:ASP、ASP.NET、PHP、CGI-exe、Server-side Includes等,如果站点不需要执行任何脚本,保留StaticFile即可。
- 关键点:移除CGI-exe处理程序能直接阻止IIS调用任何.exe文件,但需确认站点是否依赖CGI功能,对于纯静态站点,这是最安全的做法。
通过web.config配置URL授权和文件拦截
对于无法通过界面修改的托管环境,或需要更精细化控制时,web.config文件是最佳选择,利用<system.webServer>下的<security>和<location>节点,可以禁止特定路径或文件名的访问。
- 配置示例:在站点根目录web.config的
<system.webServer>节点内添加:
<security>
<requestFiltering>
<denyUrlSequences>
<add sequence="cmd.exe" />
<add sequence="powershell.exe" />
<add sequence="wscript.exe" />
</denyUrlSequences>
<fileExtensions>
<add fileExtension=".exe" allowed="false" />
<add fileExtension=".ps1" allowed="false" />
</fileExtensions>
</requestFiltering>
</security>
- 优势:可以精确拦截URL中的特定字符串,即使命令文件没有扩展名也能阻止,同时支持对目录级别的权限控制,比如禁止访问
/bin/或/uploads/下的可执行文件。
哪些命令禁止执行?常见危险命令列表
IIS禁止执行脚本命令的核心是识别出能直接调用系统操作的可执行文件。 根据攻击者常用的命令包,整理出以下清单,按风险等级划分,方便你按需配置。
高危命令:必须禁止执行
| 命令 | 说明 | 风险场景 |
|---|---|---|
| cmd.exe | Windows命令提示符,攻击者最常利用的入口 | 执行任意系统命令、下载恶意负载 |
| powershell.exe | 强大的脚本执行环境,支持直接内存调用 | 无文件攻击、执行恶意脚本、提权 |
| wscript.exe / cscript.exe | Windows脚本宿主,可执行.vbs、.js | 运行恶意脚本、下载执行病毒 |
| mshta.exe | 运行HTA文件,常被用于绕过杀毒软件 | 执行恶意HTML应用、下载木马 |
| regsvr32.exe | 注册COM组件,攻击者利用它绕过白名单 | 通过SCT文件远程加载恶意代码 |
| rundll32.exe | 运行DLL文件,误报率低,常被滥用 | 执行DLL文件中的恶意函数 |
中危命令:建议根据场景禁止
| 命令 | 说明 | 风险场景 |
|---|---|---|
| certutil.exe | 证书工具,可下载文件,被用于下载恶意软件 | 绕过下载限制,获取远程payload |
| bitsadmin.exe | 后台智能传输服务,可下载/上传文件 | 大文件下载,常被用作持久化通道 |
| ftp.exe | 文件传输协议客户端 | 泄露数据或下载恶意文件 |
| net.exe / net1.exe | 网络命令管理工具 | 创建用户、修改网络配置、侦察内网 |
| taskkill.exe / tasklist.exe | 进程管理 | 结束安全软件进程、列出进程信息 |
低危命令:视业务需求决定
| 命令 | 说明 | 风险场景 |
|---|---|---|
| ping.exe | 网络连通性测试 | 探测主机存活、作为ICMP隧道 |
| tracert.exe | 路由跟踪 | 信息收集,了解网络拓扑 |
| nslookup.exe | DNS查询 | 解析域名,辅助数据外传 |
| whoami.exe | 查看当前用户身份 | 确认权限,为后续提权做准备 |
行业共识认为,禁止命令执行时优先从高危命令开始,再根据日志中出现的异常请求逐步扩展到中危命令,避免过度限制影响正常运维。
实战场景:IIS禁止执行脚本命令的配置示例
理论说再多,不如一个真实的配置过程,以下三个场景是站长最常见的安全需求,覆盖了从上传防护到权限控制的完整链路。
防止WebShell通过上传目录执行命令
很多攻击者通过文件上传漏洞将WebShell存到/uploads/目录,然后通过URL直接访问exe或ps1文件来执行命令,配置方法:
- 在IIS管理器中,选择
/uploads/目录,双击“请求过滤”,添加拒绝扩展名.exe、.ps1、.vbs、.bat。 - 移除该目录的所有脚本处理程序映射,只保留
StaticFile。 - 在web.config中增加
<location path="uploads">节点,禁止访问特定命令文件名:
<location path="uploads">
<system.webServer>
<security>
<requestFiltering>
<denyUrlSequences>
<add sequence="cmd" />
<add sequence="powershell" />
<add sequence="wscript" />
</denyUrlSequences>
</requestFiltering>
</security>
</system.webServer>
</location>
- 验证:尝试访问
http://你的站点/uploads/shell.exe,应返回404.7状态码。
限制应用程序池的执行权限
即使IIS层面拦截了请求,如果攻击者通过其他漏洞(如本地文件包含)在服务器上直接运行命令,仍需系统级防护。
- 将应用程序池标识设置为
ApplicationPoolIdentity或自定义低权限账户(如IIS_IUSRS)。 - 使用Windows文件系统权限,禁止该账户对高危命令的执行权限,在
C:WindowsSystem32cmd.exe上右键 -> 安全 -> 添加拒绝“读取和执行”权限给应用程序池账户。 - 注意:不要直接拒绝所有账户,否则操作系统自身可能异常,建议只拒绝IIS相关账户。
结合URL重写规则禁止命令执行参数
对于命令注入类型的攻击,攻击者常在URL参数中传递命令,如?cmd=whoami,此时请求过滤很难覆盖,而URL重写可以匹配参数内容。
- 安装URL重写模块,添加入站规则,模式为
(cmd.exe|powershell|wscript|regsvr32),条件检查{QUERY_STRING},匹配后返回403或重定向。 - 规则示例:
<rewrite>
<rules>
<rule name="Block cmd execution" stopProcessing="true">
<match url="." />
<conditions>
<add input="{QUERY_STRING}" pattern="(cmd.exe|powershell.exe|wscript.exe)" ignoreCase="true" />
</conditions>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" />
</rule>
</rules>
</rewrite>
- 优点:能拦截隐藏得较深的注入攻击,但不影响正常URL访问。
IIS禁止执行脚本命令的常见问题解答
Q1:IIS禁止执行脚本命令后,会影响网站正常功能吗?
取决于配置范围,如果只禁止了危险命令的文件扩展名,对正常网站功能影响有限,但若直接移除了ASP或PHP脚本处理程序,相应动态页面会全部失效,建议分步操作:先启用请求过滤禁止扩展名,观察日志和功能测试,再逐步收紧,很多情况下,大部分网站根本不需要在高危命令上做额外妥协,因为正常用户不会请求cmd.exe或powershell.exe。
Q2:除了禁止命令,还有哪些辅助安全措施?
单独禁止命令执行无法覆盖所有攻击路径,行业共识认为,IIS安全应结合以下措施:启用请求过滤并限制HTTP动词(如只允许GET和POST)、自定义错误页面隐藏真实错误信息、开启详细日志记录并定期审计、为应用程序池使用独立标识并限制磁盘写入权限、部署WAF(Web应用防火墙)检查恶意请求负载,据微软官方文档,合理的分层防御能将攻击成功率降低相当一部分。
Q3:如何在IIS 10中配置禁止执行PowerShell命令?
IIS 10运行在Windows Server 2016或2019上,打开IIS管理器,分别在站点级别和受影响的子目录(如/uploads)中配置请求过滤,添加拒绝扩展名.ps1、.psm1、.psd1、.ps1xml,在处理程序映射中移除所有PowerShell相关条目(默认可能不存在,但需确认),更彻底的做法是使用Windows AppLocker或软件限制策略,在系统层面禁止PowerShell.exe对非管理员用户执行。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/577203.html



