概述
在前段时间实战攻防演练中发现很多医院都使用同一个管理系统,网站后台都是同一路径:/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参数,因此无法扫描到该漏洞。
修改之后就可以扫描到了,如图:
防护建议
- 修改所有存在漏洞的代码
- 使用D盾、安全狗等安全软件
Comments | NOTHING