漏洞编号
- 无
漏洞概述
- DolphinPHP(海豚PHP)是一个基于ThinkPHP5.1.39LTS开发的一套开源PHP
- 在DolphinPHP ≤ 1.4.3版本中,jcrop函数都没有对上传的文件进行后缀和文件类型校验导致可以上传任意文件。
影响范围
- DolphinPHP ≤ 1.4.3
环境搭建
- 使用DolphinPHP 1.4.3搭建
代码审计
application/admin/controller/Attachment.php
的jcrop
函数
函数中没有作任何过滤处理就上传文件
构造POC
-
在程序后台有一个上传图片的地方,利用BP抓包查看请求URL的结构
-
过掉第一个包
-
第二个包就是上传图片的请求包
/admin.php/admin/attachment/upload/dir/images/module/admin.html
,分析URL,初步估计其结构为:/admin.php/admin/控制器/函数/参数名/参数值/参数名/参数值...
-
通过分析可知,上面的请求使用了
update
函数,而想要使用jcrop函数,必须让参数$from='jcrop'
,即需要往请求url上加一个/from/jcrop
-
在原有的请求包中作修改,请求url:
/admin.php/admin/attachment/upload/dir/images/module/admin.html
,同时把请求包中的文件名改成PHP后缀,文件内容改为PHPINFO
成功返回上传路径 -
访问上传路径,成功
使用条件
Attachment
类中没有initialize
函数,所以这里的函数并不存在调用条件Attachment
继承Admin
类,而Admin
类中存在initialize
函数,并且函数中有校验用户是否登陆
- 进入
isLogin()
函数中
- 继续跟踪
is_signin()
函数,函数校验了Cookie,基本不存在绕过
- 实际删除cookie后,会304跳转,证实需要在登陆的情况下可以利用该漏洞
参考
- 无