WordPress是基于PHP和MySQL的免费开源内容管理系统(CMS)。 它是全球使用最广泛的CMS软件,截至2019年5月,它为排名前1000万个网站中提供了超过30%的支持,并拥有在使用CMS构建的所有网站中,估计有60%的市场份额。
WordPress始于2003年,最开始仅为一款简单的博客系统,但现已发展成为具有数千款插件,小工具和主题功能完整的CMS系统。它是根据开源协议通用公共许可证(GPLv2或更高版本)进行授权。
WordPress 本身的安全性是毋庸置疑的,但是因其存在大量WordPress插件,是为开源博客程序WordPress添加各种功能的扩展组件。WordPress之所以成为使用最广泛的博客程序之一,正因为它拥有非常多的插件。仅wordpress官网已收录的插件就有一万多个。如果算上没有被WordPress官网收录的插件,说有十万个,一点也不夸张。有了这数量庞大的WordPress插件,让WordPress程序可以扩展出各种各样的功能。插件的安全性不能存在保证,存在一定性问题。
当然我们发掘也是基于历史版本来进行分析,在最新版均不存在该问题

任意文件读取

我们看到其中的资产管理模块,一般在这个模块下都是对服务器的文件操作,所以可以尝试打开文件夹并修改相关参数利用 ../
来实现跨目录读取

抓取到数据包可以看到其中对应的两个比较重要的参数 action 和 path
add_action('wp_ajax_wpdm_scandir', array($this, 'scanDir'));

我们看到会对获取的 path 进行解密操作,然后就是读取,关于解密的操作太过于复杂,对代码的整体逻辑并没有太大的影响。我们可以直接调用函数输出解密前和解密后的字符串

我们可以看到最后读取的文件目录 我们尝试控制 path 为 ../../../
加密后的字符串,看是否会对读取的目录有影响

我们注意到最后读取的路径吃掉
了传入 /
我们仔细观察代码,哪一部分对此进行了处理

就是这一部分对传入的 path 进行了处理
但是处理的相当不严谨了,仍然可以绕过,进行了三次替换,但是我们可以通过
echo Crypt::encrypt("..\\\\..\\\\..\\\\..\\\\..\\\\..\\\\..\\\\..\\\\");
生成的字符串进行绕过

最后成功跨目录的读取到了网站根目录下的文件
任意文件下载

在模块的设置中,我们可以直接设置文件管理的根目录

主要设置了参数 \_wpdm\_file\_browser\_root
再回到资产管理模块

点击下载就下载到了根目录下的 1.txt


获取到 wpdmfmdl 的值并解密

拼接上之前设定的参数,就实现了任意文件下载