某小众CMS漏洞挖掘与实战


概述

在前段时间实战攻防演练中发现很多医院都使用同一个管理系统,网站后台都是同一路径:/adm/index.php,但是我从未见过,且页面没有任何Banner信息,如图:

通过许久的搜索终于找到了一些极其相似的源码,但都没有源码来源,其中有一套来自网软志成医院科室诊所门诊部网站系统源码,现在也下架了。

环境搭建

运行环境使用Windows Server 2008 R2 64位和phpstudy进行搭建。部分源码已使用Zend加密,因此使用Zend解密工具进行解密,如图:

在安装过程中发现第二步需要填写信息获取试用授权,如图:

但填写之后程序仍然无法获取试用授权,可能是因为太旧了吧。因此需要修改代码将第二步绕过,以便安装成功进行学习。将www\install\install.php第二步代码直接改为$donext = TRUE;,如图:

此外程序还将检测授权,因此需要将程序中涉及检测授权的代码删除或注释,在www\includes\func\common.inc.php文件找到授权检测函数,如图:

将所有php文件中调用此函数的部分注释或删除即可。由于解密后的部分源码不完整,导致验证码无法显示。将www\adm\codeimg.php中缺少的部分代码补充如下:

然后将www目录中的文件放到网站根目录,访问网站即可开始安装:







安装完之后即可开始审计代码、挖掘漏洞并测试了,如图:

代码审计

使用RIPS仅扫描源码根目录发现存在代码执行、文件泄露、文件包含、SQL注入等漏洞,如图:

查看SQL注入漏洞,直接将变量的值进行字符串拼接,如图:

由于此处没有将错误信息输出页面,因此无法利用该注入点进行SQL注入,此外RIPS能扫描的文件数量较少,因此使用Seay扫描所有文件,如图:

发现大量文件包含漏洞、SQL注入漏洞、任意文件读取/删除漏洞和代码执行漏洞等。先看看SQL注入类的,发现基本都是没有错误回显的,无论手工注入还是使用sqlmap都未成功,然后查看登录文件adm/admin.php,如图:

adm/func/adm.inc.php文件发现存在SQL注入漏洞,但是同样没有错误回显,且验证码校验仅仅是将Cookie中的SYSIMG参数的值逆序后加一,如图:

不得不说代码很。。。怪不得使用Zend加密。虽然不能利用SQL注入获取数据库中的数据和Getshell,但是可以利用SQL注入绕过登录进入后台。

实战

使用Payload:a'or'1'='1' or'1。在用户名输入框输入该payload,然后随便输入密码,填写验证码即可绕过登录进入后台。

成功登录后台,如图:

编写Goby Poc

查询规则就根据验证码那里查询,如图:

检测规则加入必要的请求头,指定SYSIMG的值,提交的验证码为该值倒序加一即可,然后将Payload填入Post数据,如图:

测试响应部分将响应值设置为window.location='main.php'即可,如图:

测试Poc,如图:

虽然单IP扫描通过了,但是在实际扫描中发现Goby并不能识别HTTP请求头中的SYSIMG参数,因此无法扫描到该漏洞。

修改之后就可以扫描到了,如图:

防护建议

  1. 修改所有存在漏洞的代码
  2. 使用D盾、安全狗等安全软件

声明:Hack All Sec的博客|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 某小众CMS漏洞挖掘与实战


Hacker perspective for security