IIS是一种Web(网页)服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。
IIS的安全脆弱性曾长时间被业内诟病,一旦IIS出现远程执行漏洞威胁将会非常严重。远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 HTTP 请求时会导致此漏洞。 成功利用此漏洞的攻击者可以在系统帐户的上下文中执行任意代码,可以导致IIS服务器所在机器蓝屏或读取其内存中的机密数据。
一、PUT漏洞
1. 漏洞介绍及成因
IIS Server在Web服务扩展中开启了WebDAV,配置了可以写入的权限,造成任意文件上传。
版本:IIS 6.0
2. 漏洞复现
1)开启WebDAV和写权限;
2) 利用burp测试抓包,将GET请求改为OPTIONS;
3)利用工具进行测试;
成功上传,再上传一句话木马,然后用菜刀连接,getshell;
3. 漏洞修复
关闭WebDAV和写权限;
二、短文件名猜解
1. 漏洞介绍及成因
IIS的短文件名机制,可以暴力猜解短文件名,访问构造的某个存在的短文件名,会返回404,访问构造的某个不存在的短文件名,返回400。
2. 漏洞复现
1)在网站根目录下添加aaaaaaaaaa.html文件;
2)进行猜解;
3. 漏洞修复
修复方法:
1)升级.net framework;
2)修改注册表禁用短文件名功能;
快捷键Win+R打开命令窗口,输入regedit打开注册表窗口,找到路径:
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\FileSystem,将其中的 NtfsDisable8dot3NameCreation这一项的值设为 1,1代表不创建短文件名格式,修改完成后,需要重启系统生效。
3)CMD关闭NTFS 8.3文件格式的支持;
4)将web文件夹的内容拷贝到另一个位置,如c:\\www到d:\\w,然后删除原文件夹,再重命名d:\\w到c:\\www。
修复后:
4. 局限性
1) 此漏洞只能确定前6个字符,如果后面的字符太长、包含特殊字符,很难猜解;
2) 如果文件名本身太短(无短文件名)也是无法猜解的;
3) 如果文件名前6位带空格,8.3格式的短文件名会补进,和真实文件名不匹配;
四、远程代码执行
1. 漏洞介绍及成因
在IIS6.0处理PROPFIND指令的时候,由于对url的长度没有进行有效的长度控制和检查,导致执行memcpy对虚拟路径进行构造的时候,引发栈溢出,从而导致远程代码执行。
2. 漏洞复现
1)漏洞环境搭建
在windows server 2003 r2 32位上安装iis6.0;
2)触发漏洞
在本地执行exp,exp如下:
执行成功后,服务器端弹出计算器:
3. 漏洞修复
1)关闭WebDAV服务;
2)使用相关防护设备;
四、解析漏洞
1. 漏洞介绍及成因
IIS 6.0在处理含有特殊符号的文件路径时会出现逻辑错误,从而造成文件解析漏洞。这一漏洞有两种完全不同的利用方式:
/test.asp/test.jpg
test.asp;.jpg
2. 漏洞复现
-
利用方式1
第一种是新建一个名为”test.asp”的目录,该目录中的任何文件都被IIS当作asp程序执行(特殊符号是“/”);
-
利用方式2
第二种是上传名为”test.asp;.jpg”的文件,虽然该文件真正的后缀名是”.jpg”,但由于含有特殊符号”;”,仍会被IIS当做asp程序执行;
IIS7.5文件解析漏洞
test.jpg/.php
URL中文件后缀是.php,便无论该文件是否存在,都直接交给php处理,而php又默认开启”cgi.fix_pathinfo”功能,默认会对文件进行“修理”,何谓“修理”呢?举个例子,当php遇到路径为”/aaa.xxx/bbb.yyy”的时侯,若”/aaa.xxx/bbb.yyy”不存在,则会去掉最后的“bbb.yyy”,然后判断”/aaa.xxx”是否存在,若存在,则把“/aaa.xxx”当作文件。
若有文件test.jpg,访问时在其后加/.php,便可以把”test.jpg/.php”交给php,php修理文件路径”test.jpg/.php”得到”test.jpg”,该文件存在,便把该文件作为php程序执行了。
3. 漏洞修复
1)对新建目录文件名进行过滤,不允许新建包含‘.’的文件;
2)曲线网站后台新建目录的功能,不允许新建目录;
3)限制上传的脚本执行权限,不允许执行脚本;
4)过滤.asp/xm.jpg,通过ISApi组件过滤。
一、iis6文件解析漏洞原理:
1、当WEB目录下,文件名以 xxx.asp;xxx.xxx 来进行命名的时候,此文件将送交asp.dll解析(也就是执行脚本)
2、当WEB目录下,在访问以 xxx.asp 命名的目录下的任意文件时,此文件将送交asp.dll解析(也就是执行脚本)
我们都知道IIS6中间件主要解析的就是asp语言的文件,如果你放入一个java语言的文件,php语言的文件他是不会进行解析的,只能当做文本文件进行显示出来,而里面语法所表达的意思是不会执行的。那么从iis底层审计原理和测试发现IIS6在解析文件时存在如下问题:
1、后缀如下会被当做asp程序进行执行 .asp .cer .asa .cdx
2、IIS 6.0在处理含有特殊符号的文件路径时会出现逻辑错误,从而造成文件解析漏洞。这一漏洞有两种完全不同的利用方式: /test.asp/test.jpg test.asp;.jpg
为什么说这样的解析我们叫做漏洞呢?而不叫做多一种解析方式呢?
主要的原因是很多研发在编写上传功能的时候会进行黑名单活着白名单的判断,而往往不了解这种解析漏洞,忽略了这种校验,从而被其他人绕过上传能解析的大小马。
比如:有一个头像上传功能,开发者后台只允许上传后缀为jpg的文件,其他文件不允许上传,而黑客利用第二条解析漏洞上传了个1.asp;.jpg这时候能顺利的将该文件上传到服务器中,如果服务器只是将其按照图片解析,那么里面插入的asp马脚本就解析不成功无法发挥马的作用,但是iis6会将其安装asp文件解析,因此这个马就能起到马的作用,从而被黑客利用。
而iis6由于是设计上的缺陷,因此该漏洞没有厂家的修复方案,只要研发在本身上传功能上对上述漏洞进行过滤。
二、IIS7/IIS7.5中的解析漏洞
漏洞影响 IIS7 及IIS7.5 在使FastCGI方式调用php时,在php.ini里设置cgi.fix_pathinfo=1
使得访问任意文件URL时,在URL后面添加“/x.php”等字符时,该文件被iis当php文件代码解析。
如制作1.png图片马(在图片中插入php马脚本)正常情况下访问 http://127.0.0.1/1.png 的内容为正常的图片,里面的php脚本并不会执行,因为IIS7/IIS7.5只会按照图片的解析格式来进行解析。当访问 http://127.0.0.1/1.png/1.php可以看到1.png里的php代码被iis解析执行了。 那么“黑客”在具体利用网站漏洞的时候,先可以通过网站提供的图片上传功能(也可以是其他的手段)上传一个包含了恶意PHP代码的图片文件。然后通过上面描叙方法,让iis解析执行任意恶意的php代码,控制网站及主机,最终导致网站被“脱库”、“挂马”、“植入非法seo链接”等等严重后果。
IIS7/IIS7.5解析漏洞的修复方案有如下几个:
第1种方案:继续使用FastCGI方式调用PHP,要解决这个安全问题可以在php.ini里设置 cgi.fix_pathinfo=0 ,修改保存后建议重启iis(注意可能影响到某些应用程序功能)。
第2种方案:使用ISAPI的方式调用PHP。(注意:PHP5.3.10已经摒弃了 ISAPI 方式)
第3种方案:可以使用其他web服务器软件,如apache等。