您好,欢迎来到达网官方网站           客户ID 密码   注册 忘记密码?
达网
全国服务热线  
达网学院 | 付款方式

asp木马伪装成图片或其它,上传漏洞终极解决方法

自从上次给客户网站升级以后,网站安全性得到了进一步加强,不过这两天我在对客户网站进行维护时,发现有2个网站被上传了木马,但由于我设置了读写运行权限,木马虽然上传上了,但是无法运行,所以网站一直没被攻破。即便如此,我也始终感觉有点不放心,然后就全面检查那两个网站存在的漏洞……

结果查到竟然仍是上传漏洞,上传漏洞我已经做了很严密的控制了,并且非法字符什么的都已经过滤掉了,怎么还能上传木马呢?

对于上传漏洞的查找,我仍是从源文件入手,目标有两个,一个是FilePath(文件路径),另一个则是FileName(文件名称)。 我看了有关的资料,主要也就是通过以下要过滤的字符下手。

VBScript code
Private Function FixName(Byval UpFileExt) ’第一步的过滤函数,过滤特殊扩展名。
If IsEmpty(UpFileExt) Then Exit Function ’如扩展名为空就退出交互
FixName = Lcase(UpFileExt) ’将扩展名转换为小写字符。
FixName = Replace(FixName,Chr(0),"") ’将二进制的00空字符过滤为空
FixName = Replace(FixName,".","") ’将单引号过滤为空,下同。 jmdcw
FixName = Replace(FixName,"’","")
FixName = Replace(FixName,"asp","")
FixName = Replace(FixName,"asa","")
FixName = Replace(FixName,"aspx","")
FixName = Replace(FixName,"cer","")
FixName = Replace(FixName,"cdx","")
FixName = Replace(FixName,"htr","")
FixName = Replace(FixName,"shtml","")
End Function

第一关就是过滤上面的字符

第二关

VBScript code
if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" or fileEXT="php" or fileEXT="jsp" then ’ 第二关,验证fileEXT是否为asp、asa、aspx、php、jsp扩展名。
EnableUpload=false ’如果属于这三项之一,那么EnableUpload就定义为假,上传文件扩展名不合法。
end if

第三关

VBScript code
if EnableUpload=false then ’第三关,验证关。如果传递到此的EnableUpload变量为假,则说明上传文件扩展名不合法。
msg="这种文件类型不允许上传!\n\n只允许上传这几种文件类型:" & UpFileType
FoundErr=true ’注意:因为文件名不合法,就更改了FoundErr值,由初始的false改为true。
end if

第四关

VBScript code
if FoundErr<>true then ’第四关,上传关。如果FoundErr不等于true才可以上传。

上面的方法可以说是很严密了!

但是我在我的网站里看了后缀为jpg和gif的文件,就是上传上出的,改变后缀一看代码如下:


zN40\#1M\|E\(\&8T\-\`L\*a\)x\.ou5\;\rBC\"w\]mbvn\[\,\/\n’,bC45=’oBxTqn\n\|w\_kR\}\@i0ZLduH\;AftN\?S\’mEQ8O\[p\$6\>G5\!\:\{\"\=aV\]r\+zs4jy\/\rv\



郁闷吧,竟然是木马伪装成图片格式!

那我就在想jpg和gif格式是允许上传的,那我这样防来防去不是白忙一场,原来别人是通过,把木马伪装成jpg和gif图片格式来上传的!那么有没有一种办法,识别出来上传的是正常图片还是木马图片呢?

答案肯定是有的,经过2个多小时的努力,我终于把这个问题解决了!并且所有用户网站我都已经打上了该漏洞补丁!请用户放心使用!

解决的原理是:判断客户端的上传的图片格式是否合法。即:判断该文件是否符合图像的规范,如果是木马伪装的图片肯定是不合法的,然后FSO删除之即可!

说到这,估计有些人还是不是很明白,我结合着代码,给大家详细解析下:

0 then CheckFileType=false
end function
%>

那么在应用的时候
CheckFileType(server.mappath("XXXX.jpg"))
或者
CheckFileType("F:/web/164/images/XXXX.jpg"))

反正即是检测验证本地物理地址的图像文件类型,返回 true 或 false值

所以这个情况应用在图像上传中,目前的办法是先允许该“伪图像”文件的上传,接着使用以上的自定义函数判断该文件是否符合图像的规范,若是木马伪装的图像文件则FSO删除之,比如:
file.SaveAs Server.mappath(filename) ’保存文件
If not CheckFileType(Server.mappath(filename)) then
response.write "错误的图像格式"
Set fso = CreateObject("Scripting.FileSystemObject")
Set ficn = fso.GetFile(Server.mappath(filename))
ficn.delete
set ficn=nothing
set fso=nothing
response.end
end if

则是先将文件上传,接着立马使用自定义函数判断文件图像类型的吻合性,FSO做出删除该文件的操作。

ASP上传漏洞还利用"\0"对filepath进行手脚操作ww

Copyright 2006-2012 dw.net.cn 达网网络技术有限公司 版权所有
公司地址:宁波市大梁街118号世纪广场B座19楼1902室 [地图] 邮编:315000
中文域名:达网.cn  公司微博:weibo.com/dwnetwork  信产部备案号:浙ICP备09010049号
软件开发, 行业软件, 网站建设, 网站托管, 服务器技术  网站地图 RSS订阅