研究了一天,实际上本身从编程角度上看是外行。因此研究起来确实有些头疼,但收获还是颇大的。
如传统的无组件上传,从现在看来多都是有漏洞的,如化境,无惧的早期版本。即使最新版本仍是有一些漏洞的,但有漏洞并不代表不可以用,关键是要理解代码的含义并进行补丁。
如无惧早期代码对扩张名过滤不严格。实际上仅用一个if语句判断:
FileExt=lcase(ofile.FileExt) '判断扩展名
arrUpFileType=split(UpFileType,"|")
for i=0 to ubound(arrUpFileType)
if FileExt=trim(arrUpFileType(i)) then
EnableUpload=true
exit for
end if
next
if FileExt="asp" or FileExt="asa" or FileExt="aspx" or FileExt="cer" or FileExt="cdx" then
EnableUpload=false '哈哈,关键在这里啦,上传漏洞在这里啦
end if
if EnableUpload=false then
msg="这种文件类型不允许上传!/n/n只允许上传这几种文件类型:" & UpFileType
FoundErr=true
end if
这是根本不可靠的,但许多人以为是大问题,实际上问题不在于此,而在于这一句:
FileExt=lcase(ofile.FileExt)
未进行有效过滤!如果改成fileext=trim(lcase(ofile.fileext),可以防止90%以上漏洞了。如果前面再加上一个更严格的过滤函数,自然就解决问题了。
当然即使如此,仍无法避免改名的ASP木马,因此预防方法还有两个:
1 判断上传的文件的内容的类型,是文本(木马的code)还是真正的图片。简单的方法是判断是否存在<%,但复杂的方法是对图片进行严格分析。
2 服务器的权限设置。