Part1 前言
为了能在红队项目中发现更多的打点漏洞,我曾经花了不少精力,把那些大家觉得不重要的中低危漏洞拿来研究一下,发现有几个漏洞还是很有利用价值的,比如说,“IIS短文件名猜解漏洞”。这个漏洞有以下这么几个特点:1、危害等级是中低风险。2、在当前网站应用中还广泛存在。3、微软官网不太认可这个漏洞,不出补丁。4、很多客户也选择不修复。5、漏洞利用起来极其困难,需要很大的耐心和毅力。但是我借助此漏洞间接拿权限成功了很多次,还是有很多技巧在里面的,下面分享一下详细过程。
Part2 研究过程
IIS短文件名猜解漏洞简介:
首先简单介绍一下IIS短文件名猜解漏洞:Windows系统为了兼容16位MS-DOS程序,为文件名较长的文件和文件夹生成了对应的Windows 8.3短文件名。比如文件名direct~1.asp中间有一个波浪号,这种就是短文件名了。
- 查看短文件名的方法
如下图所示,使用windows自带的命令即可。打开一个文件夹,使用dir /x命令,可以直接看到每个文件或者文件夹的短文件名,短文件名只保留前六位的文件名 ~ 1.后缀名的前三位。
- 短文件名命名规则
Windows短文件名的命名规则如下,实际上比以下描述要复杂一些,但是了解个大概即可,否则太费精力,不划算(这段描述参考了freebuf的文章,文末附带了freebuf文章的原文链接地址):
1. 只有前六位字符直接显示,后续字符用~1指代。其中数字1还可以递增,如果存在多个文件名类似的文件(名称前6位必须相同,且后缀名前3位必须相同)
2. 后缀名最长只有3位,多余的被截断,超过3位的长文件会生成短文件名
3. 所有小写字母都会转换成大写字母
4. 长文件名中含有多个.,以文件名最后一个.作为短文件名后缀
5. 长文件名前缀/文件夹名字符长度符合0-9和Aa-Zz范围且需要大于等于9位才会生成短文件名,如果包含空格或者其他部分特殊字符,不论长度均会生成短文件。
- 该漏洞的利用价值
此漏洞可以得到网站每个目录下文件的前6位字符,其利用价值体现在:
1. 猜解网站的后台地址。
2. 猜解敏感文件,例如网站备份的.rar、.zip、.bak、.sql文件等。
3. 获取很多爬虫爬不到的未授权访问页面、获取WebService接口地址,从这些未授权访问页面中进而发现更多漏洞,如SQL注入漏洞、上传漏洞等。
IIS短文件名猜解的利用过程:
假设IIS中间件网站目录下有Databackup.zip这样一个网站备份文件,使用dir /x查看,可以得到短文件名为DATABA~1.zip。如果在红队项目过程中,得知网站下有一个DATABA为前缀的文件名,那么就可以很容易猜到完整的数据库文件名database.zip或者databackup.zip,那么就可以直接下载数据库了,这对于红队项目是非常有帮助的。
IIS早期版本和较新版本对于IIS短文件名猜解的判断方法是不一样的,下面分情况搭建虚拟机环境测试一下:
- IIS6.0下GET请求判断
本地搭建一个IIS6.0、Win2003环境,看一下如何通过IIS短文件名猜解得到服务器文件或者文件夹地址。接下来构造如下两个URL:
http://192.168.237.128:8888/shop/databa~1****/a.aspx
如下图所示,服务器如果存在databa开头的文件,则显示404响应码:
http://192.168.237.128:8888/shop/databc~1****/a.aspx
如下图所示:如果服务器不存在databc开头的文件,则显示400响应码提示:
由此可知,通过以上判断方法,可以得到逐步猜解出低版本IIS网站目录下长文件名的前6位字符及后缀。但对于IIS较新版本,GET请求是判断不出短文件名的,需要借助OPTIONS请求或者TRACE请求,HEAD请求、GET请求、POST请求都不行。
- IIS 10.0下OPTIONS请求判断
接下来看一下IIS 10.0的情况下,同样在wwwroot目录下放一个databackup.zip文件:
http://192.168.237.166/databa~1****/a.aspx
如果服务器存在databa开头的文件,则提示404响应码。
http://192.168.237.166/databc~1****/a.aspx
如果服务器不存在databac开头的文件名,则提示200响应码。
- IIS 10.0下TRACE请求判断
接下来换成TRACE请求方法试一试:
http://192.168.237.166/databa~1****/a.aspx
如果服务器存在databa开头的文件,返回404响应码。
如果服务器不存在databc开头的文件,则返回501响应码。
- 猜解方法总结如下(欢迎大家校勘):
1. 对于IIS6.0左右的低版本:
使用HEAD、GET、POST请求判断,返回响应码404则文件存在,返回响应码400则文件不存在。
2. 对于IIS10.0左右的新版本:
使用OPTIONS、TRACE请求方法判断,返回响应码404则文件存在,返回响应码200或者501则文件不存在。
IIS短文件名猜解实战案例分享:
接下来分享一下我曾经做的2个实战案例。
- 案例一:医疗行业案例
这个案例来源于一次医疗行业的红队评估项目。如下图所示:通过IIS短文件名猜解,得到了如下两个短文件名(为了防止泄露项目信息,截图都来源于本地搭建的环境,原图就不贴出来了)
patien~1.asp 由于是医疗系统,所以很容易联想到单词“病人”patient.asp
userad~1.asp 很容易联想到添加用户的功能页面:useradd.asp
访问之后发现patient.asp、useradd.asp均不存在,因为iis短文件名猜解出来的后缀名只有前三位,于是将后缀.asp换成.aspx就显示文件存在了。
于是两个未授权访问页面就出现了,对这两个页面的漏洞进行深度挖掘,追踪页面中的js链接地址。patient.aspx显示如下页面(图片是本地虚拟机环境),搜索框存在SQLServer注入漏洞,而且是sa权限,直接拿到了服务器权限。
而useradd.aspx存在未授权添加用户漏洞。都是常规操,就不做过多介绍了。
- 案例二:WebService接口
接下来看另一个稍微难一点的案例,扫描出一个真实文件名/h/dmtkts~1.asm
dmtkts~1.asm这个短文件名耗费了我很长时间才给试出来:后来我在想,asm后缀是什么后缀,开始以为是一个临时文件之类的后缀,后来我突然想到了:.asm 后缀就是.net的WebService接口后缀.asmx。接下来dmtkts 这个短文件名的完整名怎么猜,让我大伤脑筋,后来突然想到了,由于.asmx是WebService的接口,后面这个s字母应该是service的首字母,最终得到如下的完整文件名dmtktservice.asmx,最终拿到了一个asmx的任意接口调用。真是太难了。。
dmtktservice.asmx类似于如下图片的功能(原图就不贴了),这接口里面有一处上传功能,后续利用上传漏洞拿到权限的。
对IIS短文件名猜解的利用案例就举这两个例子吧,都是实战案例。此外,还可以通过短文件名 字典的方式枚举,我曾经用过几百万行的目录字典、单词字典去跑IIS中间件,但最常用的还是自己按照研发人员的命名习惯去手工尝试。大家也可以发散思维,找到更多更好用的思路。
iis短文件名猜解脚本改造
对于iis短文件名猜解,我下载了好几个脚本,各有优缺点吧,有的脚本不支持iis10,有的脚本算法大概是有问题,跑出的iis短文件名不全。最终我把lijiejie的脚本改造了一下,使它支持iis 10.0的猜解,脚本主要改动内容如下:
关注公众号,回复数字“222”,即可得到由ABC_123修改的,适用于IIS 10.0版本,的漏洞扫描脚本的下载地址。
Part3 总结
1. 没有0day的时候,就把Nday用到极致。
2. 对于IIS短文件名猜解的利用,一定要按照研发人员的思维去猜测完整文件名。
参考链接:
https://www.freebuf.com/articles/web/172561.html