代码审计始于安装
很多人都认为我们的代码审计工作是在我们将CMS安装好之后才开始的,其实不然,在安装的时候我们的代码审计就开始了!
一般CMS为了提升用户的体验以及实现某些功能(比如:头像上传、模板上传等等)将会在CMS的安装过程中对该PHP环境进行检测,查看一些配置选项是否符合该CMS的安全需求,如果不符合它会在你安装的时候经过询问开启该设置。
作为代码审计人员的你,在安装过程你就当注意到有哪些敏感函数别开启了这个是非常重要的,在之后的审计过程中你可以多想想这个方面的内容。
PHP CMS的安装过程
- 下载PHP CMS安装包到本地,之后解压缩到WWW目录下面
- 按照CMS中的安装说明文档,在浏览器中访问该CMS安装页面
- 根据页面的提示输入相应的配置选项(本地数据库密码、CMS管理员账号/密码等)
- 在最后一步,程序会修改数据库信息、该CMS的配置信息等
安装过程中暴露的信息
文件的读写性:
相关的敏感函数:
还有环境中的PHP版本信息、Apache版本信息、以及其它配置信息等等这些都是一些至关重要的信息。
重要的Install.lock文件
在完成CMS的安装之后一般都会生成一个install.lock文件,这个文件的作用就是“防止网站误重启安装向导,导致重新安装”,这个文件也被称为“安装锁定保护文件”,它是以“.lock”结尾,但是其文件名不一定为install。只是大多数情况下为install。
可想而知,如果一个CMS在安装之后,如果出现lock文件缺失、自动删除、无意删除,那么在误进入安装向导的情况下就会导致系统的重新安装,导致原有数据库中的数据被覆盖。
根本无验证
在一些情况下甚至会出现一些CMS程序在完成安装之后即不会自动删除安装包也不会生成.lock文件来判断是否安装成功过,这时候就有可能出现“误启安装向导”导致系统重新安装,造成网站数据覆盖
安装文件的向导问题
如果在安装过程只能参数步骤直接以“GET”的形式提交那么可以通过step X的方式直接进入下一步安装。
变量覆盖导致重装
如果可以以GET、POST、COOKIE任意提交一个变量名为$insLockfile,给其赋空值,覆盖掉$insLockFile从而让file_exists为False就不会退出
判断Lock后,无exit
判断是否存在lock文件,如果存在lock文件,就会header到index.php,但是header后并没有exit,所以并不会退出,类似的还有JavaScript弹个框。
解析漏洞
在安装完成后将Install.php rename为install.php.bak,但是由于apache的解析漏洞:如果无法识别最后的一个后缀的话,就会向上解析,那么就成为了PHP了,就会结合安装时的变量覆盖,又成重装了