导语:根据Netcraft在2018年9月的最新全球Web服务器报告显示,Microsoft IIS依旧以9.57%的比例占据全球第三大最繁忙服务器,落后于Apache 34.07%和Nginx 25.45%。
一、 全球第三大网络服务器
Internet Information Services(IIS,以前称为Internet Information Server)互联网信息服务是Microsoft公司提供的可扩展Web服务器,支持HTTP,HTTP/2,HTTPS,FTP,FTPS,SMTP和NNTP等。起初用于Windows NT系列,随后内置在Windows 2000、Windows XP Professional、Windows Server 2003和后续版本一起发行。IIS目前只适用于Windows系统,不适用于其他操作系统。
根据Netcraft在2018年9月的最新全球Web服务器报告显示,Microsoft IIS依旧以9.57%的比例占据全球第三大最繁忙服务器,落后于Apache 34.07%和Nginx 25.45%。目前流行的Windows版本都默认安装IIS服务,但同时IIS的安全性一直被业内诟病,一旦IIS出现高危漏洞,将会出现范围广、影响深的特点。
目前IIS一共发行12个版本,从IIS 1.0版本至IIS 10.0版本,IIS 1.0-4.0已经基本退出市场,IIS 5.0-10.0是Web市场主要使用的网站服务器。随着Windows版本发布和不断更新,IIS自身的安全性也有了较大的提升。在2005-2018年期间,IIS漏洞呈现逐年减少的趋势,同时也说明了IIS漏洞POC公布越来越少、漏洞挖掘的难度也在提升。
从上述IIS漏洞统计表格可以看出,IIS 7.5、IIS 8.5和IIS 10.0是目前全球使用最多的三款IIS版本,分别对应受影响漏洞12个、4个和2个,呈现受影响漏洞数量递减的趋势。同时,在历年的IIS版本漏洞中,IIS 6.0、IIS 5.1、IIS 7.5和IIS 7.0受影响的漏洞数居前四位。
二、 IIS漏洞分析
千里目实验室针对IIS近十几年(2005年以后)的35个漏洞进行和整理和分析,IIS漏洞主要分布在缓冲区溢出、认证绕过、DOS拒绝服务、代码执行和信息泄露,其中以MS15-034远程代码执行漏洞最为严重。
由上表可以看到,IIS历年漏洞主要以远程漏洞为主,占漏洞总数85.71%,本地漏洞有5个,占漏洞总数14.29%。其中5个本地漏洞分别是:(MS12-073)Microsoft IIS密码信息泄露漏洞CVE-2012-2531、 Microsoft IIS源代码泄露漏洞CVE-2005-2678、 (MS17-016)Microsoft Internet信息服务器跨站脚本漏洞CVE-2017-0055、 (MS16-016)IIS WEBDAV特权提升漏洞CVE-2016-0051、 (MS08-005)Microsoft IIS 文件更改通知本地权限提升漏洞CVE-2008-0074。
以下主要针对IIS漏洞中可以远程利用的重点漏洞做分析和复现:
1. 缓冲区溢出漏洞
1.1 (MS09-053)Microsoft IIS FTPd服务NLST命令栈缓冲区CVE-2009-3023
1.1.1 漏洞描述
Microsoft IIS内嵌的FTP服务器中存在基于栈的缓冲区溢出漏洞。如果远程攻击者对带有特制名称的目录发布了包含有通配符的FTP NLST(NAME LIST)命令的话,就可以触发这个溢出,导致执行任意代码。仅在攻击者拥有写访问权限的情况下才可以创建带有特殊名称的目录。
1.1.2 漏洞分析和复现
· 漏洞影响版本:IIS 5.0、IIS 5.1、IIS 6.0
· 漏洞分析:
IIS包括用于通过TCP计算机网络交换和操作文件的FTP服务器服务。它默认侦听端口21以获取来自FTP客户端的传入连接。IIS支持的FTP命令之一是名称列表(NLST)命令。此命令用于将目录列表从服务器传输到客户端。该命令的语法如下:
NLST <SPACE> <pathname> <CRLF>
此命令中的路径名应指定目录或其他特定于系统的文件组描述符;在pathname为NULL时,使用当前目录。NLST命令可以使用诸如“*”之类的通配符来引用多个路径。
Microsoft Internet信息服务(IIS)中存在缓冲区溢出漏洞。该漏洞是由于处理NLST FTP命令时边界检查不足造成的。当FTP用户请求包含通配符的路径名过长的目录列表时,易受攻击的代码会将目录路径名复制到0x9F(159)字节的基于堆栈的缓冲区中,而不进行边界验证。提供包含大于0x9F(159)字节的路径名会使堆栈缓冲区溢出,从而可能会覆盖关键进程数据(如函数返回地址)。
远程身份验证的攻击者可以通过连接到易受攻击的IIS FTP服务器并向目标服务器发送恶意NLST命令来利用此漏洞。成功利用将导致使用System权限执行代码。如果代码执行攻击不成功,可能会导致受影响的FTP会话异常终止。
注意:为了成功利用此漏洞,NLST命令中指定的长路径名必须存在于目标系统上。因此,利用此漏洞的攻击可能伴随着MKD命令的使用。
· 漏洞类型:可远程利用,存在缓冲区溢出漏洞,可触发代码执行
· 漏洞复现:
复现环境:Win XP SP3 x64专业版,默认IIS 5.1
1. 搭建好IIS FTP靶机环境,测试anonymous默认匿名用户可用,且可创建和读写目录;
2. 测试正常MKD创建和NLST正常长度的目录的功能是否正常:
以上somefolder为FTP服务器上正常长度文件夹,NLST命令执行成功并返回结果提示226。
3. 测试创建和NLST异常目录长度,服务器返回150,打开数据连接,成功执行命令。
· 漏洞缓解:
1. 此漏洞仅在IIS 5.x和6.0版本存在,升级IIS版本或者更新MS09-053补丁即可规避此漏洞;
2. 此漏洞成功利用的条件主要包括:IIS启用FTP服务且存在FTP默认站点、攻击者登陆FTP的账户有创建和读写文件夹的权限。
2. DOS拒绝服务漏洞
2.1 (MS07-041)Microsoft IIS 5.1远程缓冲区溢出漏洞 CVE-2005-4360
2.1.1 漏洞描述
Microsoft IIS处理某些畸形的HTTP请求时存在漏洞,远程攻击者可能利用此漏洞对服务器进行拒绝服务攻击。远程攻击者可以使用WEB浏览器之类的工具发送特制的匿名HTTP请求导致IIS服务进程inetinfo.exe崩溃。仅在文件夹的"执行权限"设置为"脚本和可执行程序"时才会出现这个漏洞。有漏洞的虚拟文件夹包括"/_vti_bin"等。此外如果提交恶意请求还可能会触发缓冲区溢出,导致在用户系统上执行任意代码。
2.1.2 漏洞分析和复现
· 漏洞影响版本:IIS 5.1
· 漏洞分析:
IIS包括一个能够提供静态和动态内容的Web服务器组件。IIS的Web组件提供Web应用程序功能。通过Web应用程序,服务器可以在后端执行脚本,并将生成的内容提供给请求客户端。客户端可以请求许多可执行资源,例如Perl脚本、Active Server Pages(ASP)或动态链接的库资源。用于提供动态动态内容的虚拟目录需要配置后台执行脚本的权限。
Microsoft Internet Information Services产品的HTTP服务器组件中存在可远程利用的拒绝服务漏洞。在特殊情况下,当多次请求动态链接的库资源时,受影响的服务可能会因此而关闭。由于服务器无法处理格式错误的URL请求,因此创建了该漏洞。恶意请求必须满足几个条件才能触发此漏洞。请求URL必须包含来自以下字符的有限集合中的字符(注意,不可见字符需要使用以下字符范围的URL编码形式):
• %3f
• ”
• *
• :
• <
• >
•字符%01 – %1f的范围
请求还必须包含波形符“~”字符,后面跟一个十进制数字。
· 漏洞类型:可远程利用,可触发DOS攻击
· 漏洞复现:
复现环境:Win XP SP3 x64专业版,默认IIS 5.1
1. 配置IIS默认wwwroot根目录下的虚拟目录_vti_bin执行权限为“脚本和可执行文件”权限;
2. 浏览器发送恶意url远程访问靶机环境,复现成功,服务器返回500错误:
Eg:http://192.168.180.200/_vti_bin/.dll/%1f\~0
· 漏洞缓解:
1. 此漏洞仅在IIS 5.1版本存在,升级IIS版本或者更新MS07-041补丁即可规避此漏洞;
2. 此漏洞成功利用的条件主要包括:要求在服务器端将请求的虚拟目录配置为“脚本和可执行文件”权限,不开启此权限的服务器不存在漏洞。
2.2 (MS09-053)Microsoft IIS FTP服务器递归列表拒绝服务漏洞 CVE-2009-2521
2.2.1 漏洞描述
IIS 5.0至7.0版本的FTP服务在处理递归目录列表请求时存在栈消耗漏洞。拥有对目录写访问权限的远程攻击者可以通过提交包含有通配符(如星形标识符)的请求导致拒绝服务(守护进程崩溃)。
2.2.2 漏洞分析和复现
· 漏洞影响版本:IIS 5.0、IIS 5.1、IIS 6.0、IIS 7.0
· 漏洞分析:
通过包含通配符的list(ls)-R命令在Microsoft IIS FTP服务器5.0到7.0中触发拒绝服务条件,即ls "-R p*/../"命令可导致FTP服务器拒绝服务。 此漏洞利用有三个条件:
(1)一个有效的ftp帐户,拥有只读或写入权限;
(2)“FTP发布”服务必须在启动类型中配置为“手动”模式;
(3) FTP根目录下至少有一个目录。
· 漏洞类型:可远程利用,可触发DOS攻击
· 漏洞复现:
复现环境:Win XP SP3 x64专业版,默认IIS 5.1
1. 添加FTP服务器角色,IIS信息服务管理控制台“FTP站点下”启动FTP默认站点
2. 配置ftp默认用户anonymous/anonymous,拥有读写目录权限;
3. 目录下创建一个文件夹BB,然后输入ls "-R p*/../",成功复现DOS拒绝服务,ftp连接关闭:
中间很多重复:
p*/../BB: BB
FTP服务器提示“远程主机关闭连接”,FTP拒绝服务,漏洞复现成功。
· 漏洞缓解:
1. 此漏洞仅在IIS 5.0-7.0版本存在,升级IIS版本或者更新MS09-053补丁即可规避此漏洞;
2. 此漏洞成功利用的条件主要包括:IIS启用FTP服务且存在FTP默认站点、攻击者登陆FTP的账户有创建和读写文件夹的权限。
3. 认证绕过漏洞
3.1 IIS认证绕过和源码泄露漏洞复现
3.1.1 漏洞描述
Microsoft IIS(Internet Information Server)是Microsoft Windows系统默认自带的Web服务器软件,其中默认包含FTP服务。Microsoft IIS中存在认证绕过漏洞和源码泄露漏洞,该漏洞源于对用户提供的输入未经正确的验证。攻击者可利用这些漏洞在服务器进程上下文中获取密码保护资源和查看源代码文件的未授权访问,且有助于进一步攻击。
3.1.2 漏洞分析和复现
· 漏洞影响版本:IIS 6.0、IIS 7.5
· 漏洞分析:
Microsoft IIS由于无法正确清理用户提供的输入,容易出现身份验证绕过漏洞和源代码泄露漏洞。主要包括以下三类绕过:
(1) 安装了PHP的Microsoft IIS 6.0身份验证绕过:
IIS / 6.0加载受保护(如:admin)目录中的PHP文件需要用户认证信息(用户名和密码访问),如果将“:: $ INDEX_ALLOCATION”后缀附加到目录名称后面,存在绕过认证并可能访问管理文件等特殊情况,导致IIS服务器重要信息泄露;
Eg:/admin::$INDEX_ALLOCATION/index.php
(2) Microsoft IIS 7.5经典ASP身份验证绕过:
配置了经典ASP和.NET Framework 4.0的Microsoft IIS 7.5,通过将“:$ i30:$ INDEX_ALLOCATION”后缀附加到需要认证的请求目录名称后面,可以绕过经典的ASP文件访问限制;
Eg:举例:/admin:$i30:$INDEX_ALLOCATION/index.asp
(3) Microsoft IIS 7.5 .NET源代码公开和身份验证绕过:
在配置中安装了PHP的Microsoft IIS / 7.5,存在认证绕过漏洞;
Eg:http://<victimIIS75>/admin:$i30:$INDEX_ALLOCATION/admin.php
除此之外,通过将/.php附加到ASPX文件(或使用未通过请求过滤规则阻止的.NET框架的任何其他文件,如错误配置:.CS,.VB等文件)。IIS 7.5使用文件的完整源代码进行响应,并将其作为PHP代码执行。这意味着通过使用上传功能,可以(在特殊情况下)执行任意PHP代码。
Eg: http://<victimIIS75>/Default.aspx/.php (php任意代码执行)
· 漏洞类型:可远程利用,可触发认证绕过和信息泄露
· 漏洞复现:
复现环境:Windows 7 x64位,默认IIS 7.5
以下验证复现上述(3)的漏洞,(1)和(2)类似此处不做验证:
1. IIS网站根目录下创建admin用户目录,关闭默认用户认证,换言之,访问/admin/index.php目录下的文件需要认证信息,认证失败或者无认证信息将会返回401未授权页面;
2. 配置完成后,重启IIS服务器,浏览器远程访问此文件:http://192.168.180.207/admin/index.php,默认IIS账户访问提示401未授权;
3. 接下来,利用:$i30:$INDEX_ALLOCATION来绕过此限制,浏览器远程访问:
http://192.168.180.207/admin:$i30:$INDEX_ALLOCATION/index.php,成功绕过并访问到敏感信息;
4. 除此之外,如果目标站点限制上传和访问php文件,可以利用上传aspx(.net支持解析的文件类型)文件逃避限制,将其当做php代码执行;
Eg:网站目录下有一个index.aspx的文件,里面写有php代码,正常通过http://192.168.180.207/admin:$i30:$INDEX_ALLOCATION/index.aspx访问此文件无法执行代码,通过在末尾加上index.aspx/.php形式访问将会成功执行php代码;
a. 正常绕过访问index.aspx文件,页面返回乱码,未执行phpinfo代码:
b. 通过在末尾加上/.php,成功执行php代码:
· 漏洞缓解:
1. IIS 7.5 配置.NET Framework 2.0不受上述(2)的绕过影响;
2. 攻击者需要事先获取IIS服务器受认证保护目录;
4. 信息泄露漏洞
4.1 Microsoft IIS 短文件名泄露漏洞
4.1.1 漏洞描述
IIS短文件名漏洞是由于HTTP请求中携带旧DOS 8.3名称约定(SFN)的代字符(~)波浪号引起的。它允许远程攻击者在Web根目录下公开文件和文件夹名称(不应该可被访问)。攻击者可以找到通常无法从外部直接访问的重要文件,并获取有关应用程序基础结构的信息。
4.1.2 漏洞分析和复现
· 漏洞影响版本:IIS 5.0-10.0全系列版本
· 漏洞分析:
Windows 支持以 8.3 格式生成与 MS-DOS 兼容的(短)文件名,以允许基于 MS-DOS 或 16 位 Windows的程序访问这些文件。基于Windows的IIS服务器默认根目录C:\inetpub\wwwroot下的网页脚本文件和目录符合一定条件时,会生成相应的短文件名。此时,攻击者利用HTTP的DEBUG、OPTIONS、GET、POST、HEAD、TRACE等方法携带波浪号,可以对IIS服务器短文件名进行暴力猜解,依据返回的页面信息和状态码来确认真实存在的文件名,从而获取服务器敏感信息,为下一步攻击做准备。
· 漏洞类型:可远程利用,可触发信息泄露
· 漏洞复现:
复现环境:Windows 7 x64位,默认IIS 7.5
1. 通过cmd下进入IIS网站根目录C:\inetpub\wwwroot,输入“dir /x”查看已存在的短文件名:
2. 使用公开POC或者扫描程序探测目标靶机的短文件名,成功猜解到服务器根目录短文件名称:
· 漏洞缓解:
1. 限制IIS服务器HTTP方法,除了必要的GET、POST方法,其他HTTP方法建议关闭,视情况开启;
2. IIS服务器文件建议使用复杂字符或者中文命名,增加后期攻击者暴力破解难度;
3. 针对已存在的IIS服务器,建议关闭NTFS 8.3文件格式的支持或者修改注册表禁用短文件名功能。
注:详细原理和解决方案请参考:https://www.freebuf.com/articles/web/172561.html
5. 代码执行漏洞
5.1 Microsoft IIS畸形文件扩展名绕过安全限制漏洞 CVE-2009-4444
5.1.1 漏洞描述
IIS服务器错误的执行了带有多个扩展名的文件中所包含的ASP代码。例如,malicious.asp;.jpg被执行为了ASP文件。很多文件上传程序仅检查文件扩展名的最后部分,因此这可能导致绕过保护机制向服务器上传恶意可执行文件。
5.1.2 漏洞分析和复现
· 漏洞影响版本:IIS 6.0
· 漏洞分析:
此漏洞主要原因是IIS第三方上传应用没有限制文件上传格式或者限制不够严格,只检查了文件末尾的格式,导致攻击者可以将如Asp webshell伪装成malicious.asp;.jpg文件格式上传到IIS服务器。IIS的Classic ASP功能在处理asp文件时,被此畸形文件格式的分号截断了,认为是asp文件并进行相应的解析处理。攻击者则在获取上传路径后通过远程访问执行此webshell,控制IIS服务器甚至Windows宿主机器。
· 漏洞类型:可远程利用,文件上传绕过可触发代码执行
· 漏洞复现:
复现环境:Win server 2003 Sp2 32位企业版,默认IIS 6.0
1. IIS服务器根目录下创建一个名为aspwebshell.asp;.jpg的文件,用记事本打开,放入asp webshell代码(实际利用过程中是通过第三方应用上传绕过漏洞上传此文件,并设法获取此上传路径);
2. 通过浏览器远程访问此文件,http://192.168.180.201/aspwebshell.asp;.jpg,成功执行asp webshell代码:
· 漏洞缓解:
1. 严格限制IIS第三方应用上传文件的格式;
2. 此漏洞仅影响IIS 6.0,其他版本解析asp文件不会被分号截断,可升级至无此漏洞的IIS版本。
5.2 (MS15-034)Microsoft IIS远程代码执行漏洞复现 CVE-2015-1635
5.2.1 漏洞描述
Microsoft Windows是美国微软(Microsoft)公司发布的一系列操作系统。Microsoft Internet Information Services(IIS)是一套运行于Microsoft Windows中的互联网基本服务。使用Microsoft IIS 6.0以上版本的Microsoft Windows的HTTP协议堆栈(HTTP.sys)中存在远程执行代码漏洞,该漏洞源于HTTP.sys文件没有正确分析经特殊设计的HTTP请求。成功利用此漏洞的攻击者可以在系统帐户的上下文中执行任意代码。
5.2.2 漏洞分析和复现
· 漏洞影响版本:IIS 7.5、IIS 8.0、IIS 8.5
· 漏洞分析:
IIS进程w3wp.exe接收到HTTP请求后,将数据缓存到内核中,并整合HTTP回应头,最后由http.sys组织数据包经由网络内核组件发送出去。请求中包括Range对象的指定范围,而缓存中则包含了http文件和大小信息等。
根据公开POC,构造包含“Range: bytes=0-18446744073709551615”的HTTP请求并发送到IIS 7.5-8.5服务器,如果IIS服务器返回“Requested Range Not Satisfiable”,则存在漏洞,如果返回“The request has an invalid header name”或者没有回应,则说明漏洞已经修补或者不存在漏洞。
· 漏洞类型:可远程利用,可触发代码执行
· 漏洞复现:
复现环境:Win server 2008 R2 64位企业版,默认IIS 7.5
1. 开启IIS默认网站
2. 根据公开poc发送包含特殊设计的Range字段攻击靶机环境,成功检测到漏洞:
· 漏洞缓解:
1. 禁用 IIS 内核缓存,详情见微软官方公告:
https://docs.microsoft.com/zh-cn/security-updates/securitybulletins/2015/ms15-034
2. 升级IIS至IIS 10.0版本,此版本不存在此漏洞。
三、 漏洞总结
IIS 远程漏洞主要包括缓冲区溢出、认证绕过、拒绝服务、代码执行和信息泄露漏洞,本地漏洞主要分布在信息泄露和权限提升漏洞分类,大部分漏洞利用难度较大,但是一旦成功被攻击者利用,影响的不仅仅只是IIS服务器,甚至可能是运行IIS的Windows主机。如果用户主机被利用,那么攻击者可以将此台主机当作肉鸡攻击内网中的其他主机、服务器或者网络设备等,后果不堪设想。
如果IIS服务器的网站配置不当,攻击者可以通过IIS短文件名猜解和暴力破解用户隐私文件并进行认证绕过访问,获取用户隐私信息。此外,不合理的上传限制也会导致攻击者上传含有恶意代码或webshell并伪装成合法的文件,进而导致IIS服务器被攻陷。攻击者利用提权漏洞或者命令执行等漏洞,对IIS服务器甚至是Windows操作系统进行进一步的攻击。无论是对IIS服务器本身的服务还是该IIS服务器所处的网络环境,IIS漏洞都是一个极大的隐患,也让IIS网站管理员和不少运维人员心惊胆战。