DedeCms V5.1 tag.php注入漏洞


    SEBUG-ID:3885
    SEBUG-Appdir:织梦(DedeCms)
    发布时间:2008-08-20
    影响版本:
    DedeCms V5.1 [sp1]漏洞描述:
    Dedecms算是使用比较广泛的PHP整站系统了,在被使用的同时系统的安全性也被人们关注
    目录下的tag.php文件对变量$tag处理不当,导致注入漏洞的形成
    因为可以使用“'”,所以如果条件可以的话可以直接into file得SHELL。
    <*参考
    toby57 [www.toby57.cn]
    *>
    测试方法:
    [www.sebug.net]
    本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!http://www.sebug.net/bbs/thread-332-1-1.htmlSEBUG安全建议:
    暂无
    www.dedecms.com// sebug.net [2008-08-20]
    Dedecms算是使用比较广泛的PHP整站系统了,在被使用的同时系统的安全性也被人们关注。在以前dedecms也爆过不少漏洞,官方都很快出了补丁,前几天公布了注射漏洞,其实这个系统也受最近很流行的多字节编码漏洞影响。不过今天说的这个漏洞与多字节编码无关,倒跟URL编解码有关系,
    呵呵。仅测试了DedeCms2007(DedeCms V5.1 [sp1])。
    目录下的tag.php文件对变量$tag处理不当,导致注入漏洞的形成,话不多说,贴代码:
    复制代码
    代码如下:
    
    if(isset($_SERVER["QUERY_STRING"])){
    $tag = trim($_SERVER["QUERY_STRING"]); //得到GET的参数
    $tags = explode(’/’,$tag); //以“/”分隔为数组$tags
    $tag = $tags[1]; //取数组$tags的第二个元素
    if(count($tags)>3) $PageNo = intval($tags[2]);
    }else{
    $tag = "";
    }
    $tag = urldecode($tag); //对变量$tag做URL解码处理,%27解码后就成了“’”
    //如果没有Tag或Tag不合法,显示所有Tag
    if($tag=="" || $tag!=addslashes($tag) ){ //如果$tag为空或有’、"、\等字符则执行
    $dlist = new TagList($tag,’tag.htm’); //创建类TagList的实例,$tag传给其构造函数,此时$tag可能包含“’”
    }
    //如果有Tag,显示文档列表
    else{
    $dlist = new TagList($tag,’taglist.htm’);
    }
    类TagList相关代码:(./include/inc_taglist_view.php)
    class TagList
    {
    ..
    var $Tag;
    ..
    //php5构造函数
    function __construct($keyword,$templet) //$keyword=$tag
    {
    ..
    $this->Tag = $keyword; //$this->Tag=$tag
    ..
    if($this->Tag!=’’)
    {
    $this->TagInfos = $this->dsql->GetOne("Select * From `cms_tag_index` where tagname like ’{$this->Tag}’ "); //查询执行,漏洞产生!
    }