问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
CVE-2023-44974 emlog CMS任意文件上传漏洞分析
漏洞分析
CVE-2023-44974 emlog CMS任意文件上传漏洞分析
原本是在想在cnvd上看看有什么白盒的CMS想审一审1day,然后发现了这个CMS ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-d327ed739f1a6825f66f4d123672b0e95b2c5b4a.png) 可以看到其对应版本为2.2.0,但是其实在最新版还是依然存在该漏洞,因此我们这里直接使用最新版来进行分析好了。 **项目地址** <https://github.com/emlog/emlog> 0x01 环境搭建 --------- 在windows下搭建的项目,在github上下载好项目文件 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-da34ce6ba124b894889def75eef6232e38b72900.png) 然后通过phpstudy进行搭建,在phpstudy新建数据库,名为emlog ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-ed891ea07adbda15b6929f7a45bacf064eb5fd6a.png) 然后输入你想要设置的数据库名、用户名与密码即可,这里为了区别开,直接就是emlog了 然后将项目解压放到网站根目录下 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-dbf895b5b11746f650c08329c33883491bbf4557.png) 启动phpstudy后访问http://localhost://emlog2.3.0/install.php ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-7873d6d95b0830d07c477440b4fa8076e81401c3.png) 配置好刚刚创建的数据库信息和网站后台管理员信息,然后点击安装即可安装完成。 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-d0e4f71af124417125ebad7107f8d66c44c15446.png) 0x02 漏洞复现 --------- 从上面的cnvd内容也可以知道漏洞点位于后台的admin/plogin.php处,我们使用刚刚安装设置的管理员账号密码登录后找到该处 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-4c4c44f3e879e398b0d7a4e78749eea30107c9b0.png) 该处可以上传.zip文件,并且会将.zip文件解压。 这里先进行复现,后面我们在分析为什么可以上传 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-5e7b63805dfa0ae0e0531335b6e7ab14e1bfcf6e.png) ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-3599fe3586564e70d0484d221dc339fcbe563ce2.png) 上传一个shell.zip文件,shell.zip中文件路径如下 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-5718fcca94ba186466eb0f2d0cfd6ce0b262b91d.png) shell.php内容如下 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-82a6affa5d6efce56ca56036573b916e173b766a.png) 然后我们可以看到上传插件成功。 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-9fffbc5523284055492be8d13bd1aee6e0090485.png) 在网站保存插件的目录下已经上传了shell文件夹与shell.php文件 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-9aa412983c82dac4f81e2bf7ab682ada53c538c9.png) 访问 <http://localhost/emlog2.3.0/content/plugins/shell/shell.php> ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-fa9ed795d5ea3d16ae18ad2a36ddde47b2f84927.png) 可以看到被成功执行了shell.php中的内容 0x03 漏洞分析 --------- 接下来我们就分析一下为什么这里可以这样上传文件吧,首先看到数据包显示的路径为/admin/plugin.php 我们直接去看一下plugin.php文件内容,然后直接定位到upload\_zip ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-9e6559c4165f797cd72a708a8c807c7ebf4c78be.png) 可以看到首先在该处先对登录用户token值进行了校验,然后就是对上传的文件可能存在的错误进行报错提醒,因为我们可以注意到有很多个error\_字母的错误提示符,我们可以全局搜索一下这些都表示什么 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-8efdf96be1bda48e1739ecc2203fa494f718afdf.png) 看到在view/plugin.php下,访问看看 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-89a411c632a6559f3f6aa6283a4dedbfc05bab09.png) 可以看到这里的所有可能在上传中的报错信息,这里我们先留着,后面会有用的,我们回到admin/plugin.php中。 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-c02ee647fe1ccd7e49726591352fc1bb41845c07.png) 可以看到在107行处有一个emUnzip的操作,从名字看是一个解压的函数,我们跟进去看看 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-cd63852fb556b42d3c56c6f0918afe92c1d0ade4.png) emUnzip函数接收了三个参数,第一个参数为要解压的文件,第二个参数为要解压到的路径,第三个参数为作为什么保存的,根据我们刚刚上传的功能点为plugin,因此这里我们是以插件的功能点进行的保存。 我们主要看到plugin分支处的逻辑 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-5e213502dde1da90efbfc1dd4a13dcc38c2ccda7.png) 可以看到这里会先截取一段路径,也就是说我们不能直接对要上传的文件直接压缩,而是要先放到一个文件夹后才能进行压缩。这也是为什么上面复现的时候为什么要在shell文件夹下放shell.php文件。 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-6045845ba95592184f29e6f194b9b5334e6d66b7.png) 这里的$re会截取出来的$dir与$plugin\_name进行拼接然后返回完整的文件名 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-70e69bcd4e8ca0f7942ac0010286908e48f89891.png) 按照我们复现的内容,这里拼接出来应该是shell/shell.php 这里需要注意一个点,那就是$plugin\_name也是通过$dir去截取得到的,也就是说我们的保存的文件名要与文件路径名一致,不然这里$re就会返回false。 所以我之前测试的时候发现使用路径1/shell.php一直不行的原因也是这个。 路径与文件名相同后就会正常返回上传了。 这里我们调试走一遍看看是否与我们想的一致 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-e3e4a002b808388ff6c6a360d7a9fba8ce77823b.png) 可以看到这里和我们想的一样路径与文件名相同时可以成功读取到内容,$re也有值。 但是路径与文件名不一致时 ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/03/attach-68f97ad7dce0cd647f73172a433333debef21e86.png) 这里就都是以路径为主的123了,因为没有123/123.php,所以$re值为false就走不下去了。 0x04 总结 ------- 第一次做代码审计的漏洞分析,主要是该漏洞在最新版还是没有进行修复,于是才会突发奇想来分析一下,也有可能不修复的原因是因为该处就是需要php文件类型的插件吧,写得不够好的话请多担待
发表于 2024-04-15 09:39:26
阅读 ( 11518 )
分类:
漏洞分析
2 推荐
收藏
0 条评论
请先
登录
后评论
Myan
1 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!