太阳集团2138备用网址

  • 防弹少年团金泰亨蓝发登各国热搜 玩儿转红粉金黑棕各种发色实力演绎“有颜任性”【组图】 2019-04-25
  • 龙烨为袁竹逍遥画派配画诗欣赏之三 2019-04-25
  • 因应增值税下调 多个豪车品牌在华降价 2019-04-25
  • “小屏论”话两会:“习语”暖人心 2019-04-25
  • 低价 贴心 保障 国美3.15,为消费者保驾护航低价贴心保障 国美315,为消费者保驾护航-国美 2019-04-25
  • 中央政治局同志向党中央和习近平总书记述职 2019-04-25
  • China Daily Website 2019-04-25
  • 【守护好我们的美丽家园】新疆的明天一定会更好 2019-04-25
  • 22年后紫霞仙子归来 可至尊宝已经不是他了 2019-04-25
  • 【独家V观】你好 意大利 2019-04-25
  • 合肥一文化公司人去楼空老板跑路 老人购买保健品被骗上万元 2019-04-25
  • 北京二手房交易实现一网通办 20分钟就办完 ——凤凰网房产北京 2019-04-25
  • NBA史上最牛的9大名帅 波波在这里只能排倒三 2019-04-25
  • 《阿丽塔》要和《流浪地球》抢票房 2019-04-24
  • 百城住宅均价环比涨幅持续收窄 变化大多在1%内 2019-04-24
  • 欢迎来到 黑吧太阳集团2138备用网址 是业内专业的游戏平台,为你提供各式各样的精品游戏,最全的游戏项目,同时还为您提供各种游戏专题游戏攻略人气论坛。

    某php开源cms有趣的二次注入

    来源:本站整理 作者:佚名 时间:2019-02-22 TAG: 我要投稿

    太阳集团2138备用网址 www.r-island.com 这个漏洞涉及到了mysql中比较有意思的两个知识点以及以table作为二次注入的突破口,非常的有意思。此cms的防注入虽然是很变态的,但是却可以利用mysql的这两个特点绕过防御。本次的漏洞是出现在ndex.class.php中的likejob_action()和saveresumeson_action()函数,由于这两个函数对用户的输入没有进行严格的显示,同时利用mysql的特点能够绕过waf。
    PS:此漏洞的触发需要在WAP环境下,所以在进行调试的时候需要修改浏览器的ua为Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Mobile Safari/537.36。
     
    漏洞分析
    mysql特点
    特点1
    传统的插入方式可能大家想到的都是insert into test(id,content,title) values(1,'hello','hello')。如果我们仅仅值需要插入一条记录,则使用insert into test(content) values('hello2')。如下图所示:

    但是实际上还存在另外一种方式能够仅仅值插入一条记录。
    insert into test set content='hello3';

    可以看到这种方式和insert into test(content) values('hello2')是一样的。
    说明插入数据时,利用values()和通过=指定列的方式结果都一样
    特点2
    我们知道mysql中能够使用十六进制表示字符串。如下:

    其中0x68656c6c6f表示的就是hello。这是一个很常见的方式。
    除了使用十六进制外,还可以使用二进制的方式进行插入。hello的二进制是01101000 01100101 01101100 01101100 01101111,那么我们的SQL语句还可以这样写,insert into test set content=0b0110100001100101011011000110110001101111。这种方式和insert into test(content) values (0b0110100001100101011011000110110001101111)是一样的。
    mysql不仅可以使用十六进制插入,还可以使用二进制的方式插入

    waf防护分析
    waf的防护是位于config/db.safety.php
    其中的gpc2sql()过滤代码如下:
    function gpc2sql($str, $str2) {
        if (preg_match("/select|insert|update|delete|load_file|outfile/is", $str)) {
            exit(safe_pape());
        }
        if (preg_match("/select|insert|update|delete|load_file|outfile/is", $str2)) {
            exit(safe_pape());
        }
        $arr = array("sleep" => "Sleep", " and " => " an d ", " or " => " Or ", "xor" => "xOr", "%20" => " ", "select" => "Select", "update" => "Update", "count" => "Count", "chr" => "Chr", "truncate" => "Truncate", "union" => "Union", "delete" => "Delete", "insert" => "Insert", """ => "“", "'" => "“", "--" => "- -", "(" => "(", ")" => ")", "00000000" => "OOOOOOOO", "0x" => "Ox");
        foreach ($arr as $key => $v) {
            $str = preg_replace('/' . $key . '/isU', $v, $str);
        }
        return $str;
    }
    可以看到将0x替换为了Ox,所以无法传入十六进制,但是我们却可以利用mysql中的二进制的特点,利用0b的方式传入我们需要的payload。
    index.class.php漏洞分析
    漏洞是位于wap/member/model/index.class.php中,漏洞产生的主要函数是位于likejob_action()和saveresumeson_action()中。我们首先分析likejob_action()。likejob_action()的主要代码如下:

    而DB_update_all()的代码如下:
    function DB_update_all($tablename, $value, $where = 1,$pecial=''){
        if($pecial!=$tablename){
            $where =$this->site_fetchsql($where,$tablename);
        }
        $SQL = "UPDATE `" . $this->def . $tablename . "` SET $value WHERE ".$where;
        $this->db->query("set sql_mode=''");
        $return=$this->db->query($SQL);
        return $return;
    }
    也就是说,当数据进入到DB_update_all()之后就不会有任何的过滤。那么漏洞点就在于resume_expect中的job_classid字段。job_classid字段的内容的传递如下图所示:

    [1] [2] [3]  下一页

    【声明】:太阳集团2138备用网址(http://www.r-island.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@www.r-island.com,我们会在最短的时间内进行处理。