DEDECMS5.7版本利用GUESTBOOK.PHP来对SQL注射漏洞-漏洞预警

http://www.itjxue.com  2015-12-25 14:36  来源:小E自编  点击次数: 

dedecms程序漏洞问题困扰了很多的站长,在今天有个用户因流量超出找过来,经过对a云网络主机php空间网站日志的分析,发现一个漏洞引发的可怕问题,在日志中体现到,如下图:

dedecms 10 7 1 300x183 dedecms 5.7版本利用guestbook.php来对sql注射漏洞 漏洞预警

从这个日志来看,这个文件是很不正常的,但是很多站长不知道这个是漏洞在注射漏洞,这个影响的5.7版本的,该如何解决呢,找了很多资料发现还是有解决办法的。
漏洞文件edit.inc.php具体代码:
 

<?php
/**
 * @version        $Id: edit.inc.php 1 10:06 2010-11-10 tianya $
 * @package        DedeCMS.Site
 * @copyright      Copyright (c) 2007 - 2010, DesDev, Inc.
 * @license        http://help.dedecms.com/usersguide/license.html
 * @link           http://www.dedecms.com
 */
if(!defined('DEDEINC')) exit('Request Error!');

if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];
else $GUEST_BOOK_POS = "guestbook.php";

$id = intval($id);
if(empty($job)) $job='view';

if($job=='del' && $g_isadmin)
{
    $dsql->ExecuteNoneQuery(" DELETE FROM `dede_guestbook` WHERE id='$id' ");
    ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
    exit();
}
else if($job=='check' && $g_isadmin)
{
    $dsql->ExecuteNoneQuery(" UPDATE `dede_guestbook` SET ischeck=1 WHERE id='$id' ");
    ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
    exit();
}
else if($job=='editok')
{
    $remsg = trim($remsg);
    if($remsg!='')
    {
        //管理员回复不过滤HTML
        if($g_isadmin)
        {
            $msg = "<div class=\\'rebox\\'>".$msg."</div>\n".$remsg; 
            //$remsg <br><font color=red>管理员回复:</font>
        }
        else
        {
            $row = $dsql->GetOne("SELECT msg From `dede_guestbook` WHERE id='$id' ");
            $oldmsg = "<div class=\\'rebox\\'>".addslashes($row['msg'])."</div>\n";
            $remsg = trimMsg(cn_substrR($remsg, 1024), 1);
            $msg = $oldmsg.$remsg;
        }
    }
    $dsql->ExecuteNoneQuery("UPDATE `dede_guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
    ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
    exit();
}

if($g_isadmin)
{
    $row = $dsql->GetOne("SELECT * FROM `dede_guestbook` WHERE id='$id'");
    require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');
}
else
{
    $row = $dsql->GetOne("SELECT id,title FROM `dede_guestbook` WHERE id='$id'");
    require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
}


注射漏洞成功需要条件如下:

1、php magic_quotes_gpc=off
2、漏洞文件:plus/guestbook.php 在数据库中:dede_guestbook也需要存在
该如何判断是否存在漏洞呢,请看下面测试,
首先打开:域名/plus/guestbook.php把鼠标放在 [回复/编辑] 上可以看到访问者留言的ID。则记下ID,访问:域名/plus/guestbook.php?action=admin&job=editok&msg=errs.cc’&id=存在的留言ID提交后,如果是dede5.7版本的话,会出现 “成功更改或回复一条留言” 那就证明修改成功了。
再返回到:域名/plus/guestbook.php 看下您所改的那条留言ID是否变为了 errs.cc’ 如果是的话,那就证明此漏洞无法再利用应为他开启:php magic_quotes_gpc=off
如果没有修改成功,那留言ID的内容还是以前的,那就证明漏洞可以利用。
那么再次访问:域名/plus/guestbook.php?action=admin&job=editok&id=存在的留言ID&msg=’,msg=user(),email=’然后返回,那条留言ID的内容就直接修改成了mysql 的user().

(责任编辑:IT教学网)

更多