泛微E-Office /inc/priv_user_list/priv_xml.php SQL注入漏洞

2016-01-26T00:00:00
ID SSV:90617
Type seebug
Reporter hhxx
Modified 2016-01-26T00:00:00

Description

0x01 框架概述

泛微e-office是泛微公司面向中小型组织推出的OA产品,简单易用高效,部署快、投资少。提供免费试用体验。至今已为超过一万家客户提供方便高效的办公体验.

官方主页: www.weaver.com.cn

主页截图如下。

0x02 漏洞信息

先对系统进行解密。

/inc/priv_user_list/priv_xml.php 大概18行开始

``` $pararr = explodestpar( $_REQUEST['par'] );

$userpriv = $pararr['userpriv'];

...

if ( $pararr['view_type'] == 0 )

{

            unset( $deptnameutf8 );

            unset( $action );

            unset( $src );

            unset( $target );

            unset( $icon );

            $usql = "\r\n\t\t\tSELECT * FROM USER,USER_PRIV \r\n\t\t\t\tWHERE USER.USER_PRIV=".$userpriv." \r\n\t\t\t\tAND USER.USER_PRIV=USER_PRIV.USER_PRIV \r\n\t\t\t\tORDER BY PRIV_NO,USER_NAME\r\n\t\t\t";

            $urs = exequery( $connection, $usql );

```

$pararr = explodestpar( $_REQUEST['par'] );获取到request后,调用explodestpar处理,将$pararr['userpriv']传入SQL语句。

看看explodestpar函数:

``` function explodeStPar( $enpar )

{

            $depar = base64_decode( $enpar );

            $arrpar = explode( "|", $depar );

            if ( !is_array( $arrpar ) )

            {

                            return false;

            }

            $i = 0;

            for ( ; $i < sizeof( $arrpar );  ++$i    )

            {

                            $strpar = $arrpar[$i];

                            $tmparr = explode( ":", $strpar );

                            $j = 0;

                            for ( ; $j < sizeof( $tmparr );  ++$j    )

                            {

                                            if ( $j == 0 )

                                            {

                                                            preg_match( "/\\[([a-z0-9-_].+)\\]/i", $tmparr[$j], $exp );

                                                            $par = $exp[1];

                                            }

                                            else

                                            {

                                                            preg_match( "/\\[(.*)\\]/i", $tmparr[$j], $exp );

                                                            $val = $exp[1];

                                            }

                            }

                            if ( trim( $par ) != "" )

                            {

                                            $rearr[$par] = $val;

                            }

            }

            return $rearr;

} ```

大概是base64解码后7788处理一堆,出来一个数组。

既然是base64解码后的,所以可以有任何字符。不过本来这个注入点也没有单引号限制,所以也是直接注入的。

案例:

加单引号1',报错

爆出绝对路径

0x03 参考链接

http://www.wooyun.org/bugs/wooyun-2015-0105290/