周末在家刚吃完晚饭,基友叫我一起来审计,也不知道他是受到啥刺激了。正好,除了公司项目代码及框架代码,未审计过其他系统,就当拿来练手了。代码审计的目的是发现代码中存在的缺陷,并对其进行修复或利用(灰盒测试)。通常是在本地部署一套环境,并进行反复调试直至发现缺陷。首选需要知道目标代码具备那些功能模块,针对性的对相关模块进行审计排查。其次需要通读带目标代码,知道其功能类的加载顺序、目录结构、方法文件及配置文件路径。目录结结构
根据上图中的目录,我们先看下前台文件内容:
代码量很少,首先定义了一个常量用于保持文件夹路径,随后加载了框架文件,最后运行了一个函数。
我们找到文件并查看,里面大体分为两块部分,最上面定义了一些常量并载入了框架所需的类文件及方法文件,下面则定义了一个类及静态方法。这里都需要去跟踪一下文件,避免走弯路和做无用功的测试。审计流程通过这些文件需要知道:1、如何调用控制器中的对应方法及相关视图2、框架对超全局变量做了那些处理及限制3、相关功能模块逻辑及参数校验是否严谨4、数据库使用 mysql 还是 PDO经过查看所有的加载文件,排查出几个函数需要我们注意下,如果在代码中有看到它们的出现就直接可以放弃了,避免浪费过多的时间。
上述方法都用到了函数对传递变量做了转义,转义了双引号尖括号及符。在看数据库查询用的是,所以避免浪费时间,碰到模块中使用这些方法处理的接收变量直接放弃。随后用浏览器打开配置好的站点,完成数据库的安装。尝试了一下,此处并不存在重复安装数据库的问题,说明这套cms安全意识很好。开始审计前端控制器,去除安装模块和框架基础类就剩下:、和三个文件。前台文件少内容也相对较少,看了这三个文件的内容并没有发现可以利用的地方。。后台控制器文件也并不多,均在文件夹内。将文件全部查看后未发现有效利用的点,外部接收均经过和方法过滤。后台模版编辑后触发文件包含因为是在本地测试,本着的原则,尝试一遍后台所有能看到的输入框。随后在模板编辑方法内,找到可以的方法。
我们在回到产品详情页面,成功 getshell.
分析原因后台编辑模版 URL:参数:
正如上面看到的,函数还原了方法中对特殊字符的转义。随后提交至 CNVD ,可惜啦,早就被人提交过了。
随后在 CNVD 上搜索了一下,这个版本的被爆过三个洞。分别是、和。帐号泄漏加无限制爆破看完 CNVD 中的漏洞描述后,发现可以对漏洞进一步扩展,形成一个组合漏洞。审计中发现 ,这个功能会向目录中的特定文件写入,如果未对该目录做访问控制则可以直接预览到管理员帐号。现在我们来看下 CNVD 漏洞列表中,验证逻辑漏洞是怎么产生的。
验证跟踪至此处,其代码在校验之前会删除 session 中的值,但变量依然存在的所以本次校验依然有效。只有当第二次请求过来时,才会赋值给变量一个空值。但是,这特么是全等符。难道被修复了?
为了验证我的猜想,在 github 上找到了一个 2017年7月18日 前的版本:
然后看看解压后该文件的修改日期:
对比了一下。好吧,该处已经被修复了。该漏洞的组合使用只限了。后台任意文件上传居然这么有缘,那就把 CNVD 列表中的该洞也分析一下吧。我们直接看问题代码:
简单生成一个 PHP 文件,用于复现测试:然后在构造本地提交表单页面:
提交路径指定:即可。
至此该 CMS 的审计结束了,希望对你有所帮助。
领取专属 10元无门槛券
私享最新 技术干货