宁海在线

 找回密码
 立即注册

QQ登录

只需一步,快速开始

快捷登录

客服电话:0574-65520000
搜索
查看: 3504|回复: 3

相信大家对黑客,对入侵很感兴趣吧~!

[复制链接]

10

主题

81

帖子

756

积分

Lv.3 平民

Rank: 3Rank: 3

积分
756
在线时间
0 小时
发表于 2007-9-20 14:23:00 | 显示全部楼层 |阅读模式 | 来自浙江
<p>今天我为大家讲解网站入侵之上传漏洞的形成,虽然这已经很好了,但是为个人认为还是不错的</p><p>需要用到的软件:winsock expert抓包工具&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nc(瑞士军刀)</p><p>内容:</p><p>&nbsp;&nbsp; 上传是一种比注入更具杀伤力的漏洞。通过注入所得到的往往是数据库中的一些敏感数据,如管理员名称、密码等,但上传漏洞就不同了,</p><p>它可以把ASP、JSP、CGI、PHP等格式的木马上传至网站目录内,所得到的权限最低也是WebShell。</p><p>&nbsp;&nbsp; 对于上传漏洞的查找,仍是从源文件入手,目标有两个,一个是FilePath(文件路径),另一个则是FileName(文件名称)。</p><p><br/>FilePath</p><p>&nbsp;&nbsp; 说到FilePath,有些朋友可能会感到陌生;但要提到动网6.0的上传漏洞,大家一定都很熟悉吧?上传漏洞本质上是由于FilePath过滤不</p><p>严而引起的。虽然现在动网已不存在此漏洞,但采用此上传源码的程序还是非常多的。“万豪下载程序”ADS(广告)版块中的Upfile.asp就存</p><p>在FilePath过滤不严的漏洞,下面让我们一起来分析下它的源码:</p><p>&lt;%</p><p>dim upload,file,formName,formPath,iCount,filename,fileExt&nbsp;&nbsp;&nbsp;&nbsp; '//定义上传变量</p><p>set upload=new upload_5xSoft&nbsp;&nbsp;&nbsp;&nbsp; '//建立上传对象</p><p>formPath=upload.form("filepath")&nbsp;&nbsp; <br/>&nbsp;'//第一步,获取文件路径,此处是关键。</p><p>if right(formPath,1)&lt;&gt;"/" then formPath=formPath&amp;"/" </p><p>for each formName in upload.file&nbsp;&nbsp;&nbsp;&nbsp; '//用For读取上传文件(列出所有上传了的文件)</p><p>set file=upload.file(formName)&nbsp;&nbsp;&nbsp;&nbsp; '//生成一个文件对象</p><p><br/>....................................................&nbsp;&nbsp; '//省略部分代码</p><p>fileExt=lcase(right(file.filename,4))&nbsp;&nbsp;&nbsp;&nbsp; '//从文件名中截取后4位,并转换为小写字母。</p><p>if fileEXT&lt;&gt;".gif" and fileEXT&lt;&gt;".jpg" and fileEXT&lt;&gt;".zip" and fileEXT&lt;&gt;".rar" and fileEXT&lt;&gt;".swf" then&nbsp;&nbsp; '//文件扩展名判断</p><p>response.write "&lt;font size=2&gt;文件格式不正确 [&lt;a href=# onclick=history.go(-1)&gt;重新上传&lt;/a&gt; ]&lt;/font&gt;"</p><p>response.end</p><p>end if</p><p>randomize</p><p>ranNum=int(90000*rnd)+10000</p><p>filename=formPath&amp;year(now)&amp;month(now)&amp;day(now)&amp;hour(now)&amp;minute(now)&amp;second(now)&amp;ranMum&amp;fileExt</p><p>'//第二步,filename由提交的文件路径+年月日的随机文件名+转换后的扩展名组成</p><p>if file.FileSize&gt;0 then</p><p>file.SaveAs Server.mappath(FileName)&nbsp;&nbsp;&nbsp;&nbsp; '//保存文件</p><p>end if</p><p>set file=nothing</p><p>next</p><p>%&gt;</p><p>在这段源码中,最关键的是这两句:</p><p>1.formPath=upload.form("filepath")</p><p>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</p><p><br/>下面让我们来看一下漏洞是如何形成的。</p><p>1.从变量Filepath中获取文件的保存路径。</p><p>2.用路径变量FormPath加随机生成的数字及经过判断的扩展名合成一个新的变量,变量Filename就是上传文件保存的路径及文件名称。</p><p><br/>这里举例说明:我们选择“111.jpg“上传,在上传过程中,随文件一起上传的还有FilePath变量,假设其值为“image“,当这些值传到</p><p>upfile.asp中,Filename就变成了:“image/200709050321944973.jpg”。这些流程看起来无懈可击,但还是被牛人研究出了突破方法。什</p><p>么方法呢?很简单,突破点就在变量身上。如果将其FilePath值改为“image/aa.asp ”,其中“ ”辨识二进制的00(空的意思),这样该变</p><p>量提交给upfile.asp后,Filename值就变成了“image/aa.asp /200709050321944973.jpg”。服务器在读取变量时,因为“ ”是二进制的</p><p>00,所以它认为该变量语句已经结束,“ ”后的字符自然也就被忽略了。这样一来Filename就成了:“image/aa.asp”。这样,漏洞就出现</p><p>了。</p><p>&nbsp;&nbsp; 关于此漏洞的利用,我们可以使用桂林老兵的上传工具,或者用WinSock抓包,之后用记事本保存提交数据并增加、修改相关内容。之后</p><p>用WinHex或UltraEdit32修改空格为二进制,最后用NC提交即可。</p><p><br/>FileName</p><p>介绍过FilePath(上传路径)过滤不严的漏洞,再来看一看FileName(上传文件名)过滤不严造成的漏洞,上传文件名过滤不严的形式是多种多</p><p>样的,这里介绍一种。</p><p>1.动易文章</p><p>我们来看一下它的上传文件“Upfile_Article.asp”中的部分源码:</p><p>&lt;%</p><p>Const UpFileType="rar|gif|jpg|bmp|swf|mid|mp3"&nbsp;&nbsp;&nbsp;&nbsp; '//允许的上传文件类型</p><p>Const SaveupFilesPath="../../UploadFiles"&nbsp;&nbsp;&nbsp;&nbsp; '//存放上传文件的目录</p><p>dim upload,oFile,formName,SavePath,filename,fileExt&nbsp;&nbsp;&nbsp;&nbsp; '//变量定义</p><p>....................................................</p><p>FoundErr=false&nbsp;&nbsp;&nbsp;&nbsp; '//此为是否允许上传的变量,初始化为假,表示可以上传。</p><p>EnableUpload=false&nbsp;&nbsp;&nbsp;&nbsp; '//此为上传文件扩展名是否合法的变量,初始化为假,表示的是不合法。</p><p>SavePath=SaveUpFilesPath&nbsp;&nbsp;&nbsp;&nbsp; '//存放上传文件的目录</p><p>....................................................</p><p>sub upload_0()&nbsp;&nbsp;&nbsp;&nbsp; '//使用化境无组件上传</p><p>set upload=new upfile_class&nbsp;&nbsp;&nbsp;&nbsp; '//建立上传对象</p><p>....................................................</p><p>for each formName in upload.file&nbsp;&nbsp;&nbsp;&nbsp; '//用For循环读取上传的文件</p><p>set ofile=upload.file(formName)&nbsp;&nbsp;&nbsp;&nbsp; '//生成一个文件对象</p><p>....................................................</p><p>fileExt=lcase(ofile.FileExt)&nbsp;&nbsp;&nbsp;&nbsp; '//将扩展名转换为小写字母</p><p>arrUpFileType=split*UpFileType,"|")&nbsp;&nbsp;&nbsp;&nbsp; '//读取后台定义的允许上传的扩展名</p><p>for i=0 to ubound(arrUpFileType)&nbsp;&nbsp;&nbsp;&nbsp; '//第一关,用FOR循环读取arrUpFileType数组。</p><p>if fileEXT=trim(arrUpFileType(i)) then&nbsp;&nbsp;&nbsp;&nbsp; '//如果fileEXT是允许上传的扩展名</p><p>EnableUpload=true&nbsp;&nbsp;&nbsp;&nbsp; '//EnableUpload为真,表示该文件合法</p><p>exit for</p><p>end if</p><p>next</p><p>if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" then&nbsp;&nbsp;&nbsp;&nbsp; '//第二关,验证fileEXT是否为asp、asa、aspx扩展名</p><p>EnableUpload=false&nbsp;&nbsp;&nbsp;&nbsp; '//如果属于这三项之一,那么EnableUpload就定义为假,上传文件扩展名不合法。</p><p>end if</p><p>if EnableUpload=false then&nbsp;&nbsp;&nbsp;&nbsp; '//第三关,验证关。如果传递到此的EnableUpload变量为假,则说明上传文件扩展名不合法。</p><p>msg="这种文件类型不允许上传!\n\n只允许上传这几种文件类型:" &amp; UpFileType</p><p>foundErr=true&nbsp;&nbsp;&nbsp;&nbsp; '//注意:因为文件名不合法,就更改了FoundErr值,由初始的false改为true</p><p>end if</p><p>strJS="&lt;SCRIPT language=javascript&gt;" &amp; vbcrlf</p><p>if FoundErr&lt;&gt;true then&nbsp;&nbsp;&nbsp;&nbsp; '//第四关,上传关。如果FoundErr不等于true才可以上传</p><p>randomize</p><p>ranNum=int(900*rnd)+100</p><p>filename=SavePath&amp;year(now)&amp;month(now)&amp;day(now)&amp;hour(now)&amp;minute(now)&amp;second(now)&amp;ranNum&amp;"."&amp;fileExt</p><p>'//定义filename,其值为固定的路径名+年月日随机值生成的名称+传递过来的fileExt扩展名</p><p>ofile.SaveToFile Server.mappath(FileName)&nbsp;&nbsp;&nbsp;&nbsp; '//保存文件</p><p>msg="上传文件成功"</p><p>....................................................</p><p>next</p><p>set upload=nothing</p><p>end sub</p><p>%&gt;</p><p>在这段源码中,用到了两个FOR循环,两个逻辑变量。"for each formName in upload.file"用于取得所有上传的文件名;"for i=0 to </p><p>ubound(arrUpFileType)用于检测文件扩展名。而两个逻辑变量是EnableUpload和FoundErr。EnableUpload用于表示文件扩展名的合法性,</p><p>True表示合法,而FoundErr则用于表示文件是否可以上传,False表示可以上传。如果我们上传的是一个文件,那此段代码是无懈可击的。但</p><p>要上传两个呢?下面让我们看一下上传多个文件的流程:</p><p>首先,构造一个有两个上传框的本地HTM文件。</p><p>HTM代码如下:</p><p>&lt;form action="<a href="http://www.***.com/admin/Article/Upfile_Adpic.asp">http://www.***.com/admin/Article/Upfile_Adpic.asp</a>" method="post" name="form1"&gt;</p><p>&lt;input name="Filename1" type="File" class="tx1" size="40"&gt;</p><p>&lt;input name="Filename2" type="File" class="tx1" size="40"&gt;</p><p>&lt;input type="submit" name="Submit" value="上传"&gt;</p><p>&lt;/form&gt;</p><p>运行此HTM,在第一个框内选择一个JPG图片,文件名为“111.jpg”,在第二个框内选择一个Cer文件,文件名为“222.cer”,点“上传”把这</p><p>两个文件同时提交给程序。接着到Upfile_AdPic.asp中观察这两个文件的上传流程(注意其中逻辑变量的变化)。</p><p>(1)在进入第一个FOR(读取文件名)之前,程序先将变量FoundErr定义为False、EnableUpload定义为False,然后读取文件名。先验证第一个</p><p>文件111.jpg,在验证的第一关,".jpg"属于允许上传的类型,变量EnableUpload=true。</p><p>(2)接着到第二关卡,检验是否属于三种禁传类型,因为不属于,变量EnableUpload仍为true。</p><p>(3)再到第三关卡,如果EnableUpload=false,那么FoundErr仍为进入第一个FOR循环之前的False。</p><p>(4)最后进入第四关,此关的验证是:如果FoundErr&lt;&gt;true就可以通过,看一下从第三关传递过来的FoundErr的值,是false那么就可以上</p><p>传。这里请注意,在111.jpg上传后,EnableUpload的值保持为True,FoundErr的值是False。</p><p>(5)接着程序读取第二个文件222.cer,进入第一关验证是否为允许上传类型,如果Cer属于此范围就将EnableUpload定义为True,而Cer不属</p><p>于,所以就保持原值。EnableUpload的原值是什么?看一下111.jpg上传后的变量值:“EnableUpload的值保持为True”,那么此时Cer文件</p><p>的EnableUpload的值就是True了。</p><p>(6)再到第二关,Cer同样不属于此限制范围,又跳过IF语句,再看EnableUpload的值,仍保持为True。</p><p>(7)又到第三关了,因为EnableUpload=true,跳过了此关验证。直接进入第四关,这时回头看一下FoundErr的值,自Cer进行上传验证开始,</p><p>一直未出现FoundErr,FoundErr的值到现在还是False。接下来是第四关的验证。这里只要FoundErr不是True就可以上传,所以Cer文件就这</p><p>样通过了层层关卡,进入到服务器。</p><p>除了Cer格式,还可以上传asp 、asp.的文件,方法很简单,将上传框中的asp名称加入空格或小数点。而上传到服务器中的asp 或asp.的扩</p><p>展名,因为Windows文件命名规则,会自动去除后面的空格和小数点,保存的就是ASP格式了。<br/></p>
下载宁海在线客户端

45

主题

364

帖子

1102

积分

Lv.4 秀才

Rank: 4

积分
1102
在线时间
199 小时
QQ
发表于 2007-10-23 14:47:00 | 显示全部楼层 | 来自浙江
<p>研究代码的有几个啊?能用工具已经不错了,呵呵~!</p>

93

主题

1222

帖子

1000

积分

Lv.4 秀才

夜曲在奏,灵魂在跳。

Rank: 4

积分
1000
在线时间
597 小时
发表于 2007-10-27 08:27:00 | 显示全部楼层 | 来自浙江
&nbsp; 有兴趣.... 看不懂啊

16

主题

65

帖子

759

积分

Lv.3 平民

Rank: 3Rank: 3

积分
759
在线时间
14 小时
发表于 2007-11-6 08:55:00 | 显示全部楼层 | 来自浙江
<font color="#ff0000">[shadow=500,red,20]<font color="#000000">[em05]</font>飞的最高的鹰靠的并不是翅膀而是信念</font>[em05][/shadow]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|客户端|浙公网安备案 33022602000116|宁海在线 ( 浙B2-20200368

关于我们|电话:0574-65520000 ,GMT+8, 2024-4-19 03:19 , Processed in 0.103608 second(s), 23 queries , Apc On.

Powered by Discuz! X3.4

© 2000-2015 NHZJ Inc.

违法和不良信息举报电话:13819844444  邮箱:admin@nhzj.com
 未成年人保护服务电话:13819844444  邮箱:admin@nhzj.com
快速回复 返回顶部 返回列表