urlscan使用详解

简介: 0x01 简介与下载 URLScan是集成在IIS上的,可以制约的HTTP请求的安全工具。通过阻止特定的HTTP请求,URLScan安全工具有助于防止潜在的有害的请求到达服务器上的应用。 最新版URLScan 3.1,支持IIS 5.1,IIS 6和IIS 7在Windows Vista和Windows Server 2008。

0x01 简介与下载 

URLScan是集成在IIS上的,可以制约的HTTP请求的安全工具。通过阻止特定的HTTP请求,URLScan安全工具有助于防止潜在的有害的请求到达服务器上的应用。 

最新版URLScan 3.1,支持IIS 5.1,IIS 6和IIS 7在Windows Vista和Windows Server 2008。

下载地址:http://www.iis.net/downloads/microsoft/urlscan

32位安装程序:urlscan_v31_x86.msi 

64位安装程序:urlscan_v31_x64.msi 

 

0x02  安装与使用

 

看系统位数选择安装程序,和一般软件一样安装,但是,此软件不能选择安装路径,安装完成以后,我们可以在System32/InetSvr/URLScan目录下找到以下文件:

log:日志目录,开启日志记录功能,会在此目录下生成日志文件; 

urlscan.dll:动态连接库文件;

urlscan.ini:软件配置文件,这个文件很只要,因为对URLScan的所有配置,均有这个文件来完成。

 IIS管理--网站(右击属性)---ISAPI筛选器--点击添加--输入筛选器名称和可执行文件--点击确定即可。

 

0x03 使用技巧

 

1、以下两个选项需要设置为一,防止因编码、特殊文件夹导致的系统故障:

[options]节点中
AllowHighBitCharacters=1 ;default is 0
AllowDotInPath=1 ;default is 0

 

2、修复IIS短文件名漏洞:
[DenyUrlSequences]节点中
新增符号“~”

  

3、一定程度上,修复跨站脚本漏洞,已过滤“<”、“>”
[DenyQueryStringSequences]节点添加关键字如
svg
"
4、某些情况下,无法通过msi进行urlscan的安装工作,
请将urlscan文件夹复制到c:\windows\system32\inetsvr文件夹中
并在IIS筛选器中,引用urlscan.dll文件后,修改配置,进行urlscan的正常使用。

 

5、修改或隐藏IIS7.5的Server头信息
环境是 Windows 2008 Server R2 + IIS7.5
必须保证IIS角色下安装上ISAPI筛选器和IIS6元数据库兼容性。
首先下载 UrlScan 。然后直接安装。安装以后进入IIS管理,功能视图里ISAPI筛选器里应有UrlScan这一行。
全局配置文件
C:\Windows\System32\inetsrv\urlscan\UrlScan.ini
RemoveServerHeader=0          ; 改成1以后不显示Server
AlternateServerName=             ;如果RemoveServerHeader=0可以自己定义

 

 

 

0x04 配置修改

 

URLScan 的所有配置都是通过 URLScan.ini 文件执行的,此文件位于System32\Inetsrv\URLscan 文件夹中。要配置 URLScan,请在文本编辑器(如记事本)中打开此文件,进行相应的更改,然后保存此文件。 注意:要使更改生效,必须重新启动 Internet 信息服务 (IIS)。一种快速的实现方法是在命令提示符处运行 IISRESET。


urlscan配置文件必须是标准ini文件结构,也就是由节,串和值组成 


URLScan.ini 文件包含以下几节:


·      [Options]:此节描述常规 URLScan 选项。

·      [AllowVerbs]  [DenyVerbs]:此节定义 URLScan 允许的谓词(又称作 HTTP 方法)。

·      [DenyHeaders]:此节列出 HTTP 请求中不允许的 HTTP 标头。如果 HTTP 请求中包含此节中列出的 HTTP 标头之一,URLScan 将拒绝该请求。

·      [AllowExtensions]  [DenyExtensions]:此节定义 URLScan 允许的文件扩展名。

·      [DenyURLSequences]:此节列出 HTTP 请求中不允许的字符串。URLScan 拒绝那些包含此节中出现的字符串的 HTTP 请求。

本文将更详细地介绍每一节。

[Options] 

 [Options] 节中,可以配置许多 URLScan 选项。此节中的每一行都具有以下格式:

OptionName=OptionValue

可用选项及其默认值如下所示:

·      UseAllowVerbs=1

默认情况下,此选项设置为 1。如果将此选项设置为 1,则 URLScan 仅允许那些使用 [AllowVerbs] 节中列出的谓词的 HTTP 请求。URLScan 禁止任何不使用这些谓词的请求。如果将此选项设置为 0,则 URLScan忽略 [AllowVerbs] 节,相反仅禁止那些使用 [DenyVerbs] 节中列出的谓词的请求。

·      UseAllowExtensions=0

默认情况下,此选项设置为 0。如果将此选项设置为 0,则 URLScan 禁止对 [DenyExtensions] 节中列出的文件扩展名的请求,但允许对任何其他文件扩展名的请求。如果将此选项设置为 1,则 URLScan 仅允许对带 [AllowExtensions] 节中列出的扩展名的文件的请求,而禁止对任何其他文件的请求。

·      NormalizeUrlBeforeScan=1

IIS 
收到用 URL 编码的请求。这表示某些字符可能被替换为百分号 (%) 后跟特定的数字。例如,%20 对应于一个空格,因此,对 http://myserver/My%20Dir/My%20File.htm 的请求与对 http://myserver/My Dir/My File.htm 的请求是相同的。标准化就是对 URL 编码请求进行解码的过程。默认情况下,此选项设置为 1。如果将 NormalizeUrlBeforeScan 选项设置为 1,则 URLScan 分析已解码的请求。如果将此选项设置为 0,则 URLScan 分析未解码的请求。将此选项设置为 0 会影响 URLScan 禁止某种攻击的能力。

·      VerifyNormalization=1

由于百分号 (%) 本身可以是 URL 编码的,所以攻击者可以向服务器提交一个精心制作的、基本上是双重编码的请求。如果发生这种情况,IIS 可能会接受本应视作无效而拒绝的请求。默认情况下,此选项设置为1。如果将 VerifyNormalization选项设置为 1,则 URLScan 将对 URL 执行两次标准化。如果第一次标准化后的 URL 与第二次标准化后的 URL 不同,URLScan 将拒绝该请求。这样就可以防止那些依赖双重编码请求的攻击。

·      AllowHighBitCharacters=0

默认情况下,此选项设置为 0。如果将此选项设置为 0,则 URLScan 拒绝任何包含非 ASCII 字符的请求。这样可以防止某些类型的攻击,但同时可能也会禁止对某些合法文件的请求,如带有非英文名的文件。

·      AllowDotInPath=0

默认情况下,此选项设置为 0。如果将此选项设置为 0,则 URLScan 拒绝所有包含多个句点 (.) 的请求。这样可以防止通过将安全的文件扩展名放入 URL 的路径信息或查询字符串部分,以达到伪装请求中的危险文件扩展名的企图。例如,如果将此选项设置为 1,则 URLScan 可能允许对http://servername/BadFile.exe/SafeFile.htm 的请求,因为它认为这是对 HTML 页的请求,但实际上这是一个对可执行 (.exe) 文件的请求,而该文件的名称在 PATH_INFO 区域中显示为 HTML 页的名称。如果将此选项设置为 0URLScan 可能还会拒绝对包含句点的目录的请求。

·      RemoveServerHeader=0

默认情况下,Web 服务器返回一个标头,其中指出了 Web 服务器在所有响应中运行的 Web 服务器软件。这会增加服务器遭受攻击的可能性,因为攻击者可以确定服务器正在运行 IIS,于是便攻击已知的 IIS 问题,而不是试图使用为其他 Web 服务器设计的攻击手段来攻击 IIS 服务器。默认情况下,此选项设置为 0。如果将 RemoveServerHeader 选项设置为 1,可以防止您的服务器发送将其标识为 IIS 服务器的标头。如果将 RemoveServerHeader 设置为 0,则仍发送此标头。

·      AlternateServerName=(默认情况下不指定)

如果将 RemoveServerHeader 设置为 0,可以在 AlternateServerName 选项中指定一个字符串以指定将在服务器标头中传回的内容。如果将 RemoveServerHeader 设置为 1,则此选项将被忽略。

·      EnableLogging=1

默认情况下,URLScan  %WINDIR%\System32\Inetsrv\URLScan 中保留所有被禁止的请求的完整日志。如果不希望保留此日志,可将 EnableLogging 设置为 0

·      PerProcessLogging=0

默认情况下,此选项设置为 0。如果将此选项设置为 1URLScan 将为承载 URLScan.dll 的每个进程创建一个单独的日志。如果将此选项设置为 0,所有进程将记录到同一个文件中。

·      PerDayLogging=1

默认情况下,此选项设置为 1。如果将该值设置为 1,则 URLScan 每天创建一个新的日志文件。每个日志文件的名称都是 Urlscan.MMDDYY.log,其中 MMDDYY 是日志文件的日期。如果将该值设置为 0,则所有日志记录都保存在同一个文件中,与日期无关。

·      AllowLateScanning=0

默认情况下,此选项设置为 0。如果将此选项设置为 0,则 URLScan 作为高优先级筛选器运行,这表示它先于服务器上安装的所有其他 Internet 服务器应用程序编程接口 (ISAPI) 筛选器执行。如果将此选项设置为1,则 URLScan 作为低优先级筛选器运行,以便其他筛选器可以在 URLScan 进行任何分析之前修改URLFrontPage Server Extensions (FPSE) 要求将此选项设置为 1

·      RejectResponseUrl=(默认情况下不指定)

此选项指定在 URLScan 禁止请求时运行的文件的虚拟路径。这允许您自定义针对被禁止的请求发送给客户机的响应。必须将 RejectResponseUrl 指定为相应文件的虚拟路径,如/Path/To/RejectResponseHandler.asp。可以指定 URLScan 通常禁止的文件,如 Active Server Pages (ASP)页。还可以从该页指定以下服务器变量:

o     HTTP_URLSCAN_STATUS_HEADER:此变量指定请求被禁止的原因。

o     HTTP_URLSCAN_ORIGINAL_VERB:此变量指定被禁止的请求中的原始谓词(例如GETPOSTHEAD  DEBUG)。

o     HTTP_URLSCAN_ORIGINAL_URL:此变量指定被禁止的请求中的原始 URL

如果将 RejectResponseUrl 设置为特殊值 /~*,则 URLScan 使用仅日志记录模式。这允许 IIS 为所有请求提供服务,但它会在 URLScan 日志中为所有通常被禁止的请求添加相应的项。这在需要测试 URLScan.ini 文件时很有用。

如果没有指定 RejectResponseUrl 的值,则 URLScan 使用默认值 /<Rejected-By-UrlScan>

·      UseFastPathReject=0

默认情况下,此选项设置为 0。如果将此选项设置为 1,则 URLScan 忽略 RejectResponseUrl 设置并立即向浏览器返回 404 错误信息。这比处理 RejectResponseUrl 要快,但它允许的日志记录选项没有那么多。如果将此选项设置为 0,则 URLScan 使用 RejectResponseUrl 设置来处理请求。

[AllowVerbs] 节和 [DenyVerbs] 

[AllowVerbs] 节和 [DenyVerbs] 节定义 URLScan 允许的 HTTP 谓词(又称作方法)。常用的 HTTP 谓词包括GETPOSTHEAD  PUT。其他应用程序(如 FPSE  Web 分布式创作和版本控制 (WebDAV))使用更多的谓词。

[AllowVerbs] 节和 
[DenyVerbs] 节的语法相同。它们由 HTTP 谓词列表组成,每个谓词占一行。

URLScan 根据 
[Options] 节中 UseAllowVerbs 选项的值来决定使用哪一节。默认情况下,此选项设置为 1。如果将UseAllowVerbs 设置为 1,则 URLScan 仅允许那些使用 [AllowVerbs] 节中列出的谓词的请求。不使用任何这些谓词的请求将被拒绝。在这种情况下,[DenyVerbs] 节被忽略。

如果将 UseAllowVerbs 设置为 0,则 URLScan 拒绝那些使用 [DenyVerbs] 节中明确列出的谓词的请求。允许任何使用未在此节中出现的谓词的请求。在这种情况下,URLScan 忽略 [AllowVerbs] 节。


[DenyHeaders] 

当客户机向 Web 服务器请求页面时,它通常会发送一些包含有关此请求的其他信息的 HTTP 标头。常见的HTTP 标头包括:

·      Host:

此标头包含 Web 服务器的名称。

·      Accept:

此标头定义客户机可以处理的文件类型。

·      User-Agent:

此标头包含请求页面的浏览器的名称。

·      Authorization:

此标头定义客户机支持的身份验证方法。

客户机可能会向服务器发送其他标头以指定其他信息。

 [DenyHeaders] 节中,您定义 URLScan 将拒绝的 HTTP 标头。如果 URLScan 收到的请求中包含此节中列出的任何标头,它将拒绝该请求。此节由 HTTP 标头列表组成,每个标头占一行。标头名后面必须跟一个冒号 (:)(例如 Header-Name:)。

[AllowExtensions] 节和 [DenyExtensions] 

大多数文件都有一个标识其文件类型的文件扩展名。例如,Word 文档的文件名一般以 .doc 结束,HTML 文件名一般以 .htm  .html 结束,纯文本文件名一般以 .txt 结束。[AllowExtensions] 节和 [DenyExtensions] 节允许您定义 URLScan 将禁止的扩展名。例如,您可以配置 URLScan 以拒绝对 .exe 文件的请求,防止 Web 用户在您的系统上执行应用程序。

[AllowExtensions] 节和 [DenyExtensions] 节的语法相同。它们由文件扩展名列表组成,每个扩展名占一行。扩展名以句点 (.) 开头(例如 .ext)。

URLScan 根据 
[Options] 节中 UseAllowExtensions 的值来决定使用哪一节。默认情况下,此选项设置为 0。如果将UseAllowExtensions 设置为 0,则 URLScan 仅拒绝对 [DenyExtensions] 节中列出的文件扩展名的请求。允许此节中未列出的任何文件扩展名。[AllowExtensions] 节被忽略。

如果将 UseAllowExtensions 设置为 1,则 URLScan 拒绝对 [AllowExtensions] 节中未明确列出的任何文件扩展名的请求。仅允许对此节中列出的文件扩展名的请求。[DenyExtensions] 节被忽略。

有关如何配置 URLScan 以允许对没有扩展名的文件的请求的其他信息,请单击下面的文章编号,以查看 Microsoft知识库中相应的文章:

312376 如何配置 URLScan 以在 IIS 中允许使用空扩展名的请求

[DenyUrlSequences] 

可以配置 URLScan 以禁止那些 URL 中包含某些字符序列的请求。例如,可以禁止那些包含两个连续句点 (..)的请求,利用目录遍历漏洞的攻击中经常采用这种手段。要指定一个想要禁止的字符序列,请将此序列单独放在 [DenyUrlSequences] 节中的一行上。

请注意,添加字符序列可能会对 Microsoft Exchange  Outlook Web Access (OWA) 产生负面影响。当您从 OWA打开一个邮件时,该邮件的主题行包含在服务器所请求的 URL 中。由于 URLScan.ini 文件禁止任何包含百分号 (%)和连字符 (&) 的请求,因此,当用户尝试打开主题行为“Sales increase by 100%”“Bob & Sue are coming to town”的邮件时,会收到 404 错误信息。要解决此问题,可以从 [DenyUrlSequences] 节中删除这些序列。请注意,这样做会降低安全性,因为它有可能允许危险的请求到达服务器。 

有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

325965 URLScan 工具可能会导致 Outlook Web Access 中出现问题

 

 

 

 

参考博客:

URL SCAN简介 


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
7月前
|
JavaScript 安全 前端开发
在Vue中实现回车键切换焦点
在Vue中实现回车键切换焦点
382 0
|
10月前
|
数据采集 存储 搜索推荐
如何高效实现搜索引擎网页爬取
如何高效实现搜索引擎网页爬取
|
10月前
|
存储 负载均衡 关系型数据库
基于Flink的高吞吐精确一致性入湖实现
AnalyticDB助力企业降本增效,构建企业级数据分析平台
基于Flink的高吞吐精确一致性入湖实现
|
数据安全/隐私保护 虚拟化
搭建OWASP靶机
OWASP靶机下载地址https://sourceforge.net/projects/owaspbwa/files/
593 0
搭建OWASP靶机
|
SQL 关系型数据库 MySQL
MySQL 定时备份的几种方式,这下稳了!
在MySQL中提供了命令行导出数据库数据以及文件的一种方便的工具mysqldump,我们可以通过命令行直接实现数据库内容的导出dump,首先我们简单了解一下mysqldump命令用法:
MySQL 定时备份的几种方式,这下稳了!
|
Web App开发 机器学习/深度学习 监控
Session Replay产品调研分析
Session Replay产品调研分析
450 0
|
安全 Linux 开发者
Python 命令行库的大乱斗
当你想实现一个命令行程序时,或许第一个想到的是用 Python 来实现。比如 CentOS 上大名鼎鼎的包管理工具 `yum` 就是基于 Python 实现的。 而 Python 的世界中有很多命令行库,每个库都各具特色。但我们往往不知道其背后的设计理念,也因此在选择时感到迷茫。这些库的作者为何在重复造轮子,他是从哪个角度来考虑,来让命令行库“演变”到一个新的更好用的形态。 为了能够更
1148 0
|
缓存 Linux 开发工具
CentOS 7- 配置阿里镜像源
阿里镜像官方地址http://mirrors.aliyun.com/ 1、点击官方提供的相应系统的帮助 :2、查看不同版本的系统操作: 下载源1、安装wget yum install -y wget2、下载CentOS 7的repo文件wget -O /etc/yum.
143755 0
|
SQL Java 数据库连接
MyBatis超详细介绍——SQL语句构建器类
MyBatis超详细介绍——SQL语句构建器类 (本文作为学习笔记,了解更多请参考:MyBatis参考文档) MyBatis3提供了SQL类帮助构造SQL语句: private String selectPersonSql() { return new SQL() {{ SELECT("P.
2703 0