data/mysql_error_trace.inc_dedeCMS /data/mysql_error_trace.php DB error raised PHP Code Injection Vi...

目录

1. 漏洞描述2. 漏洞触发条件3. 漏洞影响范围4. 漏洞代码分析5. 防御方法6. 攻防思考

1. 漏洞描述

dedecms采用面向对象封装的方式实现了功能操作的模块集中化,例如对于数据库管理

1. /include/dedesql.class.php: mysql数据库操作2. /include/dedesqli.class.php: mysqli数据库操作

当发生数据库操作语句执行错误的时候,框架代码会集中对错误相关信息进行收集,并保存到一个指定的文件中(/data/mysql_error_trace.php),但是这里存在一个安全上的漏洞

1. MySQL字段数值采用了C语言同样的定义,当传入的数值大于字段定义的类型的时候,将引发整型上溢出错误2. /data/mysql_error_trace.php没有进行正确的访问认证/*security practice

在不需要被访问的日志文件头应该加上以下代码

die('Request Error!');

or

exit();*/

3. 日志文件最好使用例如".txt"的文本文件进行保存

真正导致漏洞的原因是数据库处理库(/include/dedesql.class.php),而触发这个漏洞的文件有很多,攻击向量路径很多,理论上只要调用了如下代码即存在漏洞

/*$dsql->ExecuteNoneQuery("Update `$maintable` set scores = scores + {$cfg_caicai_add},goodpost=goodpost+1,lastpost=".time()." where id=$id");*/

目前已知的可以成为攻击向量的文件有

1. /plus/digg_frame.php2. /plus/digg_ajax.php3. /plus/comments_frame.php

Relevant Link:

http://icarusli.iteye.com/blog/610715

http://www.007hack.com/?p=522

2. 漏洞触发条件

3. 漏洞影响范围

1. < dede 5.7

4. 漏洞代码分析

/include/dedesql.class.php

//显示数据链接错误信息

function DisplayError($msg)

{

$errorTrackFile= dirname(__FILE__).'/../data/mysql_error_trace.inc';//这里将日志文件的后缀改为了.inc,是一个好的防御方法

if( file_exists(dirname(__FILE__).'/../data/mysql_error_trace.php') )

{

@unlink(dirname(__FILE__).'/../data/mysql_error_trace.php');

}

$emsg= '';

$emsg .= "

DedeCMS Error Warning!

\r\n";

$emsg .= "

";

$emsg .= "

\r\n";

$emsg .= "


Error page: ".$this->GetCurUrl()."
\r\n";

$emsg .= "

Error infos: {$msg}
\r\n";

$emsg .= "

\r\n";

echo $emsg;

$savemsg= 'Page:'.$this->GetCurUrl()."\r\nError:".$msg;//保存MySql错误日志

$fp = @fopen($errorTrackFile, 'a');//直接将错误信息写入了可执行的.PHP文件中

@fwrite($fp, '\r\n");

@fclose($fp);

}

5. 防御方法

//显示数据链接错误信息

function DisplayError($msg)

{

$errorTrackFile= dirname(__FILE__).'/../data/mysql_error_trace.inc';if( file_exists(dirname(__FILE__).'/../data/mysql_error_trace.php') )

{

@unlink(dirname(__FILE__).'/../data/mysql_error_trace.php');

}

$emsg= '';

$emsg .= "

DedeCMS Error Warning!

\r\n";

$emsg .= "

";

$emsg .= "

\r\n";

$emsg .= "


Error page: ".$this->GetCurUrl()."
\r\n";

$emsg .= "

Error infos: {$msg}
\r\n";

$emsg .= "

\r\n";

echo $emsg;

$savemsg= 'Page:'.$this->GetCurUrl()."\r\nError:".$msg."\r\nTime".date('Y-m-d H:i:s');//保存MySql错误日志

$fp = @fopen($errorTrackFile, 'a');

@fwrite($fp,'\r\n");

@fclose($fp);

}

6. 攻防思考

Copyright (c) 2014 LittleHann All rights reserved

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值