动易CMS 4.03版本的上传漏洞早在2005年1月10日便已被发现,但长期未公开。直到后来《黑客防线》杂志的“攻关第3关”栏目将动易系列的漏洞全面披露,这一安全隐患才正式进入公众视野。
受影响的版本为动易4.03。直接分析其上传代码,可以明显看出问题所在。核心漏洞代码片段如下:
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
一个变量的疏忽直接导致了上传漏洞。原理其实很简单:在文件名后添加一个空格。例如,asp (末尾带空格)与asp在逻辑判断中并不相等,但Windows系统在处理文件名时会自动去除末尾空格。因此,上传一个名为asp 的文件,在服务器上实际被保存为asp文件,从而轻松绕过黑名单过滤。
利用该漏洞的关键在于绕过channelID的检查,其他部分相对简单。只需构造一个非空的ID,并采用multipart/form-data的提交方式,即可成功上传恶意文件。具体构造细节在此不再赘述,熟悉者自然明白。
