DedeCms V5.1 tag.php注入漏洞
<p>SEBUG-ID:3885 <br />SEBUG-Appdir:织梦(DedeCms) <br />发布时间:2008-08-20 <br />影响版本: <br />DedeCms V5.1 漏洞描述: <br />Dedecms算是使用比较广泛的PHP整站系统了,在被使用的同时系统的安全性也被人们关注 <br /><br />目录下的tag.php文件对变量$tag处理不当,导致注入漏洞的形成 <br />因为可以使用“'”,所以如果条件可以的话可以直接into file得SHELL。 <br /><*参考 <br />toby57 <br />*> <br />测试方法: <br /> <br />本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!http://www.sebug.net/bbs/thread-332-1-1.htmlSEBUG安全建议: <br />暂无 <br />www.dedecms.com// sebug.net <br />Dedecms算是使用比较广泛的PHP整站系统了,在被使用的同时系统的安全性也被人们关注。在以前dedecms也爆过不少漏洞,官方都很快出了补丁,前几天公布了注射漏洞,其实这个系统也受最近很流行的多字节编码漏洞影响。不过今天说的这个漏洞与多字节编码无关,倒跟URL编解码有关系, <br /><br />呵呵。仅测试了DedeCms2007(DedeCms V5.1 )。 <br />目录下的tag.php文件对变量$tag处理不当,导致注入漏洞的形成,话不多说,贴代码: <br /><br /><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode1"> <br />if(isset($_SERVER["QUERY_STRING"])){ <br />$tag = trim($_SERVER["QUERY_STRING"]); //得到GET的参数 <br />$tags = explode(’/’,$tag); //以“/”分隔为数组$tags <br />$tag = $tags; //取数组$tags的第二个元素 <br />if(count($tags)>3) $PageNo = intval($tags); <br />}else{ <br />$tag = ""; <br />} <br />$tag = urldecode($tag); //对变量$tag做URL解码处理,%27解码后就成了“’” <br />//如果没有Tag或Tag不合法,显示所有Tag <br />if($tag=="" || $tag!=addslashes($tag) ){ //如果$tag为空或有’、"、\等字符则执行 <br />$dlist = new TagList($tag,’tag.htm’); //创建类TagList的实例,$tag传给其构造函数,此时$tag可能包含“’” <br />} <br />//如果有Tag,显示文档列表 <br />else{ <br />$dlist = new TagList($tag,’taglist.htm’); <br />} <br />类TagList相关代码:(./include/inc_taglist_view.php) <br />class TagList <br />{ <br />.. <br />var $Tag; <br />.. <br />//php5构造函数 <br />function __construct($keyword,$templet) //$keyword=$tag <br />{ <br />.. <br />$this->Tag = $keyword; //$this->Tag=$tag <br />.. <br />if($this->Tag!=’’) <br />{ <br />$this->TagInfos = $this->dsql->GetOne("Select * From `cms_tag_index` where tagname like ’{$this->Tag}’ "); //查询执行,漏洞产生! <br />} <br /></div><br />以上就是代码的分析,可能说得不太清楚,这样的漏洞因为可以使用“'”,所以如果条件可以的话可以直接into file得SHELL。 <br />利用方面大家自由发挥。为了方面我自己写了一个利用程序: <br /><br />dedeExp.exe <br /><br />当File_priv为YES并得到了物理路径的时候就可以直接Get the shell了。其中得到物理路径的方法是利用了./include/htmledit/index.php的一个漏洞,我们提交./include/htmledit/index.php?modetype=basic&height[]=toby57就可能得到路径。 <br /><br />如果这样得不到的话,还可利用重新安装漏洞,提交./install/index.php?step=2可以重新安装系统,当然也可以得到物理路径。 <br /><br />因为不能union查询,所以运气差的只有自己Get the hash再破解进后台拿SHELL了。</p>
頁:
[1]