IIS短文件名漏洞原理与挖掘思路

首先来几个网址先了解一下

https://www.jb51.net/article/166405.htm

https://www.freebuf.com/articles/web/172561.html

总结:

一、漏洞描述:
此漏洞实际是由HTTP请求中旧DOS 8.3名称约定(SFN)的代字符(~)波浪号引起的。它允许远程攻击者在Web根目录下公开文件和文件夹名称(不应该可被访问)。攻击者可以找到通常无法从外部直接访问的重要文件,并获取有关应用程序基础结构的信息。

二、漏洞原理
==》IIS短文件名漏洞原理:
IIS的短文件名机制,可以暴力猜解短文件名,访问构造的某个存在的短文件名,会返回404,访问构造的某个不存在的短文件名,返回400。
==》漏洞成因:
为了兼容16位MS-DOS程序,Windows为文件名较长的文件(和文件夹)生成了对应的windows 8.3短文件名。
在Windows下查看对应的短文件名,可以使用命令dir /x
==》短文件名特征:
1.只显示前6位的字符,后续字符用~1代替。其中数字1是可以递增。如果存在文件名类似的文件,则前面的6个字符是相同的,后面的数字进行递增
2.后缀名最长只有3位,超过3位的会生成短文件名,且后缀多余的部分会截断。
3.所有小写字母均转换成大写的字母
4.长文件名中包含多个”.”的时候,以文件最后一个”.”作为短文件名的后缀
5.长文件名前缀/文件夹名字符长度符合0-9和A-Z、a-z范围且需要大于等于9位才会生成短文件名,如果包含空格或者其他部分特殊字符,不论长度均会生成短文件。

三、漏洞环境搭建及漏洞复现
1、测试环境为windows server 2003 r2,开启webdav服务和net服务。

四、防御
1、升级.net framework
2、修改注册表键值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem 修改NtfsDisable8dot3NameCreation为1。修改完成后,需要重启系统生效。注:此方法只能禁止NTFS8.3格式文件名创建,已经存在的文件的短文件名无法移除,需要重新复制才会消失。如果不重新复制,已经存在的短文件名则是不会消失的
2.1重启系统之后,在网站根目录(C:\Inetpub\wwwroot)下创建hhhhhhhhhhhhhhhhhhhh.txt,然后查看是否会生成短文件名。下图可以看到,没有生成短文件名,说明防御生效。
2.2、将wwwroot目录下文件复制到另一个back文件下,然后删除原wwwroot目录下所有内容,再把back下的内容重新复制到wwwroot目录下,这时重新查看,则不存在短文件名了

五、总结
该漏洞的意义:
1、 猜解后台地址
2、 猜解敏感文件,例如备份的rar、zip、.bak、.sql文件等。
3、 在某些情形下,甚至可以通过短文件名web直接下载对应的文件。
该漏洞的局限性:
1、 只能猜解前六位,以及扩展名的前三位。
2、 名称较短的文件是没有相应的短文件名的。
3、 不支持中文文件名
4、 如果文件名前6位带空格,8.3格式的短文件名会补进,和真实文件名不匹配
5、 需要IIS和.net两个条件都满足。

好的,上面全是复制粘贴,大概了解一下了吧

下面开始实战:

首先github有开源工具 https://github.com/lijiejie/IIS_shortname_Scanner,可以直接下载,需要python2环境【因为p2和p3语法有比较大的差距,使用py3需要修改源码语法,没有必要】。

①环境搭建:

这里选取window2003的IIS6来复现IIS短文件名漏洞,攻击机使用kali,不用win7是因为装了python3,懒得重新安装python2环境了。开时Web服务器的三个配置,访问cms网站成功,开时操作。

IIS短文件名漏洞原理与挖掘思路    IIS短文件名漏洞原理与挖掘思路  IIS短文件名漏洞原理与挖掘思路

在网站的根目录 c:\inetpub\wwroot下使用 dir /x命令,可见确实有短文件名存在。

②攻击靶机

kali ip为192.168.3.110,windows2003是192.168.3.48,kali ping 2003服务器成功,证明两者连通性,在github下载的工具目录下执行:python2 iis_shortname_Scan.py 192.168.3.48,报错,137行 if not s.isvul():

 IIS短文件名漏洞原理与挖掘思路

查看下载的配置文件 iis_shortname_Scan.py,使用编辑器打开,vi iis_shortname_Scan.py,查看137行的if not s.isvul(),根据参数target可以看到应该是传参错误,上面有个参考,前面+http://

IIS短文件名漏洞原理与挖掘思路

重新再来,python2 iis_shortname_Scan.py http://192.168.3.48 

IIS短文件名漏洞原理与挖掘思路  IIS短文件名漏洞原理与挖掘思路

可以看见上面,py脚本成功执行,也猜解正确了短文件名。

③ 实战环境,开启代理

1.拿到一个XX市XX单位站点,必须为为IIS+asp服务器,网站XXX

使用Payload开撸:python2 iis_shortname_Scan.py http://目标网站

IIS短文件名漏洞原理与挖掘思路

失败!哪有一帆风顺的事情,看到刚才源代码,这是139行的print,Server is not vulunerable 证明无此漏洞,继续。

2.再战,paylaod: python2 iis_shortname_Scan.py 目标站点

IIS短文件名漏洞原理与挖掘思路 IIS短文件名漏洞原理与挖掘思路

确实有上面短文件名,证明该网站IIS短文件名漏洞真实存在。

 

修复建议:参考最前面的文档说明。

特别声明:

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,我不为此承担任何责任。

作者有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者的允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。 切勿用于非法,仅供学习参考

IIS短文件名漏洞原理与挖掘思路

上一篇:PopupWindow-----点击弹出 PopupWindow 初始化菜单


下一篇:【模板】快排模板