乌云(WooYun.org)历史漏洞查询---http://wy.zone.ci/
乌云 Drops 文章在线浏览--------http://drop.zone.ci/
2012-11-25: 细节已通知厂商并且等待厂商处理中 2012-11-28: 厂商已经确认,细节仅向厂商公开 2012-12-08: 细节向核心白帽子及相关领域专家公开 2012-12-18: 细节向普通白帽子公开 2012-12-28: 细节向实习白帽子公开 2013-01-09: 细节向公众公开
某CMS文件上传处理流程不当,导致用户可以控制文件名,从而上传任意文件。
首先看其上传页面:
<html><head><title>图片上传</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><script language="JavaScript"> function check(){ if(document.forms[0].file.value=="") { alert("请选择图片路径!"); document.forms[0].file.focus(); return false; } return true; }</script><style type="text/css"><!--body,td,th { font-family: Arial, Helvetica, sans-serif; font-size: 14px;}a:link { text-decoration: none;}a:visited { text-decoration: none;}a:hover { text-decoration: none;}a:active { text-decoration: none;}body { margin-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px;}--></style></head><body><table width="296" height="38" border="0" align="center" cellpadding="0" cellspacing="0" class="t12"> <form action="upload_ok.asp" method="post" enctype="multipart/form-data"> <tr> <td align="center"><br> <strong>图片路径:</strong> <input type="file" name="file"> <br> <br> <input type="submit" name="Submit" value=" 上 传 " onClick="return check();"> <input name="textField" type="hidden" id="textField" value="<%=Trim(request("textField"))%>"> <input name="filename" type="hidden" id="filename" value="<%=Trim(Request("imgname"))%>"> <input name="action" type="hidden" id="action" value="<%=Trim(Request("action"))%>"> <input name="imgtype" type="hidden" id="imgtype" value="<%=Request("imgtype")%>"> </td> </tr> </form></table></body></html>
传递给upload_ok.asp处理,看upload_ok.asp源码:
on error goto 0 '关闭on error resume nextDim desFolder:desFolder=server.mappath("../pic")Dim rs,filename,ext,imgname,imgname2,Y,M,D,Shuomingext = "jpg"if Trim(ourRequest.Form("filename"))="" thenY=Year(Now)M=Month(Now)D=Day(Now)H=Hour(Now)M=Minute(Now)S=Second(Now)imgname=Y*1000000000+M*10000000+D*100000+H*10000+M*1000+S*100+1Set rs=server.CreateObject("ADODB.Recordset") rs.open"select top 1 * from pic where left(imgname,8)='"&left(imgname,8)&"' order by imgname desc",conn,1,1 if Not (rs.Eof And rs.Bof) Then imgname2=CCur(rs("imgname"))+1 Else imgname2=imgname End If filename=imgname2&".jpg"Else filename=Trim(ourRequest.Form("filename"))End IfCall ourRequest.File(0).SaveAs(desFolder, filename)
假如文件名为空,则以与日期时间相关+.jpg后缀来命名该文件,如果文件名不为空,则以该文件名命名这个文件。再来看一下执行上传页面后的源文件:
<table width="296" height="38" border="0" align="center" cellpadding="0" cellspacing="0" class="t12"> <form action="upload_ok.asp" method="post" enctype="multipart/form-data"> <tr> <td align="center"><br> <strong>图片路径:</strong> <input type="file" name="file"> <br> <br> <input type="submit" name="Submit" value=" 上 传 " onClick="return check();"> <input name="textField" type="hidden" id="textField" value="bigpics"> <input name="filename" type="hidden" id="filename" value=""> <input name="action" type="hidden" id="action" value="add"> <input name="imgtype" type="hidden" id="imgtype" value="bigpics"> </td> </tr> </form></table>
filename变量始终为空,所以默认所有文件都以日期时间+.jpg后缀处理。
我们将上传页面源文件另存为html文件,改form action="http://XXXX.XXXX/upload_ok.asp"改filename变量的value="one.asp",打开本地上传页面,将一句话木马保存为.jpg格式后以本地页面上传,木马就被上传到了Pic目录下,文件名为one.asp.
修改上传页面用户验证;修改上传文件文件名处理流程;修改文件上传目录执行权限;
危害等级:高
漏洞Rank:13
确认时间:2012-11-28 21:38
虽然漏洞说明很细致,但CNVD未找到CMS名称及相关案例进行复现,已发站内信给RedFree,商请提供协助。暂挂在CNVD处置队例中,为避免信息泄露,先行确认。按完全影响机密性,部分影响完整性、可用性进评分,基本危害评分8.97,按通用CMS预先估计影响系数1.4,综合rank=8.97*1.4=12.588
暂无