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="这种文件类型不允许上传!nn只允许上传这几种文件类型:" & 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=’oBxTqnn|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上传漏洞还利用"