PHP框架MVC类上传断点调试挖掘

PHP框架MVC类上传断点调试挖掘
Yatming的博客1 | 首先是关键字搜索:可以从函数,关键字,或者全局变量等等,函数可以是有upload关键字的,关键字可以和上章一样select之类的,全局变量就是$_GET或者$_POST或者$_FILES,之类的 |
Beescms无框架后台任意文件上传
首页:
后台:
phpstorm和xdebug
首先我安装的是phpstorm2022.3
的版本,然后php的版本是5.6.9
,xdebug的版本是:php_xdebug-2.5.5-5.6-vc11-nts-x86_64
下载这个插件到这个F:\phpstudy\phpStudy_64\phpstudy_pro\Extensions\php\php5.6.9nts\ext
目录(每个人的目录情况不一样)
1 | [xdebug] |
粘贴到对应PHP版本的php.ini文件中:
配置phpstorm
这里推荐几篇关于这个玩意的博客:
1 | https://developer.aliyun.com/article/1158081 |
开始审计,首先找有没有上传点,直接搜索关键字:上传,然后发现出现的结果太多了,所以改成搜全局变量:$_FILES
首先一个一个来看:
/admin/admin_file_upload.php
在网站中访问这个路径。得到一个上传页面。
使用定位函数,发现这个函数:
上图有一个地方说错了,就是类型需要符合的是$type中的类型,而不是$file_type
所以关键就是绕过pathinfo
函数,然后跑一个在线网站:
可以看到,这个函数会一直取最后一个点的最后的结果
抓包这个页面的数据包,进行00截断发现不行(如果服务器是linux的可以考虑解析漏洞),所以这里绕不过
更换一个$_FILES函数存在的文件(admin_pic_upload.php)
这里是可以通过MIME的类型进行绕过,下面先说利用过程:
其实返回包中就返回了上传路径,或者可以像视频中说的一样,使用这个格式是通过时间戳加随机数生成的,可以通过burp进行爆破就行了,返回200,基本上就是那个文件名,而且如果仔细看这里,上传一个php文件,不仅会上传一个php而且会上传一个同名的jpeg,也就是说你可以到,图片管理的界面,复制图片链接,然后把后缀改为php就行
原理:
处理图片上传的函数是up_img()
,还传递了一个数组,因该是允许上传文件的格式,定点查询这里函数
判断传过来的type的值是否,在前面设置的数组中的值一致,一致就可以上传了,由此漏洞就有了
Finecms 基于前台 MVC 任意文件上传
对头像上传进行抓包分析(上传test.jpg
文件,这是一个基于MVC的框架的网站),s对应目录,c对应文件名,m对应方法
在MVC框架内的controller
中,查找member
目录,文件名为account
,函数为upload
(一般核心代码都在控制器里面)
如果还是使用前面的方式的话,全局搜索或者断点都是可以找到这个上传验证代码的,全局搜索的话就是搜出来的结果太多了影响效率
后面的才是上传图片的验证代码,这里是一个也算一个逻辑错误,因为这里是先上传然后在验证,也就是说我上传一个php文件,虽然会告诉我格式错误,但是我的php文件还是已经上传成功了
下面就是复现:
Cltphp基于前台 TP5 框架任意文件上传
1 | https://www.cltphp.com/ |
新版已经没有这个漏洞了
花费0.88买了这cms
搭建的话,我这边用新版的小皮一直没有搭建成功,就算搭建成功,上传文件的时候也是请求异常,是在不想折腾了, 然后用虚拟机搭建了一个小皮2018的,就可以了,将网站的根目录设置成源码下的public,然后数据库名啊密码之类的,在app目录下有一个database.php的文件,进行配置就行了,然后访问的时候直接用ip进行访问就行了。上传成功之后,由于是虚拟机,所以这里需要绝对路径,才能访问成功:
thinkphp的框架很安全,但是开发者的写法如果不按照标准规定来,那么验证的时候很可能就是自己的代码验证,从而产生了安全漏洞
资源
1 | https://blog.1997sty.com/cos/uploads/20220407/20f03be8393a226641f1462126a10d76.rar ---> finecms_v5.0.6.rar |