提交需求
*
*

*
*
*
立即提交
点击”立即提交”,表明我理解并同意 《美创科技隐私条款》

logo

    产品与服务
    解决方案
    技术支持
    合作发展
    关于美创

    申请试用
      php代码审计案例之Bluecms(一)
      发布时间:2023-02-17 阅读次数: 517 次

       前 言

      所谓代码审计是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。在安全领域,为了发现安全问题,常通过黑盒测试、白盒测试方法来尽可能的发现业务程序中的安全问题,代码审计就是白盒测试的常用方法,相较于黑盒测试,由于白盒测试能接触到源代码,可以更加详细的理解业务程序逻辑,也能更全面的发现安全风险。接下来本系列文章将以Bluecms v1.6 作为php代码审计案例为切入点,过程中结合常见源代码扫描工具和动态调试方法,来详细介绍php代码审计的思路,相关源代码网上也都有公开。





       审计环境说明
      环境phpstudy
      Apache 2.4.9
      Mysql 5

      Php 5.6.9





       源代码审计工具扫描结果
      图片
      图片
      图片




       系统入口梳理

      在对一个真实cms进行审计的时候,先整体对网站的目录结构大致做个全局分析,了解每个目录的基本功能以及目录入口文件index.php所在位置。对index.php的分析,个人认为主要是为了了解下面几个问题。

      1.页面路由的流程
      2.系统的认证、鉴权逻辑
      3.初始化的数据过滤方法

      4.数据库的连接方式

      图片

      根据index.php内容,大致可以看到,主要就是获取数据库数据,并在首页展现,这个过程中没有任何的交互判断,只是个静态展现。

      图片
      图片
      图片

      到这里应该就可以知道这个系统前台并没有做统一入口再分发,因此是一个多入口的系统。而多入口系统,一般就会需要通过标准化的函数来对多个入口进行过滤检查鉴权等。查看根目录下的其他文件,基本都引用了同一个文件,即/include/common.inc.php文件,接下来我们来看一下common.inc.php文件

      会话相关配置

      图片

      外部数据过滤,如果没有配置gpc,则通过addslashes函数进行过滤,但这里我们要注意无论是gpc还是addslashes,它都没有对$_SERVER进行过滤,且无法对数字型的注入产生效果,这两个点要注意,是可能存在漏洞的地方。

      图片

      设置时区和获取请求ip

      图片

      配置数据库连接,这里注意是使用mysql直接连接,针对数据库连接类型,我们注意是否数据库内使用gbk编码,如果是,可能存在宽字节注入

      图片
      图片

      而这里正好是gbk编码方式,因此这是一个可能存在漏洞的点,要注意。

      Smarty模版配置

      图片

      用户黑名单排查。注意这里虽然经过了黑名单排查,但其实即使是在黑名单中,后面的程序逻辑也是可以继续走下去的。

      图片

      用户权限校验,若不存在SESSION,则进行COOKIE校验。

      图片

      因此总的来看,这个入口检查文件的主要功能包括有配置phpsession会话、使用gpc/addslashes进行外部数据初始化过滤、设置时区、过滤黑名单IP、初始化数据库连接、Smarty渲染、用户session及cookie的校验。当然这只是前端普通用户的流程。根据目录,我们可以看到存在admin管理员后台。

      图片

      同理,我们也需要了解下admin管理员的index.php和入口文件。来把握住后台的逻辑

      Index.php基本是类似的,渲染首页的页面,同时通过admin/include/common.inc.php进行入口检查

      图片

      接下来看下admin/include/common.inc.php文件,其它方面都是和前台一样的,在鉴权这个地方,它主要对管理员身份进行检查。即如果session为空,则检查cookie,如果不为空,则更新session。

      图片

      到这里我们基本上把bluecms的前后端的入口流程理清,其中涉及到用户鉴权、数据库连接、外部数据过滤、页面渲染展示等。而且从流程看,目前发现外部数据过滤和数据库连接处,存在理论上的安全风险。想要全面地进行代码审计,这一步是必不可少的,切记。

      以上是本章节的主要介绍内容,后续将继续更新具体漏洞的审计方法,敬请期待。



      免费试用
      服务热线

      马上咨询

      400-811-3777

      回到顶部