好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

某CMS逻辑处理不当导致任意文件上传 - 网站安全

某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 next Dim desFolder:desFolder=server.mappath("pic") Dim rs,filename,ext,imgname,imgname2,Y,M,D,Shuoming ext = "jpg" if Trim(ourRequest.Form("filename"))="" then Y=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+1 Set 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 If Call 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.

   

修复方案: 修改上传页面用户验证; 修改上传文件文件名处理流程; 修改文件上传目录执行权限;

查看更多关于某CMS逻辑处理不当导致任意文件上传 - 网站安全的详细内容...

  阅读:40次