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
】