所谓代码审计是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。在安全领域,为了发现安全问题,常通过黑盒测试、白盒测试方法来尽可能的发现业务程序中的安全问题,代码审计就是白盒测试的常用方法,相较于黑盒测试,由于白盒测试能接触到源代码,可以更加详细的理解业务程序逻辑,也能更全面的发现安全风险。接下来本系列文章将以Bluecms v1.6 作为php代码审计案例为切入点,过程中结合常见源代码扫描工具和动态调试方法,来详细介绍php代码审计的思路,相关源代码网上也都有公开。
Php 5.6.9
在对一个真实cms进行审计的时候,先整体对网站的目录结构大致做个全局分析,了解每个目录的基本功能以及目录入口文件index.php所在位置。对index.php的分析,个人认为主要是为了了解下面几个问题。
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的前后端的入口流程理清,其中涉及到用户鉴权、数据库连接、外部数据过滤、页面渲染展示等。而且从流程看,目前发现外部数据过滤和数据库连接处,存在理论上的安全风险。想要全面地进行代码审计,这一步是必不可少的,切记。
原文始发于微信公众号(第59号):php代码审计案例之Bluecms(一)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论