freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

代码审计| fiyocms的多个漏洞集合
2018-01-03 11:17:28

0x01 背景

上周发的phpcms的漏洞分析,有些伙伴觉得比较复杂,于是便诞生本篇,通过审计一些普通的cms来一步步学习代码审计的技巧。

本篇涉及的源码可以在 此处下载:https://sourceforge.net/projects/fiyo-cms/

0x02 漏洞集合

SQL 注入漏洞

问题文件:\fiyocms\dapur\apps\app_contact\controller\status.php

问题分析:

在问题文件中的第16-25行中使用GET请求接收stat和id参数的值,然后将id参数的值拼接到update操作的SQL语句中。

SQL.png

跟入update方法,在\fiyocms\system\database.php文件中的第210-255行中发现update方法的代码块,然后在文件的第233-239行中,先进行了SQL拼接在传入到prepare方法中,然后再执行SQL语句,因此此处是存在SQL注入漏洞的,且全站使用update方法的可能都存在相同问题。

相同.png

漏洞验证:

由于该页面并不回显SQL错误信息,所以不能使用SQL报错注入,页面无论正确与否都是一致的所以不能使用布尔盲注,因此可以使用时间盲注来获取数据

使用GET请求如下语句进行like的迭代注入,然后用if进行数据对错的判断,获得正确数据变回延迟5s回显页面,错误数据便会直接回显页面。

[http://127.0.0.1/code/fiyocms/dapur/apps/app_contact/controller/status.php?stat=1&id=1](http://127.0.0.1/code/fiyocms/dapur/apps/app_contact/controller/status.php?stat=1&id=1) and  if((select user() like "root@localhost%"),(sleep(5)),1)

回显.png

任意文件读取:

问题文件: \fiyocms/dapur/apps/app_theme/libs/check_file.php

问题分析:

在问题文件中的第13-26行,使用GET方式接受src,name参数的值,然后再使用$file和 $furl进行数据拼接后,传入file_get_contents函数中。

函数.png

file_get_contents函数读取到的目标文件在当前页面中进行显示,因此存在任意文件读取的漏洞。

读取.png

漏洞验证:

为了方便构造和查看路径信息,我在问题文件中加入了如下两行,其中src参数可以用来进行目录跳转,name参数可以用来设置要读取的目标文件名称,然后进行如下请求可以读取任意文件的内容。

内容.png

[http://127.0.0.1/code/fiyocms/dapur/apps/app_theme/libs/check_file.php?src=..&name=config.php]

PHP.png

任意文件删除

问题文件:fiyocms\dapur\apps\app_config\controller\backuper.php

问题分析:

在问题文件中的第16-30行中使用了unlink函数对POST传入的文件进行删除操作,虽然开始限制了需要在.backup文件夹内的内容,但是可以使用../进行目录跳转,从而删除任意文件。

删除.png

漏洞验证:

任意文件删除漏洞通常可以结合重装来进行利用,比如fiyocms在index.php首页中会检测是否存在config.php文件,如果不存在便会启动安装过程。

启动.png

因此可以构造如下请求删除config.php,然后访问首页便会进行重装操作。

Url: [http://127.0.0.1/code/fiyocms/dapur/apps/app_config/controller/backuper.php](http://127.0.0.1/code/fiyocms/dapur/apps/app_config/controller/backuper.php)

POST: type=database&file=../config.php

new.png

任意文件上传:

问题文件:\fiyocms/dapur/apps/app_theme/libs/save_file.php

问题分析:

在问题文件中的第23-27行中使用了file_put_contents方法将传入的$c文本内容保存到$f相对应的位置上,且这两个变量都是通过POST请求接收到对应参数的值,并没有进行任何的安全处理,所以存在任意文件上传漏洞。

上传漏洞.png

漏洞验证:

首先使用POST请求提交如下内容

Url: [http://127.0.0.1/code/fiyocms/dapur/apps/app_theme/libs/save_file.php](http://127.0.0.1/code/fiyocms/dapur/apps/app_theme/libs/save_file.php)

POST: src=./evil.php&content=<?php phpinfo();

如下.png

然后在进行如下请求验证恶意文件有没有上传成功

url: [http://127.0.0.1/code/fiyocms/dapur/apps/app_theme/libs/evil.php](http://127.0.0.1/code/fiyocms/dapur/apps/app_theme/libs/evil.php)

11PHP.png


0x03 总结

本篇仅举了几个例子进行代码审计的分析,其实这个cms还有很多漏洞可以研究学习,大家(萌新)可以参考本篇尝试学习代码审计的过程,然后开始入坑代码审计吧:-)

640.webp.jpg

# fiyocms # 漏洞集合
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者