LightCMS1.3.7漏洞复现
前言
lightCMS
是一个轻量级的CMS
系统,也可以作为一个通用的后台管理框架使用。lightCMS
集成了用户管理、权限管理、日志管理、菜单管理等后台管理框架的通用功能,同时也提供模型管理、分类管理等CMS
系统中常用的功能。
搭建环境
1 |
|
laravel框架属实还没学明白,只能照着网上的复现,这个漏洞出在 app/Http/Controllers/Admin/NEditorController.php
中的上传图片的功能:
知道漏洞发生在哪了,我自己先分析了下这串代码,
关于config函数config 函数
如果我要的配置不在.env 文件中而在 mail.php 文件中,我要临时设置和读取该怎么办,这个时候我们就要使用 config 函数了,这个函数在使用上有些特色,我们一一说。
比如我现在要读取 mail.php 文件中的 driver 配置项,可以使用 config(‘mail.driver’), 如果要获取 mail.php 文件中所有的配置项可以使用 config(‘mail’),注意两种方式的区别。
如果我们想临时的修改配置,但是又不像让它生效,可以使用 config([‘mail.driver’=>’sendmail’]),这样邮箱配置中的驱动配置就改为了 sendmail,不过这种方式是临时的,并不会写入到配置文件中。
先用过滤器过滤变量,初始化curl话柄来获取远程资源的内容,然后使用 Image:make 模块进行解析用imagecreatefromwebp获得的WebP 图像文件,
文件名称 配置类型 app.php 应用相关,如项目名称、时区、语言等 auth.php 用户授权,如用户登录、密码重置等 broadcasting.php 事件广播系统相关配置 cache.php 缓存相关配置 database.php 数据库相关配置,包括 MySQL、Redis 等 filesystems.php 文件存储相关配置 mail.php 邮箱发送相关的配置 queue.php 队列系统相关配置 services.php 放置第三方服务配置 session.php 用户会话相关配置 view.php 视图存储路径相关配置
这里config函数读取light.image_upload.driver的值,判断是不是上传到本地,如果不是的话就获取class然后实例化,回调catchImage函数
然后获取请求结果,转换为数组去重,接着遍历数组,随后跟进fetch Image File函数
可以看到先用过滤器看是否$url
是否是url
。注意这不仅http协议可以通过,其它如phar协议同样也可以。接着尝试 curl 访问 url,并返回结果给$data
,然后通过isWebp()
判断$data
是否是 webp 文件,其中会调用Intervention\\Image\\Facades\\Image
的 make方法,对图片内容进行解析
逐步跟进vendor/intervention/image/src/Intervention/Image/ImageManager.php
继续跟进到vendor/intervention/image/src/intervention/Image/AbstractDriver.php
,通过 init()
,然后传入 decoder->init()
跟进init到vendor/intervention/image/src/Intervention/Image/AbstractDecoder.php
查看 isUlr()
方法,同样也是判断$data
是否为 url,这时$data
是 phar 协议,可以 return true,所以 $data
传入initFromUrl()
查看initFromUrl()
方法,可以看到 file_get_contents()
触发 phar 反序列化
exp如下
1 |
|
具体的laravel事件机制可以看看
[]: https://blog.csdn.net/qq_16877261/article/details/79095039?utm_source=blogxgwz0
最后在发包即可
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!