CVE-2024-9047 (WordPress File Upload 插件漏洞分析)

CVE-2024-9047 (WordPress File Upload 插件漏洞分析)

船山信安 2024-12-28 16:00

利用poc

对这个脚本进行解释。漏洞在于wfu_file_downloader.php中

源码我下下来了。

在这个链接里面可以找到老版本下载,附件我也放了一个

https://cn.wordpress.org/plugins/wp-file-upload/advanced/

先关注到这个cve的利用点

wfu_fopen_for_downloader会存在fopen函数的直接调用。不经过严格过滤就可以出现路径遍历漏洞。

我们查看源码中哪里利用了这个函数。

发现是在wfu_download_file函数中。而wfu_download_file会直接调用。

那我们的poc中就是要控制参数就好。

查看核心利用的filepath参数的由来:

发现filepath是通过WFU_USVAR_downloader去解析获得的。

那跟踪一下这个函数。

是由一个if判断然后返回cookie中的var,这个var就是wfu_storage.$file_code

所以我们需要在cookie中传入一个wfu_storage开头的字段,然后跟上文件名,再让我们的文件名去遍历利用fopen这个函数,就可以达成利用。

就比如我在cookie中定义了一个

wfu_storage_dr0se=/../../../../../etc/passwd;

我就需要传参一个

file=dr0se,这样就可以完成利用。

之前我们分析了要过一个if判断。

追踪一下。wfu_user_state_handler是一个全局变量

是通过解析handler字段得来的

另一个则是解析dboption_base字段为cookies来判断得来的。所以我们需要传入handler和dbption_base字段来过if判断

这就是我们的payload,但是报错。所以我们需要再看看是不是有遗漏的地方。

在最开始的时候有一个if判断,如果没有满足是直接die()的。这个if判断需要我们传入参数来控制。对payload进行修改。

这里需要注意wfu_cookie不能为空,同时还要从cookie中获取一个不为空的值。

在wfu_download_file()函数里面还有对file和ticket的验证

ticket还有时间验证,所以我们还需要对ticket进行时间赋值的操作。

最后

定位到源代码的70行,这里有对协议进行判断,如果都不是,我们还需要给一个根路径。所以最后payload为

https://xzfile.aliyuncs.com/upload/affix/20241226202232-14f4bbf2-c384-1.zip :下载附件

来源:https://xz.aliyun.com/ 感谢【
1726080508280144