专栏首页FreeBufPhpcms v9漏洞分析

Phpcms v9漏洞分析

最近研究源码审计相关知识,会抓起以前开源的CMS漏洞进行研究,昨天偶然看见了这个PHPCMS的漏洞,就准备分析研究一番,最开始本来想直接从源头对代码进行静态分析,但是发现本身对PHPCMS架构不是很熟悉,导致很难定位代码的位置,最后就采用动态调试&静态分析的方式对漏洞的触发进行分析,下面进入正题。

1、漏洞触发代码定位

通过漏洞的POC(/phpcms/index.php?m=member&c=index&a=register&siteid=1 )判断,漏洞触发点的入口位于/phpcms/modules/member/index.php文件中的register()方法中,在代码中插入一些echo函数,观察输出(见下)的变化。从下面的结果变化可知,img标签的src属性是在执行完下面的get()函数:

$user_model_info = $member_input->get($_POST['info'])

后发生变化,因此基本可以确定,漏洞的触发点就是位于这个函数中。

2、定位member_input->get()跟进分析

跟进该函数,该函数位于/phpcms/modules/member/fields/member_input.class.php文件中,此处本来还想故技重施,在该方法中对代码进行插桩,但是发现插桩后的居然无法打印到页面上,没辙(原因望各位大神指点一二),只能对代码进行一行行推敲,先把代码贴上,方便分析:

代码整体比较容易,可能比较难理解的就是$this->fields这个参数,这个参数是初始化类member_input是插入的,这个参数分析起来比较繁琐,主要是对PHPCMS架构不熟,那就在此走点捷径吧,在1中,直接将初始化完成后的member_input类dump出来,效果还不错,所有的参数都dump到页面上了,下面主要摘取比较重要的$this->fields[$field],即:【$this->fields["content"]】这个参数,如下所示⤵️:

有了上面的参数列表后,理解get()函数的代码就要轻松许多了,分析过程略。结论就是,漏洞的触发函数在倒数6、7两行,单独截个图,如下⤵️:

这里比较重要的是要找出$func这个函数,查查上面的表,找到["formtype"]=>string(6) “editor”,可知$func就是editor()函数,editor函数传入的参数就是上面列出的一长串字符串,和img标签的内容,下面将跟进editor函数,真相好像马上就要大白于天下了。

3、跟进editor函数及后续函数

editor()函数位于/phpcms/modules/member/fields/editor/imput.inc.php文件中,老规矩,先贴出代码:

简单阅读代码,发现实际的触发流程发生在$this->attachment->download()函数中,直接跟进这个函数,这个函数位于/phpcms/libs/classes/attachment.class.php中download()函数,源代码有点长,就贴一些关键代码,⤵️

代码主要是进行一些正则过滤等等操作,这里真正关键的是代码的最后一行的操作$upload_func($file, $newfile),其中$this->upload_func = ‘copy’;,写的在明白点就是copy($file, $newfile),漏洞就是一个copy操作造成的。

本文分享自微信公众号 - FreeBuf(freebuf),作者:nightmarelee

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-04-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 漏洞盒子发布《2015上半年度金融行业互联网安全报告》

    作为世界第二大经济体的中国经济,一举一动总是会成为全球瞩目的焦点。2015年中国股市如同乘坐了过山车一般在股民惊悚的叫喊声中度过了不太平的半年。而中国在上半年还...

    FB客服
  • 利用esp8266制作一个可随身携带的WiFi密码钓鱼器

    孙子兵法:故上兵伐谋,其次伐交,其次伐兵,其下攻城;攻城之法为不得已。 正是如此靠机器硬破不如直接问对方。 下面这就介绍下WIFI密码社工的进阶玩法 玩过Wi...

    FB客服
  • Flexera FlexNet Publisher中基于栈的缓冲区溢出漏洞分析

    近日,安全人员在Flexera FlexNet Publisher(License Manager)中发现了一个基于栈的缓冲区溢出漏洞(CVE编号:CVE-20...

    FB客服
  • 【编程经验】getchar、getch、getche三者的区别

    getchar、getch、getche三者的区别 今天给大家区分一下这三个单字符接受函数的区别。 getchar函数 是C语言标准...

    编程范 源代码公司
  • WPF 同一窗口内的多线程 UI(VisualTarget)

    发布于 2017-10-30 15:38 更新于 2018-09...

    walterlv
  • [转]2011黑帽大会亮点预览

    同往常一样,将于本周在拉斯维加斯举行的年度黑帽大会无疑是重磅事件。会上,安全专家将会粉碎人们不切实际的幻想——他们会告诉大众高科技行业制造的东西,不会有任何安全...

    the5fire
  • 逐鹿琅琊榜——原型设计师的武林秘籍

    “上知行业走向,下晓体验细节,左通技术架构,右晓刚需痛处,前能写文档,后能画原型,进能与数据共舞,退能与运营齐飞。与研发共进退,与UI齐存亡,陪测试耍bug,同...

    博文视点Broadview
  • 京东AI科学家5篇论文被自然语言处理顶级会议NAACL录用,自然语言生成课题取得重要突破

    京东技术
  • SpringBoot入门--springboot性能优化

    即不使用@SpringBootApplication默认扫包,使用ComponentScan注解显示声明扫包范围。

    编程大道
  • CXK, 出来打球!

    https://github.com/kasuganosoras/cxk-ball

    zhaoolee

扫码关注云+社区

领取腾讯云代金券